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

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

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

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

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

python,setuptools,

15

Ответов: 5


9

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

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

Мы также используем include_package_data = True, чтобы лучше контролировать, что делает.from setuptools import setup, find_packages ... packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),


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

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

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

setup.py

6

У меня есть следующее в моем ...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каталог, который стал массовым из-за количества изображений, которые у меня были в нем; это означало, что размер моего MANIFEST.inувеличился более чем на 500 КБ. Первоначально у меня это было в моей ...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.intarball. Итак, похоже, вам просто нужно использовать это в MANIFEST.inфайле ...

prune tests*

4

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

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

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

1

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

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

питон, Setuptools,
Похожие вопросы