Исключение каталога верхнего уровня из пакета setuptools - PullRequest
19 голосов
/ 04 марта 2009

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

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

Мой setup.py выглядит так, в соответствующей части:

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

Ответы [ 5 ]

15 голосов
/ 19 марта 2012

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

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

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

8 голосов
/ 22 сентября 2015

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

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

В моем случае для исключения каталога тестов верхнего уровня было достаточно следующего:

packages = find_packages(exclude=["tests.*", "tests"]),
8 голосов
/ 01 февраля 2015

В моем 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='Stack Overflow 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*
4 голосов
/ 04 марта 2009

UG, setuptools делает это действительно сложно: (

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

from setuptools import setup, find_packages
...
packages = find_packages(exclude=['tests']),
data_files = os.walk(path_to_files),
1 голос
/ 16 июня 2009

Для аналогичных целей мой коллега написал пакет setuptools-dummy: http://github.com/ella/setuptools-dummy/tree/master

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

...