PipEnv

警告

此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

重要

这**仅**适用于可执行的 Python 包及其 Python 依赖项。这种方法不适用于您通常通过 import 在配方中使用的 Python 库包。

PipEnv 助手使用 pip 在一个专用的虚拟环境(venv)中安装可执行的 Python 包,使其隔离,从而不会干扰系统包或 Conan 包本身。它被设计用于在构建步骤期间在配方中使用 Python CLI 工具。

默认情况下,它尝试使用系统 Path 中设置的 Python 创建虚拟环境。要使用不同的 Python,您可以在 tools.system.pipenv:python_interpreter 配置 中设置 Python 路径。

class PipEnv(conanfile, folder=None, name='')
参数:
  • conanfile – 当前 conanfile 的 “self”

  • folder – 可选文件夹,默认情况下为 “build_folder”

  • name – 虚拟环境的可选名称,默认情况下为 “conan_pipenv”

generate()

创建一个 Conan 环境,以便在 conanfile 的后续步骤中使用 python venv。

install(packages, pip_args=None)

将尝试安装作为参数传递的 pip 包列表。

参数:
  • packages – 尝试安装作为参数传递的 pip 包列表。

  • pip_args – 要传递给 ‘pip install’ 命令的附加参数列表,例如:[’–no-cache-dir’, ‘–index-url’, ‘https://my.pypi.org/simple’]。默认为 None

返回:

执行的 pip 命令的返回码。

在配方中使用 Python 包

要使用使用 Python 安装的工具,我们必须使用 PipEnv.install() 方法安装它。我们还必须调用 PipEnv.generate() 方法来创建一个 Conan 环境,该环境将 Python 虚拟环境路径添加到系统路径。

这两个步骤出现在以下配方的 generate() 方法中。在此方法中调用它可确保 Python 包Conan 环境将在后续步骤中可用。在这种情况下,在构建步骤中,我们将在那里使用安装的工具。

conanfile.py
from conan import ConanFile
from conan.tools.system import PipEnv
from conan.tools.layout import basic_layout


class PipPackage(ConanFile):
    name = "pip_install"
    version = "0.1"

    def layout(self):
        basic_layout(self)

    def generate(self):
        PipEnv(self).install(["meson==1.9.1"])
        PipEnv(self).generate()

    def build(self):
        self.run("meson --version")

如果我们运行 conan build,我们可以看到我们的 Python 包在生成步骤中安装的方式,以及如何在构建步骤中将其调用,就像它安装在系统上一样。

$ conan build .

...

======== Finalizing install (deploy, generators) ========
conanfile.py (pip_install/0.1): Calling generate()
conanfile.py (pip_install/0.1): Generators folder: /Users/user/pip_install/build/conan
conanfile.py (pip_install/0.1): RUN: /Users/user/pip_install/build/pip_venv_pip_install/bin/python -m pip install --disable-pip-version-check meson==1.9.1
Collecting meson==1.9.1
  Using cached meson-1.9.1-py3-none-any.whl.metadata (1.8 kB)
Using cached meson-1.9.1-py3-none-any.whl (1.0 MB)
Installing collected packages: meson
Successfully installed meson-1.9.1

conanfile.py (pip_install/0.1): Generating aggregated env files
conanfile.py (pip_install/0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']

======== Calling build() ========
conanfile.py (pip_install/0.1): Calling build()
conanfile.py (pip_install/0.1): RUN: meson --version
1.9.1