2012-06-07 14 views
15

Zasadniczo mój pakiet python jest ustawiony jak:Czy jest możliwe dołączenie podkatalogów przy użyciu dist utils (setup.py) jako części danych pakietu?

module 
\_examples 
    \_folder1 
    \_file1.py 
    \_file2.py 
    \_folder2 
    \_file1.py 
    \_file2.py 

Zasadniczo chcę po prostu użyć:

package_data = { 
      'module': ['examples/*'], 
    }, 

ponieważ mój projekt zawsze ma ludzi dodanie przykładów i chcę go łatwo wymienić je od w mojej aplikacji. Mogę go uruchomić dla dowolnego PLIKU w przykładach, ale nie przeklinam go przez podkatalogi. czy to możliwe?

Odpowiedz

1

Będziesz musiał użyć do tego pliku MANIFEST.in.

wierzę, będziemy chcieli coś takiego:

 
$ cat MANIFEST.in 
recursive-include examples/ *.py 
+0

myślę, że można również bezpośrednio korzystać z funkcji Pythona setup.py znaleźć pliki i katalogi, ale nie mogę znaleźć dość dokładna odpowiedź w tej chwili. –

+1

Hm, będę musiał spróbować, tak jak ja: rekurencyjne - dołącz przykłady * .py i nie użyłem /. Czytałem, że MANIFEST.in jest przestarzałe. Myślę, że może po prostu muszę postępować zgodnie z metodą wywołania funkcji Pythona. – xamox

+2

Och ... Cóż, jeśli wiesz, jak to zrobić za pomocą Pythona, opublikuj tutaj. Chciałbym wiedzieć. –

28

Wierzę, czego szukasz coś takiego dla ciebie setup.py, która rekurencyjnie znaleźliśmy żadnych pakietów w projekcie, należy również upewnić i dołącz pliki __init__.py do podkatalogów dla każdego pakietu, który chcesz.

from setuptools import setup, find_packages 

setup(name='MySoftware', 
    packages=find_packages() 
} 
+0

Należy zachować ostrożność, ponieważ możesz przypadkowo włączyć katalogi testowe itp., Chyba że jawnie "wykluczysz = ..." te. – Arminius

1

Tak, można uwzględnić wszystkie podkatalogi.

Wystarczy przekazać poniższe argumenty do konfiguracji() funkcja:

packages=find_packages() 

include_package_data=True 

Oprócz tego trzeba mieć plik MANIFEST.in o treści

recursive-include examples * 

Gwarantuje wszystkie pliki są rekurencyjnie uwzględnione.

Jeśli chcesz wykluczyć określone rozszerzenia, możesz to zrobić, określając opcję wykluczania w argumencie find_packages().

Ex: Aby wykluczyć .txt plików

packages=find_packages(exclude=['.txt']) 

Możesz przeczytać więcej o include_package_datahere.

A także here jest inny link, który mówi, kiedy nie powinno się używać include_package_data

Powiązane problemy