Вопрос по python – getdefaultlocale возвращает None при запуске sync.db для проекта Django в PyCharm

6

OSX 10.7.3, PyCharm версии 2.5, сборка PY 117.200

Я расскажу, как получить ошибку:

I start a new project Create a new VirtualEnv and select Python 2.7 as my base interpreter (leave inherit global packages un-ticked) Click Install and choose Django v1.4 Select Django project type Tick Enable Admin Open settings.py and add sqlite3 to DATABASES:ENGINE Run sync.db Get to the point of creating a database superuser locale error

Кажется, проблема в том, что метод getdefaultlocale () ничего не возвращает (ну, нет).

<code>return getpass.getuser().decode(locale.getdefaultlocale()[1])
    TypeError: decode() argument 1 must be string, not None
</code>

Однако, если я включу virtualenvworkon MyApplication и бегиpython со следующим кодом:

<code>Python 2.7.2 (default, Feb  7 2012, 23:16:02) 
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.10.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> print locale.getdefaultlocale()
('en_GB', 'UTF-8')
</code>

So does anybody know what's going on?

Full Output:
<code>bash -cl "/Users/ash/.virtualenvs/Tester/bin/python /Applications/PyCharm.app/helpers/pycharm/django_manage.py syncdb"
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Traceback (most recent call last):
  File "/Applications/PyCharm.app/helpers/pycharm/django_manage.py", line 17, in <module>
    run_module(manage_file, None, '__main__')
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 180, in run_module
    fname, loader, pkg_name)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/Users/ash/Development/PycharmProjects/Tester/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal
    interactive=interactive, db=db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 73, in create_superuser
    call_command("createsuperuser", interactive=True, database=db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command
    return klass.execute(*args, **defaults)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 70, in handle
    default_username = get_default_username()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 105, in get_default_username
    default_username = get_system_username()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 85, in get_system_username
    return getpass.getuser().decode(locale.getdefaultlocale()[1])
TypeError: decode() argument 1 must be string, not None

Process finished with exit code 1
</code>
Следует также отметить, что работаетimport locale; print locale.getdefaultlocale возвращается(None, None) в консоли PyCharm Django. Ash
Это может быть вызвано тем, что приложение GUI (PyCharm) имеет среду, отличную от вашего терминала, см.devnet.jetbrains.net/docs/DOC-1160 для деталей как это исправить, возможно добавивLC_ALL=en_US.UTF-8 для приложений GUI это исправит. CrazyCoder
... но я могу ошибаться, поскольку он все еще работает черезbash -cl и должен иметь доступ к той же терминальной среде. CrazyCoder
ЭтоDjango Bug #16017 brousch

Ваш Ответ

2   ответа
7

Перейти на терминал:

$ nano .bash_profile

добавлять:

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

(или используйте команду locale -a, чтобы увидеть, какие из них вам доступны)

сохраните и попробуйте снова.

Error: User Rate Limit Exceeded Ash
Error: User Rate Limit Exceeded.bash_profile. Ash
Error: User Rate Limit Exceeded
13

что PyCharm по умолчанию не имеет доступа к переменным среды.

Я нашел 3 решения этой проблемы:

Set a global environmental variable, using the link CrazyCoder suggests in the comments to this question.

Run PyCharm from a terminal window by changing to the PyCharm application directory and running ./pycharm (possibly create a symlink in your PATH to make this less inconvenient)

Open PyCharm preferences, browse to Console > Django Console, type in your required environmental variables as you would in your bash profile e.g. LC_ALL=en_US.UTF-8

Я бы предложил третий способ как наиболее элегантный, хотя раздражает, что переменные не загружаются по умолчанию.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededsettings.pyError: User Rate Limit Exceededimport os; os.environ['LANG'] = 'en_US.UTF-8'Error: User Rate Limit Exceeded

Похожие вопросы