2009-03-04 16 views
11

Sto provando a inserire un progetto Python in un tarball utilizzando setuptools. Il problema è che setuptools non sembra gradire il modo in cui l'albero dei sorgenti è stato originariamente impostato (non da me, devo aggiungere). Tutto ciò che in realtà voglio distribuire è nella directory di primo livello, piuttosto che in una sottodirectory come i docenti di setuptools parlano.Esclusione di una directory di primo livello da un pacchetto setuptools

L'albero ha una directory, tests, che non desidero avere nel pacchetto rilasciato. Tuttavia, l'uso di exclude_package_data non sembra in realtà escludere nessuno e mi piacerebbe capire cosa ho fatto di sbagliato.

mio setup.py assomiglia a questo, in parte rilevante:

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

risposta

4

Ug, setuptools rende questo

Non so se questo è ciò che si vuole, ma un progetto davvero difficile :(I lavoro sulla utilizza una combinazione di due cose:

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

Utilizziamo la seguente convenzione per escludere i 'test' dai pacchetti.

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

Usiamo anche MANIFEST.in per controllare meglio cosa 'include_package_data = True' fa.

Saluti, Martin.

+1

Stranamente, l'uso di 'exclude =()' non era abbastanza per me. Per http://stackoverflow.com/a/11669299/472876, ho dovuto usare i test di ricorsione-esclusione * nel mio 'MANIFEST.in? per il successo. – HeyWatchThis

2

Ho il seguente nel mio 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"], 

ho avuto una directory doc/ che stava diventando enorme a causa del numero di immagini che ho avuto in esso; questo significava che la dimensione del mio sdist stava crescendo oltre i 500kB. Inizialmente ho avuto questo nella mia MANIFEST.in ...

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

L'unica cosa che ho dovuto fare per escludere la mia directory doc era questa riga in fondo MANIFEST.in ...

prune doc* 

Utilizzando prune doc* improvvisamente rimosso tutta la mia directory doc/ dal tarball sdist. Così, sembra che hai solo bisogno di utilizzare questo in un file MANIFEST.in ...

prune tests* 
5

Questo è quello che ho trovato in setuptools manual:

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

Nel mio caso il seguente è stato sufficiente a escludere la cima -la directory dei test di livello:

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