没有激活virtualenv的运行脚本

Dik*_*rAz 6 python virtualenv

使用virtualenv解释器运行脚本(不激活virtualenv)与在激活的virtualenv中运行脚本之间有区别吗?

venv/bin/python some_script.py
Run Code Online (Sandbox Code Playgroud)

source venv/bin/activate
python some_script.py
Run Code Online (Sandbox Code Playgroud)

Lex*_*hny 9

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

所以,如果bin/python对你有用,那就没问题,但如果你使用的某些包开始表现奇怪(或者导入了错误的包),可能是因为 Python 获取了错误的 PYTHONHOME 或者因为在 PATH 中找不到某个脚本。

  • 实际上,它看起来像是取消了 PYTHONHOME 的设置。也许它被设置在其他地方?不管怎样,激活脚本中有明确的 PYTHONHOME 处理,它会复制它并在激活期间取消设置它,然后在停用期间将其设置回来。第 13-17 行和第 49-55 行。 (2认同)

uak*_*uak 8

\n

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

\n
\n

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

\n

  • 这是令人难以置信的愚蠢。他们为什么要这样设计?如果我只是克隆主安装而不是尝试处理这个混乱,那就更容易了:\ (4认同)