python - 在 PyCharm 的 Django 项目上运行 sync.db 时,getdefaultlocale 返回 None

标签 python django pycharm

OSX 10.7.3,PyCharm 版本 2.5 build PY 117.200

我将介绍我是如何得到错误的:

  1. 我开始一个新项目
  2. 创建一个新的 VirtualEnv 并选择 Python 2.7 作为我的基本解释器(不勾选继承全局包)
  3. 点击安装并选择 Django v1.4
  4. 选择Django项目类型
  5. 勾选启用管理员
  6. 打开settings.py并将sqlite3添加到DATABASES:ENGINE
  7. 运行sync.db
  8. 开始创建数据库 super 用户
  9. 区域设置错误

问题似乎是 getdefaultlocale() 方法没有返回任何东西(好吧,没有)。

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

但是,如果我启用 virtualenv workon MyApplication 并使用以下代码运行 python:

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')

那么有人知道发生了什么吗?

完整输出:

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

最佳答案

基本上,发生这种情况的原因是 PyCharm 默认情况下无法访问环境变量。

我找到了解决这个问题的 3 种方法:

  1. 设置全局环境变量,使用 CrazyCoder 在对此问题的评论中建议的链接。

  2. 通过切换到 PyCharm 应用程序目录并运行 ./pycharm 从终端窗口运行 PyCharm(可能在您的 PATH 中创建一个符号链接(symbolic link)以减少这种不便)

  3. 打开 PyCharm 首选项,浏览到 Console > Django Console,像在 bash 配置文件中一样输入所需的环境变量,例如LC_ALL=en_US.UTF-8

我建议第三种方式最优雅,尽管默认情况下不加载变量很烦人。

关于python - 在 PyCharm 的 Django 项目上运行 sync.db 时,getdefaultlocale 返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339963/

相关文章:

python - 使用 Python 和 BeautifulSoup 查找特定表格单元格值,然后打印整行?

python - Django:迁移到 NullBooleanField 失败并出现 IntegrityError "contains null values"

python 如何按数字=字符串对字符串列表进行排序

python - 单元测试 : assert exception-handling function called

python - 未找到符号,应在 : flat namespace 中

django - 我需要一些帮助来理解 Django 表单验证器

django - 避免在 Django 管理中使用外键对 __str__() 进行重复查询

postgresql - 在 PyCharm Database Navigator 中访问 PostGIS 函数

debugging - PyCharm调试器在 “Waiting for connection”结束后停止容器

python - 模块 'matplotlib' 没有属性 'verbose'