PipEnv

警告

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

重要

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

PipEnv 辅助工具会在专用的虚拟环境 (venv) 中使用 pip 安装可执行 Python 包,将它们隔离起来,以免干扰系统包或 Conan 包本身。它旨在在构建步骤的配方中使用 Python CLI 工具。

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

class PipEnv(conanfile, folder=None)
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 Environment,该环境会将Python 虚拟环境路径添加到系统路径中。

这两个步骤出现在以下配方的 generate() 方法中。在此方法中调用它可确保Python 包Conan Environment在后续步骤中可用。在本例中,是在构建步骤中,我们将在该步骤中使用已安装的工具。

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 包在 generate 步骤中被安装,并且在 build 步骤中被调用,就好像它安装在系统上一样。

$ 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