如何在虚拟环境中使用Python模块?

问题描述 投票:0回答:2

我想了解 Python 虚拟环境是如何工作的。我得到了对它的需求,有不同的安装和不同的版本。

我的问题是:

  1. 如何告诉我的 .py 文件从特定虚拟环境而不是主安装导入模块?
  2. 我可以从虚拟环境导入一个模块,然后从主安装导入另一个模块吗(例如:我想使用某些模块的最新版本中不再可用的方法)?
  3. 如果我导入一个使用一个虚拟环境的脚本,一个使用另一个虚拟环境中的模块的脚本,并且某些依赖项重叠(例如:一个使用 pandas 1.0.3,另一个使用 pandas 1.0.0),会发生什么?是否处理了重叠,或者它们是否下降到相同版本(如果是,是哪一个?)?

我尝试进行实验,但在文档中找不到除了创建和包安装之外的任何内容。

编辑: 注意:对我来说,即使是部分答案(至少一个问题)也会有用并被接受,直到提供模式完整的答案。

python virtualenv
2个回答
2
投票

我将尝试回答这些问题,我确实认为您会从阅读一些虚拟环境文档中受益更多。

  1. 当您运行 python 脚本时,如果您激活该虚拟环境,虚拟环境将取代您的“主安装”。因此,一旦虚拟环境处于活动状态,它将始终查看虚拟环境安装的模块,而不是“主”安装。
  2. 不可以,一旦虚拟环境处于活动状态,您就无法访问其中的方法 模块的“主要”安装。创建虚拟环境时 Python 的默认行为不会包含虚拟环境中“主”安装中的任何现有站点包。

    如果我使用一个虚拟环境导入脚本会发生什么

  3. 如上所述,这不是虚拟环境的工作方式。


0
投票
  1. 您可能会认为需要

    activate
    shell 脚本来激活虚拟环境,但事实并非如此。环境在脚本中处于活动状态只是因为使用正确的 python 解释器运行脚本,即来自虚拟环境的
    bin
    目录的解释器。因此,您需要做的就是在脚本的 shebang 行中硬编码解释器的完整路径名。

  2. 不,正如@c-fennell 所写,你不能完全按照你的要求去做。但是,当您在虚拟环境中安装软件包时,您可以限制安装的版本。确切的方法取决于工具——使用

    pip
    可以在命令行上设置,一些更复杂的工具需要在配置文件中。

  3. 与其他一些开发环境(我认为是node.js?)不同,python venvs 确实需要每个包的唯一版本。处理依赖冲突并为所有包版本找到全局解决方案是高级打包工具的主要目的——例如

    poetry
    pipenv
    pdm

© www.soinside.com 2019 - 2024. All rights reserved.