A simple wrapper around pip to support requirements.txt, Pipenv and Poetry files for containerized applications
项目描述
pip的一个轻量级包装器,用于支持requirements.txt、Pipenv和Poetry锁定文件或将它们转换为与pip-tools兼容的输出。专为容器化Python应用程序设计,但不仅限于这些。
要观看简短的视频预览,请查看此演示(micropipenv部分从9:00开始)。
使用requirements.txt与pip相比有什么不同?
如果requirements.txt使用带有哈希值(例如pip-tools)的固定版本声明所有包,micropipenv将在安装顺序相关的情况下安装带有可能的回退的包
您不需要关心requirements.txt中的安装和正确顺序或要求
尽力安装 - 尝试直到有可能成功
如果requirements.txt没有使用固定形式声明所有包
使用pip的解析器算法,并将解析需求留给了pip
不会使用micropipenv的相同行为
与Poetry相比有什么不同?
是Poetry的一个轻量级补充,而不是替代品
micropipenv不是替换Poetry,而是为其补充容器化部署,其中容器镜像的大小和与其一起分发的软件很重要
没有发布管理到Python包索引
micropipenv不实现解析器,它使用基于poetry.lock和pyproject.toml的已解析堆栈,该堆栈与应用程序一起分发
没有虚拟环境管理
虚拟环境管理留给了用户,如果需要的话
与Pipenv相比有什么不同?
是Pipenv的一个轻量级补充,而不是替代品
micropipenv不是替换Pipenv,而是为其补充容器化部署,其中容器镜像的大小和与其一起分发的软件很重要
它不会像Pipenv那样打包所有依赖项
micropipenv不实现解析器,它使用随应用程序一起分发的已解析堆栈,该堆栈基于Pipfile.lock
没有虚拟环境管理
虚拟环境管理留给了用户,如果需要的话
micropipenv用例
为什么我应该使用micropipenv而不是Pipenv或Poetry?
我希望有一个“统治一切”的工具 - 一个轻量级工具来支持所有Python依赖项锁定文件管理器(pip-tools、Poetry、Pipenv),并让用户决定在容器化环境中部署Python应用程序时使用什么(例如Kubernetes、OpenShift、…)。
我希望有一个快速且简洁的工具来在CI中安装软件包。
我希望将容器化的Python应用程序尽可能小型化,以最少的软件进行打包,并确保在生产环境中构建和运行Python应用程序所需的最小化软件。
我希望将Pipenv/Poetry生成的文件转换为与pip-tools兼容的输出。
我不想安装Pipenv/Poetry,但我想运行使用Pipenv/Poetry进行依赖管理的项目(例如,受限环境)。
我的Pipenv安装已损坏,并且Pipenv上游没有发布任何新的Pipenv版本。
我想将我的应用程序部署到生产环境,并且我的应用程序依赖由Pipenv/Poetry管理(依赖项已经解决),但我不想在生产环境中运行Pipenv/Poetry(例如,OpenShift的s2i构建过程)。
micropipenv install
该工具支持以下格式的依赖项安装
Pipenv风格的锁格式 - 文件Pipfile和Pipfile.lock
Poetry风格的锁格式 - 文件pyproject.toml和poetry.lock
pip-tools风格的锁格式 - 文件requirements.txt
原始的requirements.txt,如pip使用(不是一个锁文件)
在Pipenv、Poetry和pip-tools风格格式的情况下,如果依赖项的安装顺序相关(一个依赖项由于依赖于另一个而无法安装),该工具将执行自动恢复。
要强制使用安装方法,请在install子命令中指定--method选项。默认情况下,micropipenv从当前工作目录向上遍历文件系统,并按以下顺序查找相关文件
Pipfile.lock和可选的Pipfile(如果设置了--deploy)
poetry.lock和pyproject.toml
requirements.txt用于pip-tools和原始的pip需求
要安装依赖项,请发出以下命令
micropipenv install --dev # --dev is optional
您可以提供额外的位置参数,这些参数将传递给pip。使用双破折号来区分pip选项和micropipenv选项。
# issue `pip install --user'
micropipenv install -- --user
虚拟环境管理
micropipenv不会像Pipenv/Poetry那样创建任何虚拟环境。它只是执行pip,并从锁文件中构建参数。默认情况下,pip的行为是将其参数安装到与pip安装相同的Python环境中(即,系统Python环境)。
要将其参数安装到虚拟环境中,请从已激活该虚拟环境的shell中运行micropipenv。这导致micropipenv运行虚拟环境中已安装的pip命令
python3 -m venv venv/ && (. venv/bin/activate && micropipenv install)
或者,micropipenv可以从系统Python环境中运行pip命令,这反过来可以通过使用PIP_PYTHON环境变量来指示将参数安装到显式指定的虚拟环境中。
这允许将依赖项安装到不包含pip及其依赖项的最小虚拟环境中
python3 -m venv venv/ --without-pip && PIP_PYTHON=venv/bin/python micropipenv install
使用其他包索引
要将默认Python包索引设置为除https://pypi.ac.cn/simple之外的内容,将MICROPIPENV_DEFAULT_INDEX_URLS设置为逗号分隔的一个或多个URL。
注意:如果包管理器文件包含包索引URL,则将使用此值。
export MICROPIPENV_DEFAULT_INDEX_URLS=https://pypi.example.com/simple,https://pypi.ac.cn/simple
micropipenv install
micropipenv install --deploy
如果您想模拟 pipenv --deploy 的功能,您可以这样做
micropipenv install --deploy
然而,需要解析 Pipfile 并验证其内容与使用的 Pipefile.lock 相对应(在 Pipfile 内容上计算出的摘要)。micropipenv 需要此功能需要 toml 附加功能,因此您需要安装 micropipenv[toml](请参阅下方的安装说明)。
--deploy 选项对 Poetry 和 requirements 安装方法没有影响。
micropipenv install --dev
可以使用 --dev 标志安装“开发”依赖项。当使用 requirements.txt 文件时,此标志没有作用。
micropipenv requirements / micropipenv req
要生成与 pip-tools 兼容的输出,您可以执行以下命令
micropipenv requirements
这适用于从 Poetry 和 Pipenv 特定的锁文件转换。
额外的配置选项可以限制输出中包含的内容(例如,使用 --no-dev 来删除开发依赖项)。
一个特殊选项 --only-direct 使 micropipenv 能够在 Pipfile 而不是 Pipfile.lock 上工作。这需要 toml 附加功能,因此为获得此功能请安装 micropipenv[toml](请参阅下方的安装说明)。要获取应用程序的直接依赖项并将它们存储在 requirements.txt 文件中
micropipenv requirements --only-direct > requirements.txt
对于遵循 pip-tools 惯例的 requirements.in 和 requirements.txt
micropipenv requirements --no-dev > requirements.txt
micropipenv requirements --no-dev --only-direct > requirements.in
micropipenv requirements --no-default > dev-requirements.txt
micropipenv requirements --no-default --only-direct > dev-requirements.in
有关更多信息,请参阅 micropipenv requirements --help
micropipenv 作为库
micropipenv 在 Pipfile/Pipfile.lock 上公开了一些核心功能。您可以导入其函数,并将 micropipenv 作为轻量级库用于 Pipfile/Pipfile.lock 和 pyproject.toml/poetry.lock 的操作。
使用环境变量调整选项
所有选项都可以使用环境变量触发 - 环境变量的名称始终以 MICROPIPENV_ 为前缀,并由选项名称转换为大写字母,短横线被下划线替换(例如,--no-dev 被映射到 MICROPIPENV_NO_DEV)。所有对应于标志的环境变量都被解析为整数,然后转换为布尔值。例如,要开启 --no-dev 标志,请设置 MICROPIPENV_NO_DEV=1(0 禁用标志)。提供给 CLI 的参数优先于环境变量。
一个特殊的环境变量 MICROPIPENV_PIP_BIN 可以指向一个替代的 pip 可执行文件。
要在此工具中以详细模式运行,您可以设置 MICROPIPENV_DEBUG=1(使用多个 --verbose 提供可以达到相同的效果)。
该工具将软件堆栈信息打印到标准错误输出。这旨在为 Thoth 捕获有关已安装依赖项的信息,作为 Thoth 构建分析器的有用信息来源。可以通过设置 MICROPIPENV_NO_LOCKFILE_PRINT=1 环境变量来抑制此行为。
除了打印,该工具还将Pipfile.lock的内容(如果使用锁定软件堆栈)写入存在锁定文件的目录(对于Pipenv文件,Pipfile.lock保持不变)。可以通过提供环境变量MICROPIPENV_NO_LOCKFILE_WRITE=1来禁止此行为。
示例用法
安装由Poetry管理的依赖项,就像pip install --user一样(选项--method是可选的,省略时自动发现)
$ ls
poetry.lock pyproject.toml project.py
$ micropipenv install --method poetry -- --user
将由Poetry管理的依赖项(主和开发)安装到虚拟环境中
$ ls
poetry.lock pyproject.toml project.py
$ python3 -m venv venv/
$ . venv/bin/activate
(venv) $ micropipenv install --dev
将由Pipenv管理的依赖项(主和开发)安装到虚拟环境中(选项--method是可选的,省略时自动发现)
$ ls
Pipfile Pipfile.lock src/
$ python3 -m venv venv/
$ . venv/bin/activate
(venv) $ micropipenv install --dev
以Pipenv的方式部署应用程序,包括Python解释器版本检查和Pipfile文件哈希检查(仅在必要时创建虚拟环境)
$ ls
Pipfile Pipfile.lock src/
$ python3 -m venv venv/
$ . venv/bin/activate
(venv) $ micropipenv install --deploy
从Pipfile和Pipfile.lock生成符合pip-tools的requirements.in、dev-requirements.in、requirements.txt和dev-requirements.txt - 由Pipenv管理的项目依赖项
$ ls
Pipfile Pipfile.lock src/
$ micropipenv requirements --no-dev > requirements.txt
$ micropipenv requirements --no-dev --only-direct > requirements.in
$ micropipenv requirements --no-default > dev-requirements.txt
$ micropipenv requirements --no-default --only-direct > dev-requirements.in
从pyproject.toml和poetry.lock生成符合pip-tools的requirements.in、dev-requirements.in、requirements.txt和dev-requirements.txt - 由Poetry管理的项目依赖项
$ ls
poetry.lock pyproject.toml src/
$ micropipenv requirements --no-dev > requirements.txt
$ micropipenv requirements --no-dev --only-direct > requirements.in
$ micropipenv requirements --no-default > dev-requirements.txt
$ micropipenv requirements --no-default --only-direct > dev-requirements.in
对于OpenShift的s2i集成,查看此存储库的演示。
安装
项目托管在PyPI上,因此使用pip安装是预期的工作方式
pip install micropipenv
默认安装不会带来任何依赖项,因此仅安装micropipenv。然而,默认安装仅支持Pipfile.lock管理。如果您还想操作Pipfile或Poetry特定的锁定文件,则需要安装具有TOML支持的micropipenv(TOML不在标准Python库中)
pip install micropipenv[toml]
一旦项目安装完成,您可以通过调用micropipenv CLI来浏览帮助消息
micropipenv --help
如果您想在Fedora系统上安装micropipenv
dnf install -y micropipenv
查看可用的RPM软件包。
无需安装
您可以在不实际安装的情况下运行micropipenv - 只需下载文件并执行它。如果您不想将micropipenv.py文件保存到磁盘,您可以发出
curl https://raw.githubusercontent.com/thoth-station/micropipenv/master/micropipenv.py | python3 - --help
在python3 -之后的所有内容都将作为参数传递给micropipenv.py,因此可以简单地使用以下方式安装软件包
curl https://raw.githubusercontent.com/thoth-station/micropipenv/master/micropipenv.py | python3 - install -- --user
所有在–之后的所有参数都将作为选项传递给pip
OpenShift s2i(源到镜像)
micropipenv在UBI、Fedora和基于RHEL的容器镜像中可用。为了启用micropipenv并利用其功能,您需要在较新的Python 3容器镜像中导出环境变量ENABLE_MICROPIPENV=1。有关更多信息,请参阅sclorg/s2i-python-container存储库。
许可证和复制
此项目根据GNU通用公共许可证v3或更高版本许可。有关许可证条款,请参阅LICENSE-LGPL和LICENSE-GPL文件。
版权(C)2020-2022 Thoth项目;Red Hat Inc。
- 原作者
Fridolín ‘fridex’ Pokorný <fridolin@redhat.com>
- 维护者
卢米尔“狂热”巴哈尔 <lbalhar@redhat.com>
马克斯·高蒂尔 <max.gautier@redhat.com>
项目详情
下载文件
下载您平台对应的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。