在没有虚拟环境激活的情况下运行脚本


使用 virtualenv

解释器(没有 virtualenv 激活)运行脚本和在激活的 virtualenv 中运行脚本之间有区别吗?

venv/bin/python some_script.py

source venv/bin/activate
python some_script.py

运行source bin/activate会将 PATH 变量设置为指向您的环境bin目录,如果您安装了其他命令行脚本/二进制文件,这很有用(这可能发生在某些添加 shell 命令的 python 包中),它还将取消设置/设置 PYTHONHOME。

所以,如果bin/python适合你,那么你很好,但是如果你使用的一些包开始表现奇怪(或者导入了错误的包),这可能是因为Python得到了错误的PYTHONHOME,或者因为在PATH中找不到某个脚本。

如果您直接从 virtualenv 的 bin/目录运行脚本或 python 解释器(例如 path/to/ENV/bin/pip 或/path/to/ENV/bin/python-script.py),则 sys.path 将自动设置为使用与 virtualenv 关联的 Python 库。但是,与激活脚本不同,不会修改环境变量 PATH 和 VIRTUAL_ENV。这意味着,如果你的 Python 脚本使用子进程来运行另一个 Python 脚本(例如通过 #!/usr/bin/env python shebang 行),第二个脚本可能不会使用与第一个脚本相同的 Python 二进制文件执行,也不会使用相同的库可用。为避免这种情况发生,在执行第二个脚本之前,您的第一个脚本需要以与激活脚本相同的方式修改环境变量。

来源: https://virtualenv.pypa.io/en/16.7.9/userguide.html#activate-script

是的。Virtualenv 本身创建了一个解释器。就这样做,

which python

对于每个口译员,virtualenv和您的普通口译员,看看会发生什么。他们将向您展示两个不同的python解释器链接。这是我的例子:

quazinafiulislam@Nafiuls-Mac: ~/Code/Python/PyTestingZone
 $ which python                                                                                               [7:49:26]
/Users/quazinafiulislam/.pyenv/shims/python
quazinafiulislam@Nafiuls-Mac: ~/Code/Python/PyTestingZone
 $ source .venv/bin/activate                                                                                  [7:49:29]
(.venv)
quazinafiulislam@Nafiuls-Mac: ~/Code/Python/PyTestingZone
 $ which python                                                                                               [7:49:35]
/Users/quazinafiulislam/Code/Python/PyTestingZone/.venv/bin/python

最新更新