python - 诗歌如何处理二进制依赖关系?(尤其是 numpy)
问题描述
到目前为止,我一直使用 conda 作为虚拟环境和依赖管理。但是,将 environment.yml 文件从我的开发机器传输到生产服务器时,有些东西无法按预期工作。现在,我想研究替代方案。诗歌看起来不错,尤其是因为
诗歌还维护一个锁文件,它比 pipenv 有一个好处,因为它跟踪哪些包是子依赖项。(https://realpython.com/effective-python-environment/#poetry)
这可能会大大提高稳定性。但是,我正在从事重科学的项目(矩阵、数据科学、机器学习),所以在实践中我需要 scipy 堆栈(例如 numpy、pandas、scitkit-learn)。
对于一些纯计算工作负载,Python 变得太慢,因此 numpy 和 scipy 诞生了。[...] 它们是用 C 语言编写的,只是包装成一个 python 库。
编译此类库带来了一系列挑战,因为它们(或多或少)必须在您的机器上编译以获得最佳性能并与 glibc 等库正确链接。
Conda 是作为一种多合一的解决方案被引入的,用于为科学界管理 python 环境。
[...] 不是在您的机器上使用脆弱的库编译过程,而是预编译库并在您请求它们时下载它们。不幸的是,该解决方案附带一个警告 - conda 不使用 PyPI,这是最流行的 python 包索引。
(https://modelpredict.com/python-dependency-management-tools#fnref:conda-compiling-challenges)
据我所知,这甚至不利于 Conda,因为它进行了相当多的优化以充分利用我的 CPU/GPU/numpy 架构。( https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/#Myth-#6:-Now-that-pip-uses-wheels,-conda-is-no -更长的必要)
https://numpy.org/install/本身建议使用 conda,但也说可以通过 pip 安装(而诗歌使用 pypi)
对于从个人喜好或阅读下文了解 conda 和 pip 的主要区别的用户,他们更喜欢基于 pip/PyPI 的解决方案,我们建议:
[...] 使用 Poetry 作为维护最完善的工具,它以与 conda 类似的方式提供依赖关系解析器和环境管理功能。
我想获得诗歌设置的稳定性和 conda 设置的速度。
诗歌如何处理二进制依赖?它是否也像 conda 一样考虑我的硬件?
如果诗歌在这方面没有提供,我可以将它与 conda 结合起来吗?
解决方案
numpy
wheel
为不同的操作系统、cpu 架构和 python 版本提供了几个文件。wheel
包是预编译的,因此目标系统不必编译包。
poetry
能够根据您的系统为您选择合适的车轮。
说到这里,我建议使用poetry
,只要你只需要 python 包,这些包也可以在 pypi 获得。一旦您需要其他非 python 工具,请坚持使用 conda。(免责声明:我是 的维护者之一poetry
)。
推荐阅读
- bash - pdftex 在 bash 脚本中失败
- php - 使用 https 但使用 http 时出现 Alamofire 标头错误
- php - 如何将数据从 MSSQL 添加到 Ext.Net 7.2.0 经典版
- javascript - 无法启动模拟器。原因:没有找到模拟器作为 `emulator -list-avds` 的输出
- sql-server - 是否可以在系统版本表的查询中动态删除 FOR SYSTEM_TIME?
- java - @Query 结果到 DTO 导致 spring data jpa 中的构造函数错误
- python - 在 EC2 实例中的文件夹之间移动文件的问题
- node.js - 我似乎无法安装 Sqlite3
- python - Plotly:如何更改 3D 曲面图的配色方案?
- linux - 为什么while循环中的语法错误会中断脚本(但不会在while循环之外)