0

私はこの問題の回避策を考え出そうとしています。

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を使用してスクリプトを巨大な「exportPYTHONPATH = ...」ステートメントに変換し、それを.bashrcに入れることしか考えられません。より良い方法があるに違いありませんか?

Python 2.7.3、Django1.4.1。

4

2 に答える 2

1

わかりました、より簡単な方法:

export PYTHONPATH='/opt/app/current':`ls -d -1 /opt/app/current/eggs/* | tr '\n' ':'`
于 2012-08-03T03:01:53.983 に答える