跳至主要内容

A simple wrapper around pip to support requirements.txt, Pipenv and Poetry files for containerized applications

项目描述

GitHub tag (latest by date) https://travis-ci.cn/thoth-station/micropipenv.svg?branch=master PyPI - Python Version PyPI - License PyPI - Downloads

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.lockpyproject.toml的已解析堆栈,该堆栈与应用程序一起分发

  • 没有虚拟环境管理

    • 虚拟环境管理留给了用户,如果需要的话

与Pipenv相比有什么不同?

  • 是Pipenv的一个轻量级补充,而不是替代品

    • micropipenv不是替换Pipenv,而是为其补充容器化部署,其中容器镜像的大小和与其一起分发的软件很重要

  • 它不会像Pipenv那样打包所有依赖项

  • micropipenv不实现解析器,它使用随应用程序一起分发的已解析堆栈,该堆栈基于Pipfile.lock

  • 没有虚拟环境管理

    • 虚拟环境管理留给了用户,如果需要的话

micropipenv用例

为什么我应该使用micropipenv而不是PipenvPoetry

  • 我希望有一个“统治一切”的工具 - 一个轻量级工具来支持所有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风格的锁格式 - 文件PipfilePipfile.lock

  • Poetry风格的锁格式 - 文件pyproject.tomlpoetry.lock

  • pip-tools风格的锁格式 - 文件requirements.txt

  • 原始的requirements.txt,如pip使用(不是一个锁文件)

在Pipenv、Poetry和pip-tools风格格式的情况下,如果依赖项的安装顺序相关(一个依赖项由于依赖于另一个而无法安装),该工具将执行自动恢复。

要强制使用安装方法,请在install子命令中指定--method选项。默认情况下,micropipenv从当前工作目录向上遍历文件系统,并按以下顺序查找相关文件

  1. Pipfile.lock和可选的Pipfile(如果设置了--deploy

  2. poetry.lockpyproject.toml

  3. 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.inrequirements.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 作为库

micropipenvPipfile/Pipfile.lock 上公开了一些核心功能。您可以导入其函数,并将 micropipenv 作为轻量级库用于 Pipfile/Pipfile.lockpyproject.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-toolsrequirements.indev-requirements.inrequirements.txtdev-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.tomlpoetry.lock生成符合pip-toolsrequirements.indev-requirements.inrequirements.txtdev-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-LGPLLICENSE-GPL文件。

版权(C)2020-2022 Thoth项目;Red Hat Inc。

原作者
维护者

项目详情


下载文件

下载您平台对应的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源代码分发

micropipenv-1.8.0.tar.gz (34.2 kB 查看哈希值)

上传时间 源代码

构建分发

micropipenv-1.8.0-py3-none-any.whl (24.8 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面