将Django路径列表转换为PYTHONPATH

将Django路径列表转换为PYTHONPATH,python,django,celery,django-celery,pythonpath,Python,Django,Celery,Django Celery,Pythonpath,我正试图想出一个解决问题的办法 我正在使用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/mytard

我正试图想出一个解决问题的办法

我正在使用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',
...
然而,芹菜直接启动“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
>>>
$python-c来自billiard.forking导入main
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为billiard.forking的模块
$bin/django shell
>>>从台球。分叉进口主
>>>
因此,我需要将Django脚本中设置的路径列表转换为Python可用的Python路径。这种转换需要可以编写脚本(因为它是Chef)

到目前为止,我只能考虑使用Awk将脚本转换成一个巨大的“export PYTHONPATH=…”语句,并将其放入.bashrc中。一定有更好的办法吗

Python 2.7.3,Django 1.4.1.

好的,一种更简单的方法:

export PYTHONPATH='/opt/app/current':`ls -d -1 /opt/app/current/eggs/* | tr '\n' ':'`

我们正在考虑的另一种选择是在buildout.cfg中添加类似的内容

 [python_wrapper]
 recipe = zc.recipe.egg
 eggs = ${buildout:eggs}
 interpreter = python
并将
python\u包装器
添加到
parts
列表中

但是你在推特上发布的解决方案(将版本锁定到旧版本的芹菜)更好。这是一个芹菜错误,最好等开发人员修复它


(所以我们还没有尝试上面的解决方案,看看它是否真的有效…

很好,我不知道tr。谢谢。