2009-03-04 21 views
11

Estoy tratando de poner un proyecto de Python en un tarball usando setuptools. El problema es que a setuptools no parece gustarle la forma en que se configuró originalmente el árbol fuente (no por mí, debo agregar). Todo lo que realmente quiero distribuir está en el directorio de nivel superior, en lugar de hacerlo en un subdirectorio como los documentos de configuración hablan de ellos.Excluyendo un directorio de nivel superior de un paquete setuptools

El árbol tiene un directorio, tests, que no quiero tener en el paquete publicado. Sin embargo, usar exclude_package_data no parece excluir, y me gustaría saber qué hice mal.

Mi setup.py se parece a esto, en la parte pertinente:

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

Respuesta

4

Ug, setuptools hace que este

No sé si esto es lo que quiere, pero un proyecto muy complicado :(I el trabajo sobre utiliza una combinación de dos cosas:

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

Utilizamos la siguiente convención para excluir 'pruebas' de los paquetes.

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

También utilizamos MANIFEST.in para controlar mejor qué 'include_package_data = True' hace.

Saludos, Martin.

+1

Por extraño que parezca, el uso de 'exclude =()' no fue suficiente para mí. Según http://stackoverflow.com/a/11669299/472876, tuve que usar 'recursive-exclude tests *' en mi 'MANIFEST '.en' para el éxito. – HeyWatchThis

2

Tengo el siguiente en mi 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"], 

que tenían un directorio doc/ que estaba recibiendo masiva debido a la cantidad de imágenes que tenía en ella; esto significaba que el tamaño de mi sdist crecía más de 500kB. Originalmente, tenía esto en mi MANIFEST.in ...

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

Lo único que tenía que hacer para excluir mi directorio doc era esta línea en la parte inferior de MANIFEST.in ...

prune doc* 

Usando prune doc* repente eliminó todo mi directorio doc/ del sdist tarball. Por lo tanto, parece que sólo tiene que utilizar esto en un archivo MANIFEST.in ...

prune tests* 
5

Esto es lo que encontré en setuptools manual:

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

En mi caso, el siguiente fue suficiente para excluir la parte superior -niveles de pruebas directorio:

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