158

When I was trying to use pelican3.3, I typed the commend "pelican-quickstart", some errors showed up.

These are the errors:

(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

My OS is OS X Mavericks.

Richo
  • 1,649
  • 2
  • 13
  • 13

6 Answers6

459

You could try a solution posted here or here. Basically, add some lines to your ~/.bash_profile:

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

There is an outstanding bug report related to this issue. It appears that Python makes some assumptions about the format of locale names that aren't universally valid. Explicitly setting these environment vars is basically just a workaround for that bug.

[Edit:] As @asmeurer correctly points out, the above fix assumes English and the U.S. You should really pick your preferred locale from the list given by locale -a (generally one that ends in UTF-8).

Gerrat
  • 28,863
  • 9
  • 73
  • 101
  • 8
    This solved the problem for me too with anaconda on MAC OSX in fish shell. set -x LC_ALL en_US.UTF-8 set -x LANGen_US.UTF-8 – andershqst Oct 27 '14 at 16:44
  • Breaking my head since 8 hours due to not setting this while building a maven project on my MAC OS X Yosemite Version 10.10.1. Its by default in my friend's MAC OS X Version 10.10.3 – sumanth232 Jun 04 '15 at 13:20
  • It kept getting me the same error so I realized that I was running the commands while the server was still up. So first stop the server then do those exports. And you are good to start the server again. – Victor Augusto Mar 02 '16 at 18:55
  • 2
    It worked but can anybody explain why we should do it? – jblixr Mar 08 '16 at 08:30
  • 6
    Here's a one-liner to do this more conveniently: `echo -e "export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8" >> ~/.bashrc && source ~/.bashrc` – waldyrious Mar 24 '16 at 10:51
  • It works, but could someone explain why it works and if there is a side-effect :) – BjornW Jun 30 '16 at 09:05
  • 2
    This fix is only correct if you speak English and live in the US (which typically isn't the case for people that see this issue). The real fix is to set `LANG` to the correct string for your locale (you can list them all with `locale -a`), generally using the one that ends with `UTF-8`. – asmeurer Aug 11 '16 at 17:13
10

Gerrat's answer works, and I believe we should mention that if you use somthing like zsh, you should add lines to ~/.zshrc instead of ~/.bash_profile or ~/.bash_rc

JasonWayne
  • 1,724
  • 1
  • 19
  • 16
10

Upstairs answers were quick great! But I believe people lazy like me want to change the global environment in case never change again while change to another Login user. So we need to change the file like:

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

And then add the two line in the following files

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

Remember do not miss one of them, it doesn't work for me just $LANG or $LC_ALL. After that run the command to active the environment.

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

Again, lazy people like me can finish in one line command.

echo -e "export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8" >> ~/.bash_profile && source ~/.bash_profile
Sanjay Chan
  • 569
  • 4
  • 13
4

I'm reposting my answer from this question here, since that it was marked as a duplicate of this one, and the accepted answer on this question is wrong in many ways.

This is a bug in the OS X Terminal app that only shows up in certain locales (country/language combinations). Open Terminal in /Applications/Utilities and uncheck the box “Set locale environment variables on startup”.

enter image description here

This will set your LANG environment variable to be empty. This may cause terminal use to incorrect settings for your locale. The locale command in the Terminal will tell you what settings are used. To use the correct language, add a line to your bash profile (typically ~/.profile)

export LANG=your-lang

Replace your-lang with the correct locale specifier for your language. The command locale -a will show you all the specifiers. For example, the language code for US English is en_US.UTF-8. The locale affects what translations are used when they are available, and also how dates, currencies, and decimals are formatted.

Note, this image and content were taken from http://conda.pydata.org/docs/troubleshooting.html#unknown-locale (I'm also the original author of that page).

Community
  • 1
  • 1
asmeurer
  • 86,894
  • 26
  • 169
  • 240
3

None of the solutions mentioned here worked for me running a python 3.7 project in a local app engine environment.

Although I could retrieve the locale through the command line just fine:

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

That locale could not be found within the app engine environment:

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

So I had to explicitly set env_variables in my app.yaml file:

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

And that solved the bug.

Stiño
  • 2,663
  • 7
  • 25
  • 47
1

For some reason I also needed:

export LC_CTYPE=en_US.UTF-8
Michiel Roos
  • 863
  • 11
  • 13
  • For some reason, you got the answer I was looking for... it's been like 2 hours. Thanks! – JFC Jan 31 '19 at 19:21