$PYTHONPATH在使用Gunicorn和virtualen时发生更改

2024-09-30 16:41:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个安装在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是应用程序的一种入口点:

^{pr2}$

但是当我尝试读取PYTHONPATH或virtualenv激活时的路径,结果如下(我想要的结果!)公司名称:

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

如果你需要更多的信息,请尽管问我。如果有人能帮我,我会很高兴的。提前谢谢。在


Tags: testsrcapihomebinvenvlibusr