2017-08-08 4 views
2

です作業ディレクトリにファイルを作成します。gunicornは、私はシンプルなPythonのプログラムを書いた腐敗のsys.path

# /tmp/Code.py 
print "I never said to search CWD!!! Your Python is broken." 
import sys 
print sys.path 

結果は上記と同じです。exp影響を受けた。私はgunicornで実行したときに

はしかし、私が取得:

max% gunicorn Main:app 
2017-08-08 10:30:53 [26913] [INFO] Starting gunicorn 17.5 
2017-08-08 10:30:53 [26913] [INFO] Listening at: http://127.0.0.1:8000 (26913) 
2017-08-08 10:30:53 [26913] [INFO] Using worker: sync 
2017-08-08 10:30:53 [26918] [INFO] Booting worker with pid: 26918 
I never said to search CWD!!! Your Python is broken. 
['/tmp', 
'/usr/bin', 
'/tmp/src', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] 

gunicornがランダムのsys.pathにPWDを追加することを決定したことが表示されます。ガンコーンのマンページにこれについては何もない。

pythonの構成:

Flask==0.10.1 
Jinja2==2.7.2 
MarkupSafe==0.18 
PAM==0.4.2 
Pillow==2.3.0 
Twisted-Core==13.2.0 
Twisted-Web==13.2.0 
Werkzeug==0.9.4 
adium-theme-ubuntu==0.3.4 
apt-xapian-index==0.45 
argparse==1.2.1 
blinker==1.3 
chardet==2.0.1 
colorama==0.2.5 
command-not-found==0.3 
debtagshw==0.1 
defer==1.0.6 
dirspec==13.10 
duplicity==0.6.23 
gevent==1.0 
greenlet==0.4.2 
gunicorn==17.5 
html5lib==0.999 
httplib2==0.8 
itsdangerous==0.22 
lockfile==0.8 
lxml==3.3.3 
oauthlib==0.6.1 
oneconf==0.3.7.14.04.1 
pexpect==3.1 
piston-mini-client==0.7.5 
pyOpenSSL==0.13 
pycrypto==2.6.1 
pycups==1.9.66 
pygobject==3.12.0 
pyinotify==0.9.4 
pyserial==2.6 
pysmbc==1.0.14.1 
python-apt==0.9.3.5ubuntu2 
python-debian==0.1.21-nmu2ubuntu2 
pyxdg==0.25 
reportlab==3.0 
requests==2.2.1 
sessioninstaller==0.0.0 
simplejson==3.3.1 
six==1.5.2 
software-center-aptd-plugins==0.0.0 
ssh-import-id==3.21 
system-service==0.1.6 
unity-lens-photos==1.0 
urllib3==1.7.1 
wheel==0.24.0 
wsgiref==0.1.2 
xdiagnose==3.6.3build2 
zope.interface==4.0.5 

私はrealpath(p) == realpath('.')を検索してのsys.pathからPWDを削除する可能性が知っているが、時には我々はPYTHONPATHにPWDをしたいです。したがって、より慎重な解決が必要です。理想的には、どのソフトウェアがバグを導入しているのか把握しようとします。単純にgunicornのマンページが不完全であるかもしれませんか?

+1

'' gunicorn --pythonpath src'が 'setenv PYTHONPATH src'よりもうまく機能しています。私はガンコンが実際のドキュメンテーションをしたかったのです。 –

+0

これは、gunicornがPWDの前に '--pythonpath'を追加してから' PYTHONPATH'を追加しているようです。ですから、 ' - pythonpath $ PYTHONPATH'で常にgunicornを実行するのが一般的な解決策になります。これは本当にマンページに追加する必要があります。 –

+0

は、質問に対する答えとしてどのように問題を解決したのかを説明し、それを承認します。 – marcusshep

答えて

1

編集/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py、次の行に変更:

sys.path.insert(0, cwd) 

へ:予想通り

sys.path.append(cwd) 

その後--pythonpath作品を。

+0

上記の編集を実行する標準のPythonパッケージを作成するにはどうすればよいですか?私たちのパッケージ 'gunicorn_pythonpath_enabler'を呼んでみましょう。 –

+0

いくつかのlibにパッチをパッケージ化するよりも、Gunicornにプルリクエストを行うほうが効率的です。 – bfontaine

関連する問題