2010-06-03 3 views
6

Ich schreibe eine setup.py-Datei für ein Python-Projekt, damit ich sie verteilen kann. Das Ziel ist es schließlich, eine .egg-Datei zu erstellen, aber ich versuche, sie zuerst mit Distutils und einer regulären .zip zu arbeiten.Warum kann ich diese Datendateien nicht in eine Python-Distribution mit Distutils aufnehmen?

Dies ist eine Eklipse pydev Projekt und meine Dateistruktur ist dies so etwas wie:

ProjectName 
    src 
     somePackage 
     module1.py 
     module2.py 
     ... 
    config 
     propsFile1.ini 
     propsFile2.ini 
     propsFile3.ini 
    setup.py 

mein setup.py Code Hier ist so weit:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'], 
     data_files = [('config', ['..\config\propsFile1.ini', 
           '..\config\propsFile2.ini', 
           '..\config\propsFile3.ini'])] 
    ) 

Wenn ich laufen diese (mit Sdist als ein Kommandozeilenparameter), wird eine .zip-Datei mit allen Python-Dateien generiert - aber die Konfigurationsdateien sind nicht enthalten. Ich dachte, dass dieser Code:

data_files = [('config', ['..\config\propsFile1.ini', 
            '..\config\propsFile2.ini', 
            '..\config\propsFile3.ini'])] 

zeigt an, dass diese 3 angegebenen Konfigurationsdateien sollen auf ein Verzeichnis „config“ in der Zip-Verteilung kopiert werden. Warum leistet dieser Code nichts? Was mache ich falsch?

(ich habe auch versucht, um mit den Pfaden der Config-Dateien zu spielen ... Aber nichts scheint zu helfen. Würde Python werfen einen Fehler oder eine Warnung, wenn der Pfad nicht korrekt war/Datei nicht gefunden wurde?)

Antwort

1

Ich habe es endlich funktioniert, indem ich das gesamte config-Verzeichnis in den src-Ordner verschoben habe. Das muss bedeuten, dass meine Pfade nicht verfügbar sind ... aber da ich keine Möglichkeit gefunden habe, ein Verzeichnis zu sichern (".." hat keinen Unterschied gemacht), werde ich bei dieser Lösung bleiben zur Zeit.

6

erstellen Sie eine MANIFEST.in-Datei wie folgt:

include config\* 

(EDIT) Schauen Sie hier für weitere Informationen: http://docs.python.org/distutils/sourcedist.html#specifying-the-files-to-distribute

+0

Danke. Ich erhalte folgenden Fehler: 'Warnung: Keine Dateien gefunden, die 'config \ *' entsprechen. Ich habe versucht, zu .. \ config \ * zu ändern, aber das hilft auch nicht ... irgendwelche Ideen? – froadie

+0

Es gibt ein Leerzeichen zwischen '\' und '*'. Versuchen Sie das zu entfernen? Andernfalls versuchen, den Schrägstrich zu verwenden. Ich habe den Schrägstrich verwendet, aber da Sie den umgekehrten Schrägstrich verwendet zu haben scheinen, habe ich hier '/' durch '\' ersetzt. Ich habe jedoch festgestellt, dass die Verwendung von/verursacht wirklich keine Probleme unter Windows. Wenn nichts funktioniert, nur prüfen, ob Sie auf dem richtigen Weg sind von Dateinamen in sie hartzucodieren, wie: gehören config/propsFile1.ini gehören config/propsFile2.ini # etc ... – Umang

+0

Der Raum war nur wegen der SO-Formatierung - wenn ich sie zusammenstellte, versteckte sie den Schrägstrich aus irgendeinem Grund. Ändern in Forward-Schrägstrich macht keinen Unterschied ... Python scheint es automatisch zurück zu konvertieren, gleiche Fehlermeldung. Erhalte den gleichen Fehler bei einzelnen Dateien ... :(Irgendeine Ahnung, was ist los? Ist es ein Pfadproblem? – froadie

0

ich denke, man die Schrägstriche in der entkommen Dateinamen; B. anstelle von '..\config\whatever', schreiben Sie '..\\config\\whatever', oder verwenden Sie die rohe Zeichenfolge-Syntax: r'..\config\whatever'.

+0

Ich habe das versucht (das ist eines der Dinge, die ich mit "Ich habe auch versucht, herumspielen mit den Pfaden der Config-Dateien") und es schien keinen Unterschied zu machen ... – froadie

+0

Distutils verwendet immer Schrägstriche. –

Verwandte Themen