setup.py 忽略完整路径依赖,而是在 pypi 中查找 "best match"

setup.py ignores full path dependencies, instead looks for "best match" in pypi

类似于

我正在修改 faker in anticipation to an open PR I have open with validators,我希望能够测试我将拥有的新依赖项。

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"

更新:由于此问题已得到修复,因此不会再重复该问题——所有测试都将通过

不幸的是,setup_requirestests_require 都不支持 URL-based 来自 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'],
)