【发布时间】:2015-06-22 13:01:54
【问题描述】:
我正在为我的组织创建一个新的环境设置脚本,但在安装 Django 时遇到了问题。在 virtualenv 下执行pip install 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 下找到并且一切正常。
什么可能导致新点子出现这种特殊行为?
更新
看来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 文件之间有什么共同点吗?
【问题讨论】:
-
您的项目设置中是否设置了
LOCALE_PATHS? -
@marksweb 感谢您的输入,我没有。但我想强调的是,问题似乎是关于 pip 没有正确安装 Django,而不是关于 Django 找不到文件。另请参阅更新。
-
我很想知道如何正确解决这个问题:它似乎发生在我的 jenkins 机器上(运行某种 jessie/sid),但不在我的 Mac 上。跨度>
-
可能与stackoverflow.com/a/20370738/188有关,django/djcelery打包数据文件的方式。
-
这里有同样的问题。非常感谢您找出翻译的奇怪位置!
标签: python django pip virtualenv