作者:whdibk30 | 来源:互联网 | 2022-12-04 10:49
如果我有python脚本激活virtualenv像这样:
#!/path/to/venv/bin/python
如何在不修改此脚本的情况下为此脚本设置变量?
我希望这个环境变量对所有使用这个virtualenv的脚本都是活动的.
这意味着修改此脚本不是解决方案,因为有20个脚本,我不想修改20个脚本.
在python脚本周围编写shell包装器脚本会起作用,但我想避免这种情况.
在过去,我认为自定义sitecustomize.py
可用于启动代码.但是Ubuntu(AFAIK是唯一一个这样做的发行版)附带了自己的sitecustomize.py文件,其效果是我的sitecustomize.py没有被调用.请参阅https://bugs.launchpad.net/ubuntu/+source/python2.5/+bug/197219
以下是我想要使用virtualenv的一些方法:
通过unix cron执行的脚本.
系统服务中的virtualenv.请参阅:如何在systemd服务单元中启用virtualenv?
通过mod_wsgi(Apache):https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#daemon-mode-single-application
(我再次考虑过这个问题.我猜设置变量不是python或virtualenv的工作.我需要一种统一的方法来设置环境变量.在我的情况下,我想这样做而不使用shell包装器).
1> georgexsh..:
在编写sitecustomize.py
文件和更改bin/python
所有都是可行的解决方案时,我建议另一种方法不涉及直接更改virutalenv内的内容,只需安装一个.pth
文件:
./venv/lib/python2.7/site-packages/_set_envs.pth
内容:
import os; os.environ['FOO'] = 'bar'
测试:
$ ./venv/bin/python -c "import os; print os.getenv('FOO')"
bar
诀窍是,python将在启动时加载每个.pth
文件,如果有一行开头,则该行将被执行,允许注入任意代码.import
优点是,您可以简单地编写一个python包来安装此.pth
文件与setuptools,安装到您想要更改的virtualenv.