2009-03-04 6 views
11

J'essaie de mettre un projet Python dans une archive tar en utilisant setuptools. Le problème est que setuptools ne semble pas aimer la façon dont l'arbre source a été configuré à l'origine (pas par moi, je dois ajouter). Tout ce que je veux réellement distribuer est dans le répertoire de premier niveau, plutôt que dans un sous-répertoire comme les docs de setuptools parlent.Exclure un répertoire de niveau supérieur d'un paquet setuptools

L'arborescence possède un répertoire, tests, que je ne veux pas avoir dans le package publié. Cependant, en utilisant exclude_package_data ne semble pas vraiment exclure, et je voudrais savoir ce que j'ai fait de mal.

Mon setup.py ressemble à ceci, en partie pertinente:

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

Répondre

4

Ug, setuptools rend ce vraiment difficile :(

Je ne sais pas si c'est ce que vous voulez, mais un projet I travaux utilise une combinaison de deux choses:

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

Nous utilisons la convention suivante pour exclure les 'tests' des paquets. Nous utilisons également MANIFEST.in pour mieux contrôler ce que 'include_package_data = True' fait.

Cordialement, Martin.

+1

Assez curieusement, utiliser 'exclude =()' ne me suffisait pas. Pour http://stackoverflow.com/a/11669299/472876, j'ai dû utiliser 'récursive-exclude tests *' dans mon 'MANIFEST.dans »pour le succès. – HeyWatchThis

2

je suit dans mon 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"], 

J'ai eu un répertoire doc/ qui devenait massif en raison du nombre d'images que j'avais en elle; Cela signifiait que la taille de mon sdist augmentait de plus de 500 Ko. Au départ, j'avais dans mon MANIFEST.in ...

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

La seule chose que je devais faire pour exclure mon répertoire doc était cette ligne au bas de MANIFEST.in ...

prune doc* 

L'utilisation prune doc* soudainement enlevé tout mon répertoire doc/ de l'archive tar sdist. Ainsi, il semble que vous avez juste besoin d'utiliser dans un fichier MANIFEST.in ...

prune tests* 
5

C'est ce que je trouve dans setuptools manual:

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

Dans mon cas, ce qui suit a été suffisant pour exclure le dessus répertoire de tests de niveau:

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