Исключение каталога верхнего уровня из пакета setuptools

Я пытаюсь поместить проект Python в tarball, используя setuptools. Проблема в том, что setuptools не похоже на то, как исходное дерево было первоначально настроено (не я, я должен добавить). Все, что я на самом деле хочу распространять, находится в каталоге верхнего уровня, а не в подкаталоге, о котором говорят docs файлы setuptools.

В дереве есть каталог tests, который я не хочу иметь в выпущенном пакете. Однако использование exclude_package_data, по-видимому, не делает никаких исключений, и я хотел бы выяснить, что я сделал неправильно.

Мой setup.py выглядит следующим образом:

setup(
  name="project",
  packages=[''],
  include_package_data=True,
  exclude_package_data={'': ['tests']},
  test_suite='nose.collector',
)

Ответ 1

Мы используем следующее соглашение, чтобы исключить "тесты" из пакетов.

setup(
   name="project",
   packages=find_packages(exclude=("tests",)),
   include_package_data=True, 
   test_suite='nose.collector',
)

Мы также используем MANIFEST.in для лучшего контроля над тем, что делает include_package_data = True.

С уважением, Мартин.

Ответ 2

Вот что я нашел в руководстве setuptools:

from setuptools import setup, find_packages
...
packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),

В моем случае достаточно было исключить следующее:

packages = find_packages(exclude=["tests.*", "tests"]),

Ответ 3

Ug, setuptools делает это очень сложным: (

Я не знаю, хочет ли это того, чего вы хотите, но в одном проекте, который я использую, используется сочетание двух вещей:

from setuptools import setup, find_packages
...
packages = find_packages(exclude=['tests']),
data_files = os.walk(path_to_files),

Ответ 4

У меня есть следующее в моем setup.py...

setup(name='pyfoo',
      version="1.0.2",
      description='Example for stack overflow',
      url='http://stackoverflow.com/',
      author='David Michael Pennington',
      author_email='mike /|at|\ pennington.net',
      license='GPL',
      platforms='any',
      keywords='Qaru Example',
      entry_points = "",
      long_description=read('README.rst'),
      include_package_data=True,  # Checks MANIFEST.in for explicit rules
      #                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      packages=find_packages(),
      use_2to3=True,
      zip_safe=False,
      setup_requires=["setuptools_hg"],

У меня был каталог doc/, который становился массивным из-за количества изображений, которые у меня были в нем; это означало, что размер моего sdist вырос более 500 кБ. Первоначально у меня было это в моем MANIFEST.in...

include LICENSE CHANGES README.rst requirements.txt
recursive-exclude * __pycache__
recursive-exclude * *.pyc
recursive-exclude * *.pyo
recursive-exclude * *.orig

Единственное, что мне нужно было сделать, чтобы исключить каталог моего документа, - это строка внизу MANIFEST.in...

prune doc*

Используя prune doc*, внезапно удалил весь мой каталог doc/ из архива sdist. Итак, похоже, вам просто нужно использовать это в файле MANIFEST.in...

prune tests*

Ответ 5

С аналогичной целью мой колледж написал файл setuptools-dummy: http://github.com/ella/setuptools-dummy/tree/master

Взгляните на setuptools_dummy, измените исключение на свои нужды, и оно должно работать. Если нет, откройте проблему;)