2010-06-03 17 views
13

pracuję na opakowaniach mały projekt Pythona jako plik zip lub jajka tak, że może być rozpowszechniany. Znalazłem 2 sposoby na dołączenie plików konfiguracyjnych projektu, z których oba wydają się dawać identyczne wyniki.2 techniki dołączania plików w dystrybucji Pythona: co jest lepsze?

Metoda 1:

Dołącz ten kod w setup.py:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'], 
     data_files = [('config', ['config\propFiles1.ini', 
           'config\propFiles2.ini', 
           'config\propFiles3.ini'])] 
    ) 

Metoda 2:

Dołącz ten kod w setup.py:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'] 
    ) 

Następnie, utwórz plik MANIFEST.in z tym wierszem:

include config\* 

Czy jest jakaś różnica między tymi metodami? Który z nich jest preferowany? Zwykle skłaniam się ku pierwszemu, ponieważ wtedy wcale nie jest potrzebny plik MANIFEST.in. Jednak w pierwszej metodzie musisz określić każdy plik indywidualnie, podczas gdy w drugim możesz po prostu dołączyć cały folder. Czy jest coś jeszcze, co powinienem wziąć pod uwagę? Jaka jest standardowa praktyka?

+0

Uwaga: stosować os.path.join tworzenia ścieżki; użycie "\" zależy od systemu Windows. –

+9

Możesz także użyć '/' na wszystkich platformach. Zauważ, jeśli masz plik taki jak 'config \ notes.txt', który' \ n' zmieni się w znak nowej linii! Po prostu masz szczęście "\ p" nie oznacza niczego. –

+0

@Ian Bicking - dzięki za cynk! Poprzedziłem je wszystkimi r, aby zająć się tym, – froadie

Odpowiedz

25

MANIFEST.in kontroluje jakie pliki są umieszczane w pliku zip dystrybucyjnej podczas rozmowy python setup.py sdist. Kontroluje to, co jest zainstalowane, nie ma wartości . data_files (lub lepiej package_data) kontroluje co są zainstalowane pliki (i myślę, że również sprawia, że ​​pliki są zawarte w pliku zip). Użyj MANIFEST.in plików nie zainstaluje, jak dokumentacja i package_data dla plików, które nie korzystają z kodu Pythona (jak obraz lub szablonu).

+5

Uwaga: pliki wymienione w data_files lub package_data nie są automatycznie zawarte w sdist w żadnej wersji Pythona przed nadchodzącym 2.7 (jest to błąd distutils, który został naprawiony w ciągu ostatniego cykl uwalniania). W rzeczywistości, w przypadku obecnie wydanych wersji Pythona, jeśli potrzebujesz plików do zainstalowania, musisz wymienić je BOTH w data_files/package_data ORAZ w MANIFEST.in. –

+1

zauważam [3,2 docs] (http://docs.python.org/py3k/distutils/setupscript.html#distutils-additional-files) powiedzieć „Zmienione w 3.1: Pliki dopasowania package_data (lub data_files) są automatycznie wprowadzane do MANIFEST, jeśli nie podano szablonu. " Jednak nie jest to prawdą dla mnie, w wersji 3.2 na WinXP: muszę wprowadzić je ręcznie, tworząc MANIFEST.in i dodając je do niego. –

+1

To dziwne. Czy możesz otworzyć raport o błędzie? –

Powiązane problemy