Вопрос по python – getdefaultlocale возвращает None при запуске sync.db для проекта Django в PyCharm
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 SelectDjango
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.
LC_ALL=en_US.UTF-8
для приложений GUI это исправит.
bash -cl
и должен иметь доступ к той же терминальной среде.
Перейти на терминал:
$ nano .bash_profile
добавлять:
export LC_ALL=en_GB.UTF-8
export LANG=en_GB.UTF-8
(или используйте команду locale -a, чтобы увидеть, какие из них вам доступны)
сохраните и попробуйте снова.
.bash_profile
.
что 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
Я бы предложил третий способ как наиболее элегантный, хотя раздражает, что переменные не загружаются по умолчанию.
settings.py
Error: User Rate Limit Exceededimport os; os.environ['LANG'] = 'en_US.UTF-8'
Error: User Rate Limit Exceeded