将 tox 与共享代码一起使用会导致双重依赖安装,最终降低依赖性

Using tox with shared code results in double dependency installation which ultimatly downgrades the dependency

我在一个存储库中有多个模块。现在我想单独测试每个模块的包装,而它们之间可能有依赖关系。幸运的是,我在文档中找到了使用 {distshare}/} 的依赖项选项。

tox.ini:

[testenv]
deps =
    pytest
    {distshare}/pandas-ml-common-*.zip

一旦我 运行 tox 它就会像人们期望的那样安装本地 zip。但是由于依赖项也列在 setup.py 中,因此模块被 pypi 的旧版本替换。是的,您猜对了,这会使测试失败。使用 distshare 安装依赖项后,如何避免从 pypi 安装?

标准输出:

(.venv) $ tox
GLOB sdist-make: /pandas-ml-utils/setup.py
py37 recreate: .tox/pandas_ml_common/py37
py37 installdeps: pytest, .tox/distshare/pandas-ml-common-0.2.0.zip
py37 inst: .tox/pandas_ml_common/.tmp/package/1/pandas-ml-utils-0.2.0.zip
py37 installed: cachetools==4.1.1,...,pandas-ml-common==0.1.15,...   <--- here it is again

编辑: 来自 setup.py:

   packages=find_packages(),
   install_requires=["pandas-ml-common", *open("requirements.txt").read().splitlines()],
   extras_require={
      "dev": open("dev-requirements.txt").read().splitlines(),
   },
   include_package_data=True,

在 requirements.txt 中只有像 numpy 这样的外部依赖项(没有版本 atm 的一切)。

我可能会尝试类似的方法:

[tox]
# ...

[testenv]
deps =
    pytest
    # omit "{distshare}/pandas-ml-common-*.zip"
commands_pre =
    python -m pip install {distshare}/pandas-ml-common-*.zip
# ...