2017-07-17 15 views
1

Ich habe Probleme beim Einbinden von Datendateien in mein setup.py-Skript. Mein Paket ist wie folgt aufgebaut:Einschließlich Datendateien mit setup.py

my_package/ 
    setup.py 
    MANIFEST.in 

    my_package/ 
     __init__.py 
     access_data.py 

     data_files/ 
      my_data_file.csv 

ich die my_data_file.csv-Datei aufnehmen möchten bei der Installation, so dass es von access_data.py gelesen werden kann. Um dies zu tun habe ich das package_data Stichwort in setuptools:

setup(..., 
     packages=['my_package'], 
     package_data={'my_package': ['./my_package/data_files/my_data_file.csv']}, 
     include_package_data=True 
    ) 

Ich habe auch die Datei in MANIFEST.in:

recursive-include my_package/data_files * 

setup.py scheint gut zu laufen und wirft keine Fehler. Jedoch, wenn ich das Paket importiere, bekomme ich eine Datei nicht gefunden Fehler, weil my_data_file.csv fehlt. Ich habe versucht, andere Stapelüberlauffragen zu verweisen (besonders this one) aber kann nicht herausfinden, was ich falsch mache. Wie kann ich setup.py erhalten, um die erforderlichen Datendateien aufzunehmen?

+0

Sind Sie auf einem Dateisystem, bei dem die Groß-/Kleinschreibung nicht beachtet wird? 'manifest.in' sollte wirklich' MANIFEST.in' sein. Aber das ist egal, da 'MANIFEST.in' für die Quellenverteilung (sdist) verwendet wird. – phd

+0

Zuerst denke im Debuggen ist das große Problem in viele kleinere zu teilen. Lass es uns Schritt für Schritt machen. Schritt Nummer 1: Überprüfen Sie, ob Ihre Distribution (sdist, egg oder wheel) wirklich 'my_data_file.csv' enthält; Wenn nicht - fixiere 'setup.py' um es einzuschließen. Schritt Nummer 2: Überprüfen Sie, dass 'my_data_file.csv' installiert ist. Schritt 3 - Debuggen Sie, warum Sie nicht auf die Datei zugreifen können, selbst wenn sie vorhanden ist (falscher Pfad zur Datei? Berechtigungen?) – phd

+0

Ihre Zeile sollte 'package_data = {'my_package': ['data_files/my_data_file.csv']},' (Im 'my_package' Paket gibt es kein' my_package' Verzeichnis) –

Antwort

0

Wenn es aufgeführt wird in setup.py ‚s package_data (richtig), sollten Sie es nicht in MANIFEST.in umfassen müssen (wie es automatisch eingeschlossen wird)

In Ihrem Fall der Fehler mit Ihrem package_data Linie ist, die Pfade zu dem Stammnamespace bezüglich

in Ihrem Fall sollte es sein:

package_data={'my_package': ['data_files/my_data_file.csv']}, 

beachten sie auch, dass der Schlüssel in Paketdaten ist die punktierte Modulpfad (es ist kein t super relevant für diesen Spielzeug Fall jedoch).

Verwandte Themen