如果我有像这样激活 virtualenv 的 python 脚本:
#!/path/to/venv/bin/python
如何在不修改此脚本的情况下为此脚本设置变量?
我希望这个环境变量对 所有 使用这个 virtualenv 的脚本都有效。
这意味着修改这个脚本不是解决方案,因为有二十个脚本,我不想修改二十个脚本。
围绕 python 脚本编写一个 shell 包装器脚本是可行的,但我想避免这种情况。
过去我认为自定义 sitecustomize.py
可以用于启动代码。但是 Ubuntu(AFAIK 是唯一这样做的发行版)带有自己的 sitecustomize.py 文件,结果是我的 sitecustomize.py 没有被调用。请参阅 https://bugs.launchpad.net/ubuntu/+source/python2.5/+bug/197219
以下是我想如何使用 virtualenv 的一些方法:
- 通过 unix cron 执行的脚本。
- systemd 服务中的 virtualenv。请参阅: 如何在 systemd 服务单元中启用 virtualenv?
- 通过 mod_wsgi(Apache): https ://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#daemon-mode-single-application
(我再次考虑过这个问题。我想设置变量不是 python 或 virtualenv 的工作。我需要一种统一的方式来设置环境变量。在我的例子中,我想在不使用 shell 包装器的情况下这样做)。
原文由 guettli 发布,翻译遵循 CC BY-SA 4.0 许可协议
在编写
sitecustomize.py
文件和更改bin/python
都是可行的解决方案时,我会建议另一种不涉及直接更改virutalenv内容的方法,只需安装一个.pth
文件:内容:
测试:
诀窍是,python 将 在启动 时加载每个
.pth
文件,如果有一行以import
开头, 则该行将被执行,允许注入任意代码。优点是,你可以简单地编写一个 python 包来 安装这个
.pth
文件,安装工具,安装到你想要更改的 virtualenv。