【问题标题】:Cd to virtual environment instead of sourcing itcd 到虚拟环境而不是采购它
【发布时间】:2018-08-30 20:38:27
【问题描述】:

我想知道“cd”直接到虚拟环境是否与采购虚拟环境相同。也就是说,

  1. source <venv_name>/bin/activate
  2. cd <venv_name>/bin/

(1)和(2)一样吗?即,所有可见的 (1) 是否也在 (2) 中可见?

【问题讨论】:

    标签: linux python-3.x virtualenv


    【解决方案1】:

    这不是一回事。

    1. source <venv_name>/bin/activate

    这会改变站点包的解析位置。它通过一个非常简单的技巧来实现这一点:在环境变量 ($PATH) 上添加 venv 的 bin 目录,这会影响 python 命令的解析位置。

    1. cd <venv_name>/bin/

    将目录更改为<venv_name>/bin不会使安装在venv(位于../lib)中的软件包可用于导入。命令python 仍将解析为/usr/local/bin/python(或您的系统python 解释器所在的任何位置),并且解释器仍将使用系统站点包。你不会看到 venv 的库。

    在你的 virtualenv 内外检查python -m site 的输出,看看有什么不同。

    【讨论】:

    • 嗨,wim:如果是这样,是否可以在不使用 source 命令的情况下在虚拟环境中发出任何等效命令?
    • 您可以使用. <venv_nam>/bin/activate。或者直接执行venv python:./<venv_name>/bin/python.
    • 我想看到的是只在虚拟环境中可见的文件和模块的存在。有没有办法让 python 在虚拟环境中查看这些文件,而无需获取 /bin/activate 文件。
    • 那么,为了让 Python 解释器在执行期间可以看到特定于虚拟环境的源文件和模块,我应该在导入语句中包含 以使这些模块/源代码可见?跨度>
    • 我已经在上面的 cmets 中回答了这个问题。您可以直接执行 venv python:/path/to/<venv_name>/bin/python。然后 venv 包将可供导入。
    【解决方案2】:

    (1) 和 (2) 一样吗?即,所有可见的 (1) 是否也在 (2) 中可见?

    没有。这两个命令做完全不同的事情。

    虚拟环境不是您可以“进入”的“事物”。当您获取虚拟环境激活脚本时,它几乎唯一要做的就是设置一些环境变量。

    如果您不想运行激活脚本,您可以手动设置这些变量。但是,您不能使用cd 命令来执行此操作。

    【讨论】:

    • 环境是什么。要设置的变量等同于 "source ""/bin/activate"?
    • @user1972031:当您获取脚本时,它会设置环境变量PYTHONPATH。只需查看脚本,您就可以确切地看到它的作用。
    猜你喜欢
    • 2019-09-24
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多