【问题标题】:setup.py with dependecies installed by conda (not pip)setup.py 与 conda 安装的依赖项(不是 pip)
【发布时间】:2020-01-09 07:48:33
【问题描述】:

我正在开发提供setup.py 的现有 Python 3 代码库,因此代码作为 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",
  ]

但是当我运行安装过程时:

  • python setup.py install --record installed_files.txt
  • pip install .

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

我真的希望conda 将这些 C++ blob 安装在一些 Python 代码中作为库,例如pandas.

  • 是否有可能让conda 驱动setup.py 中描述的安装过程,所以我不处理gcc
  • 如何确保其他依赖于该内部库(通过setup.py 安装)的 Python 代码使用在该setup.py 中定义的相同(传递)依赖项?

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

【问题讨论】:

    标签: python-3.x pip conda setup.py transitive-dependency


    【解决方案1】:

    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

    【讨论】:

    • 我认为这可能会让人感到困惑,因为很多 conda 包基本上都是围绕 pip install 构建脚本的包装器,所以很多 conda 包除了配方之外确实有 setup.py。例如github.com/conda-forge/requests-feedstock/blob/master/recipe/…
    • 虽然这可能已被接受,但它不是标题中问题的答案。更改标题,如果合适,我会将我的投票改为赞成。
    • @user3673 标题是由提出问题的人选择的,而不是由那些写答案的人选择的。
    猜你喜欢
    • 2022-01-15
    • 2021-10-05
    • 2019-04-11
    • 2015-07-04
    • 2018-11-13
    • 2017-04-18
    • 2018-09-27
    • 2016-08-21
    • 2015-01-10
    相关资源
    最近更新 更多