首页 > 解决方案 > 诗歌如何处理二进制依赖关系?(尤其是 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 结合起来吗?

标签: pythonnumpyanacondacondapython-poetry

解决方案


numpywheel为不同的操作系统、cpu 架构和 python 版本提供了几个文件。wheel包是预编译的,因此目标系统不必编译包。

poetry能够根据您的系统为您选择合适的车轮。

说到这里,我建议使用poetry,只要你只需要 python 包,这些包也可以在 pypi 获得。一旦您需要其他非 python 工具,请坚持使用 conda。(免责声明:我是 的维护者之一poetry)。

也相关:https ://github.com/python-poetry/poetry/issues/1904


推荐阅读