python – Django的语言环境文件安装在奇怪的地方

我正在为我的组织创建一个新的环境设置脚本,但是在安装Django时遇到了问题.执行pip后,在virtualenv下安装Django == 1.4.19,需要本地化支持的测试结果如下:

  ...
  File "/home/ubuntu/venvs/myenv/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 105, in activate
    return _trans.activate(language)
  File "/home/ubuntu/venvs/myenv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 194, in activate
    _active.value = translation(language)
  File "/home/ubuntu/venvs/meynv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 184, in translation
    current_translation = _fetch(language, fallback=default_translation)
  File "/home/ubuntu/venvs/myenv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 147, in _fetch
    res._info = res._info.copy()
AttributeError: 'NoneType' object has no attribute '_info'

潜入Django的trans_real.translation()函数可以发现错误来自于尝试在〜/ venvs / myenv / local / lib / python2.7 / site-packages / django / conf / locale下找到目录django,但是该目录不包含翻译文件或LC_MESSAGES目录:

(myenv)ubuntu@ubuntu:~$ls ~/venvs/myenv/local/lib/python2.7/site-packages/django/conf/locale/en/
total 12
-rw-rw-r-- 1 ubuntu ubuntu 1637 Jun 22 13:51 formats.py
-rw-rw-r-- 1 ubuntu ubuntu 1094 Jun 22 13:51 formats.pyc
-rw-rw-r-- 1 ubuntu ubuntu    0 Jun 22 13:51 __init__.py
-rw-rw-r-- 1 ubuntu ubuntu  149 Jun 22 13:51 __init__.py

相反,.po和.mo文件可以在virtualenv的根目录下找到:

(myenv)ubuntu@ubuntu:~$ls -l ~/venvs/myenv/django/conf/locale/en/LC_MESSAGES/
-rw-rw-r-- 1 ubuntu ubuntu   356 Jun 22 13:51 django.mo
-rw-rw-r-- 1 ubuntu ubuntu 21041 Jun 22 13:51 django.po

通常目录〜/ venvs / myenv / local / lib / python2.7 / site-packages / django不包含.po-或.mo文件,所有这些文件都可以在〜/ venvs / myenv / django下找到适当的子目录.

Pip版本是7.0.3,如果我将它降级到版本6.1.1(我们之前使用过),翻译文件可以(正确?)在site-packages / django下找到,一切正常.

什么可能导致新的点子的这种行为?

UPDATE
看来djcelery包也受此影响.它的.html文件(只有那些)安装在virtualenv的根目录下,其余文件位于site-packages / djcelery下:

/home/ubuntu/venvs/myenv/djcelery/
+-- templates
    +-- admin
    |   +-- djcelery
    |       +-- change_list.html
    +-- djcelery
        +-- confirm_rate_limit.html

这些html文件和django的.po / .mo文件之间是否存在一些共同点?

最佳答案 不完全是一个优雅的修复,但如果你只是需要让你的项目启动并运行并降级pip不是一个选项,符号链接将执行它:

ln -s ~/.virtualenvs/<virtualenv>/django/conf/locale/en/LC_MESSAGES/ \
~/.virtualenvs/<virtualenv>/local/lib/python2.7/site-packages/django/conf/locale/en/
点赞