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 环境将在后续步骤中可用。在这种情况下,在构建步骤中,我们将在那里使用安装的工具。
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