2012-08-03 154 views
0

我正在尝试为this problem想出一个解决方法。将Django列表路径转换为PYTHONPATH

我正在与厨师部署应用程序,目前没有设置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 -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的路径列表。这个转换需要脚本化(因为它是厨师)。

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

Python 2.7.3,Django 1.4.1。

回答

1

好了,一个简单的方法:

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

不错,我不知道tr。谢谢。 – JayCrossler 2014-01-26 18:22:39

1

,我们在看另外一个选择是像这样的东西添加到buildout.cfg

[python_wrapper] 
recipe = zc.recipe.egg 
eggs = ${buildout:eggs} 
interpreter = python 

,并添加python_wrapperparts列表。

但是,您推送的解决方法(将版本锁定到较旧版本的芹菜)更好。这是一个芹菜错误,最好等待开发者修复它。

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