2009-11-13 7 views
9

Ich entwickle ein Python-Ei, das mehrere. TXT-Abhängigkeiten hat (sie sind Vorlagen, um Dateien durch das Ei selbst zu generieren), und ich habe Schwierigkeiten, diese Abhängigkeiten zu site-packages während kopiert setup.py install. Nach dem distribute documentation ...Packaging-Ressourcen mit setsetools/distribute

Dateisystem meines Pakets:

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

In setup.py:

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

In meinem Paket:

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

... diese Kombination von Konfiguration und Dateisystem sollte file1.txt ergeben und file2.txt über pkg_resources.resource_string verfügbar sein. Leider werden sie nicht unter site-packages während setup.py install kopiert. Was vermisse ich?

Danke! http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

Grundsätzlich müssen Sie nur einstellen include_package_data=True in Ihrem setup.py-Datei: Paketdaten für einschließlich hier

Antwort

4

Haben Sie bei der Setuptools Dokumentation aussah. Wenn Sie Subversion oder CVS verwenden, sind alle versionierten Dateien enthalten. Wenn nicht, können Sie angeben, welche Dateien in eine MANIFEST.in-Datei aufgenommen werden sollen.

Ich glaube, dass verteilt dies auch unterstützt.

Sie können dann auf die Dateien zugreifen, als würden Sie ohne sie zu packen. das heißt in main.py könnten Sie haben:

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

und dies auch in der verpackten Version funktionieren würde. Ein Nachteil ist, dass Sie in setup.py auch zip_safe = False einstellen müssen, damit alle Dateien während der Installation entpackt werden.

+0

Ausgezeichnet, danke für die Hilfe. Würde es Ihnen etwas ausmachen, den Unterschied zwischen "Datendateien" und "Ressourcen" zu klären, wie dies in der Dokumentation zu setuptools definiert ist? Ich habe die Anweisungen für Ressourcen befolgt, aber sie scheinen qualitativ anders zu sein. Vielen Dank! –

+0

Nun, deine Frage war das erste Mal, dass ich auf "Ressourcen" stieß, also bin ich auch neugierig, wofür sie sind. Aber Datendateien sind definitiv der Weg für Dinge wie Vorlagen. – pcardune

+8

Beachten Sie, dass Sie zip_safe = False nicht verwenden müssen. Verwenden Sie stattdessen pkg_resources.resource_stream ('Paketname', 'templates/file1.txt'). Read() und setuptools holen den Stream für Sie aus dem Dateisystem oder aus dem gezippten Ei. –