Использование tox с общим кодом приводит к установке двойной зависимости, что в конечном итоге снижает зависимость

У меня несколько модулей в одном репозитории. Теперь я хотел бы протестировать упаковку для каждого модуля индивидуально, поскольку они могут иметь зависимости друг от друга. К счастью, в документации я нашел параметр зависимости с использованием {distshare}/}.

tox.ini:

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

Как только я запустил tox, он установит локальный zip-архив, как и следовало ожидать. Но поскольку зависимость также указана в setup.py, модуль заменяется более старой версией из pypi. И да, как вы уже догадались, это приводит к тому, что тесты не проходят. Как я могу избежать установки из pypi, если у меня установлена ​​зависимость с использованием distshare?

stdout:

(.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).


person KIC    schedule 02.10.2020    source источник
comment
Почему это происходит? pandas-ml-common==0.2.0 вне диапазона версий для pandas-ml-utils-0.2.0? Может показать setup.py файл?   -  person sinoroc    schedule 02.10.2020
comment
ни одна из моих зависимостей не имеет версии вообще (пока я не достигну стабильной версии). это одна из многих причин, по которым я хочу использовать tox. он всегда устанавливает самые свежие зависимости, и я могу сразу исправить неработающий тест. ps 0.1.15 - последняя версия на pypi   -  person KIC    schedule 06.10.2020


Ответы (1)


Я бы попробовал что-нибудь вроде:

[tox]
# ...

[testenv]
deps =
    pytest
    # omit "{distshare}/pandas-ml-common-*.zip"
commands_pre =
    python -m pip install {distshare}/pandas-ml-common-*.zip
# ...
person sinoroc    schedule 02.10.2020
comment
действительно это работает. но только с фиксированной версией, так как подстановочные знаки не поддерживаются - person KIC; 02.10.2020
comment
Не могли бы вы попробовать python -m pip install --no-index --find-links {distshare} pandas-ml-common, и дайте мне знать, если вы ожидаете? Если да, то обновлю ответ. - person sinoroc; 02.10.2020
comment
Но, возможно, вам просто нужно изменить setup.py на pandas-ml-utils. - person sinoroc; 02.10.2020
comment
сейчас я использую фиксированную версию, у меня все равно есть скрипт для изменения версии. - person KIC; 02.10.2020
comment
Я пробовал: python -m pip install --no-index --find-links {distshare} pandas-ml-common, но это не имело значения. Он устанавливается из локальной файловой системы, а затем перезаписывается старой версией из pypi. - person KIC; 09.10.2020
comment
Я предполагаю, что номер версии, найденный в этом zip-файле, не входит в диапазон. Никакая другая причина не приходит в голову. Проверьте номера версий. - person sinoroc; 09.10.2020
comment
Возможно, используйте что-то вроде pipdeptree внутри тестовой среды создания, чтобы выяснить, каковы на самом деле диапазоны версий зависимостей. - person sinoroc; 09.10.2020