Почему я не могу исключить каталог `tests` из моего колеса python с помощью` exclude`? - PullRequest
0 голосов
/ 17 апреля 2020

Рассмотрим следующую структуру пакета:

enter image description here

Со следующим содержанием setup.py:

from setuptools import setup, find_packages

setup(
    name='dfl_client',
    packages=find_packages(exclude=['*tests*']),
    include_package_data=True,
    package_data={"": ['py.typed', '*.pyi']},
)

Когда я упаковываю он использует python setup.py sdist bdist_wheel, получившееся колесо:

  • содержит файл py.typed, что хорошо
  • содержит папку tests, в то время как его следует исключить согласно find_packages до c.

Я часами пытался понять, почему безуспешно. Тем более, что это похоже на другие проекты!

1 Ответ

0 голосов
/ 17 апреля 2020

(я потратил так много времени, пытаясь понять эту глупую проблему, что отвечаю на свой вопрос, надеясь, что это может сэкономить время другим, сталкивающимся с той же проблемой)

Я наконец нашел виновника : это скрытое взаимодействие между setuptools_scm и флагом include_package_data=True.

Само по себе include_package_data=True не делает каталог tests включенным в колесо. Однако если setuptools_scm установлен и папка находится под контролем версий (а каталог tests находится в списке git -управляемых файлов), то директива exclude, похоже, больше не учитывается.

Таким образом, решение было просто удалить include_package_data=True, который на самом деле не нужен, когда присутствует package_data:

from setuptools import setup, find_packages

setup(
    name='dfl_client',
    packages=find_packages(exclude=['*tests*']),
    package_data={"": ['py.typed', '*.pyi']},
)

См. setuptools делает c в том числе файлы (что на самом деле очень просто для include_package_data) и эта связанная проблема и обходной путь (обходной путь, похоже, работает и для колеса, а не только для sdist).

...