内容提要
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”的工具。