2009-11-13 9 views
9

Zajmuję się tworzeniem jajek w Pythonie z kilkoma zależnościami .txt (są to szablony używane do generowania plików przez samo jajko), i staram się uzyskać te zależności skopiowane do site-packages podczas setup.py install. Według distribute documentation ...Pakowanie zasobów za pomocą setuptools/distribute

systemie plików moim pakiecie:

setup.py 
package 
|--- __init__.py 
|--- main.py 
|--- binary (calls main.py with pkg_resources.load_entry_point) 
|--- templates 
    |--file1.txt 
    |--file2.txt 

W setup.py:

setup(
    [...] 
    eager_resources = ['templates/file1.txt', 'templates/file2.txt'] 
) 

ciągu mojego pakietu:

from pkg_resources import resource_string 
tpl = resource_string(__name__, 'templates/file1.txt') 

... ta kombinacja konfiguracji i systemu plików powinna spowodować, że file1.txt i file2.txt będą dostępne przez pkg_resources.resource_string. Niestety nie są one kopiowane do site-packages podczas setup.py install. czego mi brakuje?

Dzięki!

Odpowiedz

4

Czy spojrzał na dokumentacji setuptools za tym danych pakietu tutaj: http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

Zasadniczo wystarczy ustawić include_package_data=True w pliku setup.py. Jeśli korzystasz z subversion lub CVS, uwzględnione zostaną wszystkie wersje plików. Jeśli nie, możesz określić, które pliki mają zostać dołączone do pliku MANIFEST.in.

Sądzę, że dystrybucja obsługuje również to.

Możesz wtedy uzyskać dostęp do plików w taki sposób, w jaki chcesz, bez pakowania. w main.py możesz mieć:

import os.path 
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt')) 
print f.read() 
f.close() 

i działałoby to również w wersji spakowanej. Jednym z zastrzeżeń jest to, że będziesz musiał ustawić zip_safe = False w pliku setup.py, aby wszystkie pliki zostały rozpakowane podczas instalacji.

+0

Doskonale, dziękuję za pomoc. Czy mógłbyś wyjaśnić różnicę między "plikami danych" i "zasobami", zgodnie z dokumentacją setuptools, z którą się łączyłeś? Postępowałem zgodnie z instrukcjami dotyczącymi zasobów, ale wydaje się, że są jakościowo inne. Dzięki! –

+0

Cóż, twoje pytanie było pierwszym razem, gdy natknąłem się na "zasoby", więc jestem ciekawy, po co są. Ale pliki danych to zdecydowanie droga do takich rzeczy jak szablony. – pcardune

+8

Pamiętaj, że nie musisz używać zip_safe = False. Zamiast tego użyj pkg_resources.resource_stream ("nazwa-pakietu", "templates/file1.txt"). Read() i setuptools otrzymają strumień dla ciebie z systemu plików lub z skompresowanego jajka. –

Powiązane problemy