setup.py忽略完整路径依赖项,而是在pypi中寻找“最佳匹配”。

6

类似于https://dev59.com/2Gcs5IYBdhLWcg3w3Hqn

我正在修改faker,以期待我与validators开放的PR,并且我想要测试我将拥有的新依赖项。

setup(
    name='Faker',
    ...
    install_requires=[
        "python-dateutil>=2.4",
        "six>=1.10",
        "text-unidecode==1.2",
    ],
    tests_require=[
        "validators@https://github.com/kingbuzzman/validators/archive/0.13.0.tar.gz#egg=validators-0.13.0",  # TODO: this will change  # noqa
        "ukpostcodeparser>=1.1.1",
        ...
    ],
    ...
)

python setup.py test 拒绝安装 0.13.0 版本。

如果我将问题行移动到 install_requires=[..](这里不应该有问题行)

setup(
    name='Faker',
    ...
    install_requires=[
        "python-dateutil>=2.4",
        "six>=1.10",
        "text-unidecode==1.2",
         "validators@https://github.com/kingbuzzman/validators/archive/0.13.0.tar.gz#egg=validators-0.13.0",  # TODO: this will change  # noqa
    ],
    tests_require=[
        "ukpostcodeparser>=1.1.1",
        ...
    ],
    ...
)
  • 使用 pip install -e . 一切正常 -- 正确的版本已经安装。
  • 使用 python setup.py develop 出现相同的问题。

我猜测是 setuptools/distutils 做了一些奇怪的事情 -- pip 似乎解决了这个问题。我的问题是:如何解决这个问题?

有关有问题的代码和参考资料,请参见此处:

看到手头的问题最简单的方法:

docker run -it --rm python:3.7 bash -c "git clone https://github.com/kingbuzzman/faker.git; cd faker; pip install -e .; python setup.py test"

更新:由于已经修复,该问题将不会再次出现 -- 所有测试都将通过

1个回答

2

很遗憾, setup_requirestests_require 目前还不支持基于URL的查找或来自PEP 508的环境标记。你需要使用 dependency_links,例如:

最初的回答:

目前,setup_requirestests_require还不支持从URL获取依赖项或使用PEP 508的环境标记。但是,您可以使用dependency_links

setup(
    ...
    tests_require=["validators>=0.13.0"],
    dependency_links=['git+https://github.com/kingbuzzman/validators@master#egg=validators-0.13.0'],
)

1
很高兴能够帮助! - hoefling
有一个与pypi中的软件包非常相似的问题,只是我需要始终安装它,并且它作为tar文件在网站上可用(而不是在git存储库中)。使用python 3.8和pip 21.2.4。我的setup.py install_requires中有mypackage==70.1.0,dependency_links中有https://my.company.com/path/to/mypackage-70.1.0.tar.gz#egg=mypackage-70.1.0。作为'pip3 install .'和'python3 setup.py install'非常好,但是tox版本3.24.4失败了,仍然搜索pypi并出现“ERROR:Could not find a version that satisfies the requirement”的错误。请建议尝试什么来解决tox的问题,谢谢。 - chrisinmtown
@chrisinmtown 如果我没记错的话,tox 底层依赖于 pip install,所以这方面应该不会有问题。最好的方法是提出一个新问题,并提供一个 [mcve];在评论中放置一个链接,我会尽力帮助。 - hoefling
@chrisinmtown 一个猜测是tox环境安装了旧版本的setuptools;这可能发生在旧版本的Python和由venv模块引导的版本中。但是,没有示例只是一种猜测。 - hoefling
感谢@hoefling,我在https://stackoverflow.com/questions/69362289上提出了一个新问题,希望我表述清晰并提供了足够的细节。 - chrisinmtown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接