Wie kann ich meine setup.py um einen relativen Pfad verwenden, um meine Dateien?
Ich versuche zu bauen, ein Python-distribution mit distutils
. Leider, meine Verzeichnis Struktur sieht wie folgt aus:
/code /MeinPaket __init__.py Datei1.py Datei2.py /subpackage __init__.py /bauen setup.py
Hier mein setup.py
Datei:
from distutils.core import setup
setup(
name = 'MyPackage',
description = 'This is my package',
packages = ['mypackage', 'mypackage.subpackage'],
package_dir = { 'mypackage' : '../mypackage' },
version = '1',
url = 'http://www.mypackage.org/',
author = 'Me',
author_email = '[email protected]',
)
Wenn ich python setup.py sdist
es korrekt erzeugt die manifest-Datei, aber nicht meine source-Dateien in der distribution. Offenbar schafft es ein Verzeichnis für die Quelldateien (d.h. mypackage1
) dann Kopien der Quelldateien zu mypackage1/../mypackage
die bringt Ihnen außerhalb der Verteilung.
Wie kann ich das korrigieren, ohne dass meine Verzeichnis-Struktur zu entsprechen, was distutils
erwartet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche Verzeichnisstruktur Sie wollen innerhalb der Archiv-Datei? Die gleichen wie Ihre vorhandene Struktur?
Du könntest Paket alles, was ein Verzeichnis höher (
code
in deinem Beispiel) mit dieser modifizierten setup.py:Würden Sie laufen (in der
code
- Verzeichnis):Oder, wenn Sie möchten, um
dist
innen bauen:Wie ich die Verzeichnisstruktur, die Sie versuchen für. Ich habe nie gedacht
setup.py
besonderes war, genug zu rechtfertigen in die Wurzel-code". Aber wie es oder nicht, ich denke, das ist, wo Benutzer Ihre Verteilung wird erwartet. So ist es keine überraschung, dass Sie zu betrügen, distutils, etwas anderes zu machen. Diedata_files
parameter ist ein hack, um Ihre setup.py in der Verteilung in den gleichen Ort, den Sie gefunden haben, die es.Haben es in das übergeordnete Verzeichnis wechseln zuerst, vielleicht?
etc.
Oder wenn Sie laufen könnte es von überall (das ist übertrieben, aber...):
etc. Nicht, dass das funktioniert, sollte aber einfach zu versuchen.
Laufen setup.py aus dem root-Ordner des Projekts
In Ihrem Fall setup.py in code/
code/sollte auch:
Die, wenn Sie ausgeführt "setup.py sdist" es sollte auto-gen ein MANIFEST, einschließlich:
- alle angegebene Dateien in py_modules und/oder Pakete
- setup.py
- README.txt
Weitere Dateien hinzuzufügen, nur hand-editieren der MANIFEST-Datei beinhalten, was auch immer andere Dateien, die Ihr Projekt braucht.
Für eine einigermaßen anständige Erklärung dieser Lesen Sie diese.
Sehen ein Beispiel checkout mein Projekt.
Hinweis: ich bin nicht das MANIFEST unter Versionskontrolle, so dass Sie nicht finden Sie dort.
A sorta lame workaround, aber ich würde wahrscheinlich nur ein Makefile, das rsynced ./MeinPaket an ./bauen/MeinPaket und dann das übliche distutils syntax von innen ./bauen. Tatsache ist, distutils erwartet zu packen setup.py in der Wurzel des sdist und code unter es, so wirst du einen Teufel mal überzeugen, es anders zu machen.
Können Sie immer die nuke kopieren, wenn Sie sauber machen, damit Sie nicht zu mess up your vcs.
Auch eine lahme workaround, aber eine Kreuzung/link von dem package-Verzeichnis innerhalb des build-Projekt arbeiten sollte.