setup.py 使用 conda 安装的依赖项(不是 pip)

setup.py with dependecies installed by conda (not pip)

我正在处理一个现有的 Python 3 代码库,它提供了一个 setup.py,因此代码被安装为一个 Python 库。我试图让这个内部库安装它自己的依赖项(通常的数据科学依赖项,例如 pandaspyodbcsqlalchemy 等)。

我想要这个内部库来处理这些依赖关系,并假设如果安装了该库,则假定所有传递依赖关系都已安装。我还想要软件包的 Anaconda (conda) 版本,而不是 pip 版本。

我从 requirements.txt 开始,但在 setup.py 中快速移动到这个字段:

  install_requires=[
      "pyodbc>=4.0.27",
      "sqlalchemy>=1.3.8",
      "pandas>=0.25.1",
      "requests>=2.22.0",
      "assertpy>=0.14",
      "cycler>=0.10.0",
  ]

然而我运行安装过程时:

我看到有一些 gcc / C++ 编译正在进行,显示了关于 Python 轮子的日志(我不完全理解 Python eggs 和 Python 轮子,但据我所知,如果 conda 可用,那么我应该使用 conda 版本而不是 eggs/wheels,因为这样我就不必处理下面的 C++ 代码了Python 代码)。

我真的更愿意 conda 安装这些包裹在一些 Python 代码中的 C++ blob 作为库,例如pandas.

无论使用哪种安装方法,我如何才能确保依赖项例如pandas都安装好了?有时我看到 numpy 作为 pandas 的依赖项在 运行 宁 setup.py 时没有安装,但我想避免手动执行此操作(例如使用一些 requirements.txt 文件).

pip 不知道 conda,因此您无法构建从 conda 通道中提取其依赖项的 pip 可安装包。

conda不关心setup.py,它使用不同的格式来记录依赖关系。

要使用 conda 安装您的代码,您应该创建一个 conda 包,并在 meta.yaml 文件中指定您的依赖项。详情请参考"conda build"的文档。

https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html