Исключение каталога верхнего уровня из пакета 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, измените исключение на свои нужды, и оно должно работать. Если нет, откройте проблему;)