$ PYTHONPATH在使用Gunicorn和virtualenv时会发生变化

时间:2017-01-05 09:11:48

标签: python nginx flask virtualenv gunicorn

我正在开发一款安装在Gunicorn和nginx上的Flask的应用程序。要做到这一点,我必须为我的python Flask程序使用虚拟环境,我在根目录中,我们称之为test/,代码在test.py。我已经在venv之外配置了必要的PYTHONPATH和PATH环境变量,以便使用我的模块。他们似乎没事。 问题是:当我使用Gunicorn执行test.py时,PYTHONPATH(我用sys.path得到的路径)似乎被覆盖了,我不知道修理它。 PYTHONPATH已经使用之前的必要目录进行了定义。当我激活virtualenv时,PYTHONPATH仍然是我想要的。但是,当我使用gunicorn(使用相同的virtualenv)时,PYTHONPATH会被覆盖。我想知道为什么会被覆盖以及如何防止它。

输出upstart日志/var/log/upstart/test.log,这是执行test.py的日志文件。我配置的PROJ_LAST路径已消失。

2017-01-05 08:14:48 [7296] [INFO] Starting gunicorn 18.0
2017-01-05 08:14:48 [7296] [INFO] Listening at: http://127.0.0.1:8000 (7296)
2017-01-05 08:14:48 [7296] [INFO] Using worker: socketio.sgunicorn.GeventSocketIOWorker
2017-01-05 08:14:48 [7300] [INFO] Booting worker with pid: 7300
Result of command 'print sys.path'
['/home/myuser/test', '/home/myuser/test/venv/bin',
'/home/myuser/test/venv/lib/python2.7',
'/home/myuser/test/venv/lib/python2.7/plat-linux2',
'/home/myuser/test/venv/lib/python2.7/lib-tk',
'/home/myuser/test/venv/lib/python2.7/lib-old',
'/home/myuser/test/venv/lib/python2.7/lib-dynload',
'/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/home/myuser/test/venv/local/lib/python2.7/site-packages',
'/usr/lib/pymodules/python2.7', 
'/home/myuser/CURRENTLY_MOD/otheruser/acs-ria/trunk/PROJ/TCS/rpiPROJ/src/API']
Result of command 'print sys.executable'
/home/myuser/test/venv/bin/python

这里是暴发户。 wsgi.py是应用的一种切入点:

myuser@PROJcontrol:/etc/init$ cat test.conf
description "Gunicorn application server running test.py"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid myuser
setgid www-data

env PATH=/home/myuser/test/venv/bin
chdir /home/myuser/test
exec gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker --timeout 200 wsgi:app

但是当我在virtualenv被激活时尝试读取PYTHONPATH或PATH时,结果如下(我想要的结果!):

myuser@PROJcontrol:~/test/venv/bin$ source activate
(venv)myuser@PROJcontrol:~/test/venv/bin$ echo $PATH
/home/myuser/test/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(venv)myuser@PROJcontrol:~/test/venv/bin$ echo $PYTHONPATH
/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/clients/PROJ_client:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/Icefiles:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/API:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/observingModes/
(venv)myuser@PROJcontrol:~/test/venv/bin$ python
Python 2.7.3 (default, Feb 27 2014, 20:00:17)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', '/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/clients/PROJ_client',
'/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/Icefiles',
'/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/API',
'/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/observingModes',
'/home/myuser/test/venv/lib/python2.7',
'/home/myuser/test/venv/lib/python2.7/plat-linux2',
'/home/myuser/test/venv/lib/python2.7/lib-tk',
'/home/myuser/test/venv/lib/python2.7/lib-old',
'/home/myuser/test/venv/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/home/myuser/test/venv/local/lib/python2.7/site-packages',
'/usr/lib/pymodules/python2.7',
'/home/myuser/CURRENTLY_MOD/otheruser/acs-ria/trunk/PROJ/TCS/rpiPROJ/src/API',
'/home/myuser/test/venv/lib/python2.7/site-packages']

virtualenv venv文件夹与test.py一起定位。 bin/activate文件未受影响。

这里附有一些有趣的环境变量:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
CURRENT_BASE=/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src
PWD=/home/myuser/test
LANG=en_US.UTF-8
PS1=\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
SHLVL=1
HOME=/home/myuser
CURRENT_OBS=/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/observingModes
PYTHONPATH=/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/clients/PROJ_client:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/Icefiles:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/API:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/observingModes/
LOGNAME=myuser
CURRENT_PROJ=/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/API
SSH_CONNECTION=192.168.0.4 55163 192.168.0.97 22
LC_CTYPE=UTF-8
WIP_PROJ=/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/clients/PROJ_client:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/Icefiles:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/API:/home/myuser/PROJ_LAST/ria/TCS/rpiPROJ/src/observingModes/
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

如果您需要一些其他信息,请不要犹豫,问我。如果有人可以帮助我,我会很高兴的。提前谢谢。

0 个答案:

没有答案