2009-03-04 20 views
11

Próbuję umieścić projekt Python w archiwum tar za pomocą setuptools. Problem polega na tym, że setuptools nie przypomina sposobu, w jaki pierwotnie skonfigurowano drzewo źródłowe (nie przeze mnie, muszę dodać). Wszystko, co chcę dystrybuować, znajduje się w katalogu najwyższego poziomu, a nie w podkatalogu, o którym mowa w dokumentach setuptools.Z wyłączeniem katalogu najwyższego poziomu z pakietu setuptools

Drzewo ma katalog, tests, którego nie chcę mieć w wydanym pakiecie. Jednak używanie exclude_package_data nie wydaje się w rzeczywistości wykluczać i chciałbym dowiedzieć się, co zrobiłem źle.

My setup.py wygląda to w odpowiedniej części:

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

Odpowiedz

4

Ug, setuptools czyni to naprawdę trudne :(

Nie wiem, czy to jest to, co chcesz, ale ja jeden projekt prace nad wykorzystuje kombinację dwóch rzeczy:

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

Stosujemy następującą konwencję w celu wykluczenia "testów" z pakietów.

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

Używamy również MANIFEST.in, aby lepiej kontrolować, co robi "include_package_data = True".

Pozdrawiam, Martin.

+1

Dziwne, użycie 'exclude =()' nie było dla mnie wystarczające. Per http://stackoverflow.com/a/11669299/472876, Musiałem użyć 'testów rekursywno-wykluczonych *' w moim 'MANIFEST.w "na sukces. – HeyWatchThis

2

Mam następujących w moim 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"], 

miałem doc/ katalog, który był coraz ogromne ze względu na liczbę obrazów, jakie miałem w nim; oznaczało to, że rozmiar mojego sdist wzrastał ponad 500kB. Początkowo miałem w moim MANIFEST.in ...

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

Jedyne co musiałem zrobić, aby wykluczyć mój katalog doc była ta linia na dole MANIFEST.in ...

prune doc* 

Korzystanie prune doc* nagle usunięto cały mój katalog doc/ z archiwum sdist. Tak, wygląda na to, po prostu trzeba to wykorzystać w pliku MANIFEST.in ...

prune tests* 
5

To co znalazłem w setuptools manual:

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

W moim przypadku następuje wystarczyło, aby wykluczyć górę -level testing directory:

packages = find_packages(exclude=["tests.*", "tests"]), 
Powiązane problemy