PipEnv¶
警告
此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
重要
这仅适用于可执行 Python 包及其 Python 依赖项。这种方法不适用于您通常通过 import
在配方中使用的 Python 库包。
PipEnv
助手会在专用的虚拟环境 (venv) 中使用 pip 安装可执行 Python 包,将它们隔离起来,以免干扰系统包或 Conan 包本身。它旨在在构建步骤的配方中使用 Python CLI 工具。
- 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 virtualenv 路径添加到系统路径。
这两个步骤出现在以下配方的 generate()
方法中。在此方法中调用它可确保 Python 包和 Conan Environment 在后续步骤中可用。在这种情况下,是在构建步骤中,我们将在此处使用已安装的工具。
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