Python os.getenv на OSX (Django 1.4)

Я только что обновил среду Django 1.4. При первом запуске syncdb я получаю следующую ошибку:

TypeError: decode() argument 1 must be string, not None

Эта ошибка запускается с помощью django/contrib/auth/management/init:

try:
 return getpass.getuser().decode(locale.getdefaultlocale()[1])
except (ImportError, KeyError, UnicodeDecodeError):
 # KeyError will be raised by os.getpwuid() (called by getuser())
 # if there is no corresponding entry in the /etc/passwd file
 # (a very restricted chroot environment, for example).
 # UnicodeDecodeError - preventive treatment for non-latin Windows.
 return u''

getdefaultlocale возвращает None

Прочитав этот билет Django, я попробовал неофициальный патч, который работал, но я думаю, что я мог бы сделать лучше, выяснив, что происходит.

Итак, я открыл командную строку python и попытался:

import os
print os.getenv()
None
os.getenv.__doc__
"Get an environment variable, return None if it doesn't exist.\n The optional second argument can specify an alternate default."

Могу ли я решить эту проблему в самой OSX? Советы приветствуются

1 ответ

Непосредственное разрешение для этого, если вы используете bash в качестве оболочки:

$ export LC_ALL=en_US.UTF-8

$ export LANG=en_US.UTF-8

Это установит ваш язык для этого сеанса, и syncdb будет работать. Вы можете добавить это в свой профиль и сделать его постоянным для своих снарядов.

Вы можете использовать команду locale для просмотра текущих настроек и locale -a, чтобы узнать, какие локали вам доступны. en_US.UTF-8 является общим безопасным, но у вас могут быть другие настройки.

licensed under cc by-sa 3.0 with attribution.