Pipenv和Poetry通过自动化虚拟环境与锁文件机制解决依赖管理问题。1. 它们自动创建隔离环境,避免全局污染;2. 使用Pipfile.lock或poetry.lock锁定所有依赖精确版本,确保构建可复现;3. 内置依赖解析器减少版本冲突;4. 支持开发与生产依赖分离,提升团队协作效率。相较于requirements.txt的手动管理,二者提供更稳定、自动化和标准化的解决方案。

Python项目中的依赖管理,简单来说,就是确保你的代码能在一个稳定、可复现的环境中运行,不会因为依赖包的版本问题而“水土不服”。传统的
requirements.txt
依赖管理的核心在于确定项目所需的外部库及其精确版本,并确保这些库能够被正确安装和使用。
requirements.txt
requirements.txt
pip freeze > requirements.txt
pip install -r requirements.txt
然而,它的局限性也很明显:
requirements.txt
python -m venv .venv
requirements.txt
pip
requirements.txt
Pipenv:集成虚拟环境与确定性构建
Pipenv 的出现,就是为了解决
requirements.txt
Pipfile
Pipfile.lock
Pipfile
requirements.txt
Pipfile.lock
lock
pipenv install
pipenv shell
Poetry:更现代的打包与依赖管理
Poetry 是一个更全面、更现代的Python项目管理工具,它不仅仅是依赖管理器,更是一个打包工具。
pyproject.toml
pyproject.toml
poetry.lock
poetry.lock
poetry build
poetry publish
dev
test
requirements.txt
说实话,刚开始写Python的时候,
pip freeze > requirements.txt
一个明显的痛点就是环境隔离。如果你不手动创建虚拟环境,直接
pip install -r
requests==2.20.0
requests==2.28.0
再者,考虑一下确定性构建。
requirements.txt
requirements.txt
另外一个角度看,依赖冲突的解决在
requirements.txt
flask
Werkzeug<2.1
some-other-lib
Werkzeug>=2.2
pip
最后,开发与生产依赖的分离也是一个头疼的问题。开发时我们可能需要
pytest
black
flake8
requirements.txt
requirements_dev.txt
requirements_prod.txt
Pipenv 和 Poetry 在解决这些问题上,思路是相似的,但实现上各有侧重。它们的核心武器就是虚拟环境的自动化管理和锁文件(lock file)机制。
虚拟环境的自动化管理: 在我看来,这是它们最直观的优势。你不需要再手动
python -m venv .venv
source .venv/bin/activate
pipenv install
poetry install
.virtualenvs
.venv
这意味着:
requests
requests
pipenv shell
poetry shell
pipenv run <command>
poetry run <command>
锁文件(Pipfile.lock
poetry.lock
Pipfile
pyproject.toml
pipenv install
poetry install
Pipfile.lock
poetry.lock
这个锁文件就是你的“依赖快照”。当你将项目提交到版本控制系统时,这个锁文件也应该被提交。这样,团队里的其他成员,或者你在另一台机器上,只需要运行
pipenv install
poetry install
这带来了巨大的好处:
总的来说,Pipenv 和 Poetry 通过自动化虚拟环境和引入强大的锁文件机制,将依赖管理从一个手动、易错的过程,提升到了一个自动化、确定性、高效率的水平。
在我个人看来,选择 Pipenv 还是 Poetry,很大程度上取决于你的项目类型、团队偏好以及你对“一体化”工具的需求程度。这两个工具都比
requirements.txt
选择 Pipenv 的场景:
requirements.txt
pip
pip
pyproject.toml
Pipfile
pyproject.toml
选择 Poetry 的场景:
pyproject.toml
poetry build
poetry publish
setup.py
pyproject.toml
black
isort
pytest
pyproject.toml
我的个人倾向:
我个人倾向于 Poetry,尤其是在开发需要发布到PyPI的库时,它的集成度真的很高,省去了很多配置的麻烦。对于内部使用的Web服务或微服务,如果团队已经熟悉
pyproject.toml
requirements.txt
从
requirements.txt
一个最直接的问题就是如何导入现有的依赖。你可能已经有一个非常庞大的
requirements.txt
pipenv install -r requirements.txt
poetry add
pipenv install -r requirements.txt
requirements.txt
Pipfile
requirements.txt
pip freeze
Pipfile
requirements.txt
Pipfile
poetry add
pyproject.toml
requirements.txt
第二个挑战是学习新的工作流程和命令。从
pip install
pip freeze
python -m venv
pipenv install
pipenv shell
pipenv run
poetry add
poetry install
poetry shell
Pipfile
Pipfile.lock
pyproject.toml
poetry.lock
pipenv run
python app.py
再来,处理现有的虚拟环境。如果你的项目之前已经有了一个
.venv
virtualenvwrapper
依赖解析的差异也可能带来惊喜。
pip
requirements.txt
lock
requirements.txt
最后,CI/CD 流程的调整也是一个不可避免的环节。你的持续集成/持续部署脚本需要从
pip install -r
pipenv install --deploy
poetry install --no-dev
这些挑战虽然存在,但一旦克服,新的依赖管理工具带来的效率提升和稳定性是显而易见的。这就像从手动挡汽车换到自动挡,一开始可能不习惯,但长远来看,驾驶体验会好很多。
以上就是依赖管理:requirements.txt 和 Pipenv/Poetry的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号