我正在尝试为这个问题想出一个解决方法。
我正在使用 Chef 部署应用程序,目前没有设置 PYTHONPATH。这对 Django 来说很好,它设置了自己的路径:
$ cat bin/django
#!/usr/bin/python
import sys
sys.path[0:0] = [
'/opt/mytardis/releases/2737f42a91cd1b5d0a4b4c4609550fc586e351ab/eggs/nose-1.1.2-py2.7.egg',
'/opt/mytardis/releases/2737f42a91cd1b5d0a4b4c4609550fc586e351ab/eggs/coverage-3.4-py2.7-linux-x86_64.egg',
'/opt/mytardis/releases/2737f42a91cd1b5d0a4b4c4609550fc586e351ab/eggs/django_nose-1.1-py2.7.egg',
...
但是,Celery 直接启动“python”进程,但由于找不到模块而失败。总之:
$ python -c from billiard.forking import main
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named billiard.forking
$ bin/django shell
>>> from billiard.forking import main
>>>
所以我需要将 Django 脚本中设置的路径列表转换为 Python 可用的 PYTHONPATH。而且这种转换需要是可编写脚本的(因为它是 Chef)。
到目前为止,我只能考虑使用 Awk 将脚本转换成一个巨大的“export PYTHONPATH=...”语句并将其放入 .bashrc 中。肯定有更好的办法?
Python 2.7.3,Django 1.4.1。