【问题标题】:Python3: install github-based module in setup.py?Python3:在 setup.py 中安装基于 github 的模块?
【发布时间】:2021-04-27 05:29:36
【问题描述】:

pip安装,我可以写如下requirements.txt文件:

git+https://repo@branch#egg=foo&subdirectory=this/bar/foo
numpy

并成功安装需求文件:

python3 -m pip install -r requirements.tx

但是,我在目录中放置了一个 setup.py 脚本,其中列出了:

setuptools.setup(
  ...
  install_requires = get_lines('requirements.txt'),
  ...
)

使用pip 安装此子模块涉及pip 运行setup.py...无法处理模块链接:

git+https://github.com/repo@branch#egg=foo&subdirectory=this/bar/foo

我可以看到很多解决这个问题的方法,但似乎应该有一种明确的方法来做到这一点,在setup.py 脚本中尽可能少地改变。 p>

有这样的方法吗?

【问题讨论】:

    标签: python python-3.x pip setuptools


    【解决方案1】:

    您可能需要将requirements.txt 中的行更改为:

    foo @ git+https://repo@branch#egg=foo&subdirectory=this/bar/foo
    

    参考资料:

    虽然我不完全确定它会起作用。 requirements.txt 文件中接受的符号,直接 pipsetuptools 之间可能存在细微差别。特别是我不知道像 eggsubdirectory 这样的东西的支持程度。

    建议:

    • 从现在开始避免调用python setup.py installpython setup.py develop,并确保改为调用python -m pip install .python -m pip install --editable .
    • 我确实考虑从setup.py 中读取requirements.txt 作为一个危险信号(或至少是黄色信号)。 setuptoolsinstall_requiresrequirements.txt 的内容通常有不同的用途。

    【讨论】:

    • 所以我可能需要添加信息:我正在使用python3 -m pip install foo 进行安装。而且我确实喜欢可编辑标志,但我没有在这里使用它。此外,设置和要求在某些时候可能用于不同的目的。但是我已经剥离了需求文件,以便它包含有效安装所需的内容。此外,如果我可以完全放弃设置模式,我会这样做——我对此没有既得的、习惯性的或惯用的兴趣。
    • 换句话说,在这个特定的用例中,setup.py 更像是一种仪式而不是一种功能。 pip需要进来,安装需求,安装目录下所有python文件。
    • @Chris 那么您是否尝试过foo @ ... 表示法? -- 如果我建议调用pip 而不是setup.py,那是因为setuptools 不理解这个foo @ 表示法,或者至少我上次检查时没有理解。这很好,setuptools 并不真正需要理解该符号,它只是在分发元数据中逐字写入该行。 -- 对于install_requiresrequirements.txt,很公平,只是一个警告,它可能是一些更深层次误解的征兆,但你似乎知道你在这方面做什么,所以一切都很好。跨度>
    • 如果您想摆脱 setup.py,我建议您考虑用 setup.cfg + pyproject.toml 组合替换它。
    • 一切正常!并且也弄明白了 setup.py。
    猜你喜欢
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2016-07-08
    • 2018-07-21
    相关资源
    最近更新 更多