Erreur Pelican 3.3 pelican-quickstart "ValueError: locale inconnue: UTF-8"

154

Quand j'essayais d'utiliser pelican3.3, j'ai tapé la commande "pelican-quickstart", des erreurs sont apparues.

Voici les erreurs:

(PelicanEnv)59-127-113-90:myblog Richo$ pelican-quickstart
Traceback (most recent call last):
  File "/Users/Richo/Dropbox/Github/PelicanEnv/bin/pelican-quickstart", line 9, in <module>
    load_entry_point('pelican==3.3', 'console_scripts', 'pelican-quickstart')()
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pelican/__init__.py", line 16, in <module>
    from pelican.generators import (ArticlesGenerator, PagesGenerator,
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pelican/generators.py", line 20, in <module>
    from pelican.readers import Readers
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/pelican/readers.py", line 11, in <module>
    import docutils.core
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/docutils/core.py", line 20, in <module>
    from docutils import frontend, io, utils, readers, writers
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/docutils/frontend.py", line 41, in <module>
    import docutils.utils
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/docutils/utils/__init__.py", line 20, in <module>
    import docutils.io
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/docutils/io.py", line 18, in <module>
    from docutils.utils.error_reporting import locale_encoding, ErrorString, ErrorOutput
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/site-packages/docutils/utils/error_reporting.py", line 47, in <module>
    locale_encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1]
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/locale.py", line 513, in getdefaultlocale
    return _parse_localename(localename)
  File "/Users/Richo/Dropbox/Github/PelicanEnv/lib/python2.7/locale.py", line 445, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

Mon système d'exploitation est OS X Mavericks.

Richo
la source
eu le même problème en utilisant kivy, sur des non
conformistes

Réponses:

456

Vous pouvez essayer une solution publiée ici ou ici . En gros, ajoutez quelques lignes à votre ~ / .bash_profile:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Il existe un rapport de bogue exceptionnel lié à ce problème. Il semble que Python formule des hypothèses sur le format des noms de paramètres régionaux qui ne sont pas universellement valables. La définition explicite de ces variables d'environnement n'est en fait qu'une solution de contournement pour ce bogue.

[Edit:] Comme @asmeurer le souligne correctement, le correctif ci-dessus suppose l'anglais et les États-Unis. Vous devriez vraiment choisir votre langue préférée dans la liste fournie par locale -a(généralement celle qui se termine par UTF-8).

Gerrat
la source
J'ai eu la déconnexion / connexion du PC. Merci pour tout.
Jose Carlos Ramos Carmenates
8
Cela a résolu le problème pour moi aussi avec anaconda sur MAC OSX en coquille de poisson. set -x LC_ALL en_US.UTF-8 set -x LANGen_US.UTF-8
andershqst
2
Cela a fonctionné, mais quelqu'un peut-il expliquer pourquoi nous devrions le faire?
jblixr
6
Voici une ligne unique pour faire cela plus facilement:echo -e "export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8" >> ~/.bashrc && source ~/.bashrc
waldyrious
2
Ce correctif n'est correct que si vous parlez anglais et vivez aux États-Unis (ce qui n'est généralement pas le cas pour les personnes qui voient ce problème). Le vrai correctif est de définir LANG la chaîne correcte pour votre locale (vous pouvez toutes les lister avec locale -a), généralement en utilisant celle qui se termine par UTF-8.
asmeurer
9

La réponse de Gerrat fonctionne, et je pense que nous devrions mentionner que si vous utilisez quelque zshchose comme , vous devriez ajouter des lignes à ~/.zshrcau lieu de ~/.bash_profileou~/.bash_rc

JasonWayne
la source
9

Les réponses à l'étage étaient super rapides! Mais je crois que les gens paresseux comme moi veulent changer l'environnement global au cas où ils ne changeraient plus jamais tout en passant à un autre utilisateur de connexion. Nous devons donc changer le fichier comme:

sudo vi /etc/profile or sudo vi /etc/bashrc

Et puis ajoutez les deux lignes dans les fichiers suivants

export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"

N'oubliez pas de ne pas en manquer un, cela ne fonctionne pas pour moi seulement $ LANG ou $ LC_ALL. Après cela, exécutez la commande pour activer l'environnement.

sudo source /etc/profile 
sudo source /etc/bashrc
source ~/.bash_profile 
source ~/.zshrc

Encore une fois, les paresseux comme moi peuvent terminer en une seule ligne de commande.

echo -e "export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8" >> ~/.bash_profile && source ~/.bash_profile
Sanjay Chan
la source
3

Je republie ma réponse à cette question ici, car elle a été marquée comme un double de celle-ci, et la réponse acceptée à cette question est erronée à bien des égards.

Il s'agit d'un bogue dans l'application Terminal OS X qui n'apparaît que dans certaines régions (combinaisons pays / langue). Ouvrez Terminal dans / Applications / Utilitaires et décochez la case «Définir les variables d'environnement locales au démarrage».

entrez la description de l'image ici

Cela définira votre LANGvariable d'environnement pour qu'elle soit vide. Cela peut entraîner l'utilisation du terminal de paramètres incorrects pour vos paramètres régionaux. La commande locale dans le terminal vous indiquera quels paramètres sont utilisés. Pour utiliser la bonne langue, ajoutez une ligne à votre profil bash (généralement ~/.profile)

export LANG=your-lang

Remplacez your-langpar le spécificateur de paramètres régionaux correct pour votre langue. La commande locale -avous montrera tous les spécificateurs. Par exemple, le code de langue pour l'anglais américain est en_US.UTF-8. Les paramètres régionaux affectent les traductions utilisées lorsqu'elles sont disponibles, ainsi que le formatage des dates, des devises et des décimales.

Notez que cette image et ce contenu proviennent de http://conda.pydata.org/docs/troubleshooting.html#unknown-locale (je suis également l'auteur original de cette page).

asmeureur
la source
2

Aucune des solutions mentionnées ici n'a fonctionné pour moi en exécutant un projet python 3.7 dans un environnement de moteur d'application local.

Bien que je puisse récupérer les paramètres régionaux via la ligne de commande très bien:

python3 -c 'import locale; print(locale.getdefaultlocale());'
('en_US', 'UTF-8')  

Ce paramètre régional est introuvable dans l'environnement du moteur d'application:

File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/locale.py", line 568, in getdefaultlocale
    return _parse_localename(localename)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/locale.py", line 495, in _parse_localename
    raise ValueError('unknown locale: %s' % localename)
ValueError: unknown locale: UTF-8

J'ai donc dû définir explicitement env_variablesdans mon fichier app.yaml:

env_variables:
  LC_ALL: "en_US:UTF_8"
  LC_CTYPE: "en_US:UTF_8"

Et cela a résolu le bug.

Stiño
la source
1

Pour une raison quelconque, j'avais également besoin de:

export LC_CTYPE=en_US.UTF-8
Michiel Roos
la source
Pour une raison quelconque, vous avez obtenu la réponse que je cherchais ... ça fait environ 2 heures. Merci!
Kiwad