【发布时间】:2019-02-26 05:02:58
【问题描述】:
如果我有像这样激活 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 服务中的虚拟环境。见:How to enable a virtualenv in a systemd service unit?
- 通过 mod_wsgi (Apache): https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#daemon-mode-single-application
(我又考虑过了。我想设置变量不是python或virtualenv的工作。我需要一种统一的方式来设置环境变量。就我而言,我想在不使用shell的情况下做到这一点包装器)。
【问题讨论】:
-
用于激活virtualenv的activate脚本(在virtual env的bin目录下)可能是设置环境变量的地方。所有 python 脚本都应该继承这些,但从维护的角度来看,它可能不是一个好选择,因为如果你设置了一个新的 virtualenv,你必须记住再次修改激活脚本。
-
@AbhinavUpadhyay 如果我在问题的代码行中调用解释器,那么激活 shell 脚本不会被执行。
-
@OliverRadini 您提到的问题不适用。 AFAIK这些问题通过在(shell)脚本中设置环境变量来解决这个问题,该脚本在python解释器启动之前执行。在我的问题中,解释器被称为“#!/path/to/venv/bin/python”我无法编写包装外壳脚本。
-
啊,我明白了,谢谢;对困惑感到抱歉。我现在会在那里留下我的评论,以防有人想要更多关于不会解决问题的信息
标签: python virtualenv