4

パッケージのインストール順序がPythonで重要かどうか誰かが知っていますか?具体的には、requirements.txt私が構築しているDjangoWebサイトのピップは次のとおりです。

Django==1.4
MySQL-python==1.2.3
django-evolution==0.6.7
django-pagination==1.0.7
boto==2.5.2
numpy==1.6.2
requests==0.13.1
simplejson==2.5.2
gunicorn==0.14.6

Herokuにデプロイすると、アプリケーションがクラッシュして次のエラーが発生します。

2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [12] [INFO] Worker exiting (pid: 12)
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [8] [INFO] Worker exiting (pid: 8)
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [4] [INFO] Handling signal: term
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [7] [INFO] Worker exiting (pid: 7)
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [4] [INFO] Starting gunicorn 0.14.6
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [4] [INFO] Listening at: http://0.0.0.0:20132 (4)
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [4] [INFO] Using worker: sync
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [7] [INFO] Booting worker with pid: 7
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [8] [INFO] Booting worker with pid: 8
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [9] [INFO] Booting worker with pid: 9
2012-08-05T09:26:56+00:00 app[web.1]: 2012-08-05 09:26:56 [10] [INFO] Booting worker with pid: 10
2012-08-05T09:26:57+00:00 heroku[web.1]: State changed from starting to up
2012-08-05T09:26:57+00:00 heroku[web.1]: Process exited with status 143
2012-08-05T09:27:17+00:00 app[web.1]: Usage: gunicorn [options]
2012-08-05T09:27:17+00:00 app[web.1]: gunicorn: error: no such option: --workers
2012-08-05T09:27:17+00:00 app[web.1]: 
2012-08-05T09:27:17+00:00 app[web.1]: 2012-08-05 09:27:17 [9] [INFO] Worker exiting (pid: 9)

Procfileは次のようになります:

web: python manage.py collectstatic --noinput; gunicorn commerical_production.wsgi:application --workers=4 --bind=0.0.0.0:$PORT

この問題は、要件の順序を次のように変更するだけで修正されました。

Django==1.4
gunicorn==0.14.6
MySQL-python==1.2.3
django-evolution==0.6.7
django-pagination==1.0.7
boto==2.5.2
numpy==1.6.2
requests==0.13.1
simplejson==2.5.2

gunicorn(これが一番上に移動していることに注意してください)

幸運にもインポートの順序を変更しようと推測してこれを見つけましたが、私の質問は、他の誰かがこの問題に遭遇したか、パッケージの順序がインストール時に違いを生む理由を知っているかrequirements.txtどうかです。この問題は、私のアプリにあるより大きな依存関係の問題を示している可能性がありますか?

4

2 に答える 2

1

Pipは、easy_installのようにパッケージの依存関係を処理するのはあまり得意ではありません。私たちのプロジェクトでも同じ問題がありました。req.txtの順序は正しいのですが、順序に関連する依存関係の問題がありました。

私の解決策は、req.txtをeasy_installにフィードすることですが、編集可能なパッケージやgithubなどのパッケージには注意する必要があります。

以下のリンクを確認することをお勧めします。

http://metak4ml.blogspot.com/2009/08/easyinstall-read-pip-requirementstxt.html http://community.webfaction.com/questions/1220/using-easy_install-to-get-all-dependencies-listed -in-requirementstxt(読み取り行の回答は私たちが行うことに近いですが)

于 2012-08-07T09:00:29.880 に答える
0

Pytonセットアップインストールスクリプトはすでに要件と順序を保持しているため、インストールプロセスは、要件ファイル内の各アプリのすべての要件を尊重して順番にインストールします。

したがって、他のアプリケーションを必要とする独自のアプリケーションがある場合は、要件をセットアップファイルにのみ入れ、メインアプリケーションをrequirements.txtに登録します。

コンパイルを必要としないサードパーティのPythonアプリの場合、要件の順序について心配する必要はありません。

それ以外の場合、eazy_installは非推奨になります。代わりに、pipを使用してください。

于 2012-08-07T09:12:51.093 に答える