2012-08-03 153 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列表。

但是,您推送的解決方法(將版本鎖定到較舊版本的芹菜)更好。這是一個芹菜錯誤,最好等待開發者修復它。

(所以我們還沒有試過上面的解決方案,看看它是否真的有效......)