深入探讨Pipenv和Poetry

深入探讨Pipenv和Poetry

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

Pipenv和Poetry是Python的包管理工具。Pipenv存在文件格式多、命令混乱和依赖解析慢等问题,而Poetry在与PyPA的兼容性上也有不足。未来希望pyproject.toml能取代setup.py,结合两者的优点,形成更好的解决方案。

🔎

延伸解读

Pipenv 的维护困境与回归风险

文章指出 Pipenv 的维护者需要同时维护大量支撑项目,更新频率高,这直接增加了回归问题的风险。同时,所有增强提案都需 BDFL 批准,而 Kenneth Reitz 因心理健康问题长期缺席,导致决策停滞。测试覆盖率低也使得跨平台和多环境测试难以保障,进一步放大了回归对用户体验的伤害。

Poetry 与现有打包生态的兼容短板

Poetry 虽然被视为更好的选择,但它与 PyPA 当前打包系统兼容性不佳。例如,从 VCS 克隆的 Poetry 项目无法直接通过 pip install 安装,需要额外步骤生成 setup.py。此外,Poetry 将 python requires 放在依赖区而非全局设置,且只支持单一工作流,无法将当前依赖安装到系统 Python,这给 Docker 开发等场景带来不便。

虚拟环境激活的共性限制

文章提到,Pipenv 和 Poetry 都不支持在项目目录外激活虚拟环境。这一限制源于 NPM 的启发,但在 Python 世界中,用户常将脚本放在项目目录之外,virtualenvwrapper 则支持这种用法。对于习惯在项目外操作虚拟环境的开发者,这一缺陷可能影响工作流。

未来打包工具的整合方向

作者期望 pyproject.toml 最终取代 setup.py,并在过渡期让 Pip 等工具能同时读取两种文件。理想中的“Pip”应结合 Pipenv 和 Poetry 的优点,成为 Python 打包的终极解决方案。同时,依赖定义应通过官方方式在 pyproject.toml 中标准化,而非局限于 tool.poetry 等工具特定区块。

❓

Q&A

Pipenv存在哪些主要问题?

Pipenv存在文件格式多、命令混乱和依赖解析慢等问题,锁定性能和回归问题也影响用户体验。

Poetry与PyPA的兼容性如何?

Poetry在与PyPA的当前打包系统兼容性上存在不足,无法直接安装Poetry项目。

pyproject.toml的未来有什么期望?

希望pyproject.toml能取代setup.py,并能更好地定义依赖关系。

Pipenv和Poetry的优缺点是什么?

Pipenv有文件格式多和依赖解析慢的问题,而Poetry在兼容性和工作流上存在不足。

Poetry支持哪些工作流?

Poetry只支持单一工作流,不支持在项目目录外激活虚拟环境。

未来的Python打包解决方案应该是什么样的?

期望有一个结合Pipenv和Poetry优点的最终解决方案,可能是一个名为“Pip”的工具。

🏷️

标签

➡️

继续阅读