Disclaimer: Ich bin sehr neu in Python-Verpackungen mit Distutils. Bis jetzt habe ich einfach alles in Module und Pakete verpackt und darüber hinaus entwickelt. Ich habe nie zuvor eine setup.py
-Datei geschrieben.
Ich habe ein Fortran-Modul, das ich in meinem Python-Code mit numpy verwenden möchte. Ich dachte, der beste Weg wäre, f2py, da es in numpy enthalten ist. Um den Build-Prozess zu automatisieren, möchte ich Distutils und die entsprechende numpy-Erweiterung verwenden, die Convenience-Funktionen für f2py-Wrapper enthält.
Ich verstehe nicht, wie ich meine Dateien organisieren soll und wie ich meine Testsuite integrieren kann.
Was ich möchte, ist die Möglichkeit, ./setup.py
zum Erstellen, Installieren, Testen und Entwickeln zu verwenden.
Meine Verzeichnisstruktur sieht folgendermaßen aus:
%Vor% Und die Datei setup.py
enthält Folgendes:
Nach dem Ausführen von ./setup.py build
bekomme ich.
Was weder die __init__.py
-Datei noch die Tests beinhaltet.
volterra/integral.f90
) Kann ich nicht einen Parameter geben, der sagt, nach Sachen in volterra/
suchen? Die Parameter top_path
und package_dir
haben den Trick nicht gemacht. __init__.py
-Datei nicht im Build enthalten. Warum ist das so? Hier ist ein setup.py, das für mich funktioniert:
%Vor%Um zu installieren, verwende ich in der Befehlszeile:
%Vor% Das einzige Problem, das ich zu haben scheint, ist ein kleines Problem. Wenn ich in Site-Packages nach meinem Paket suche, wird es im Ei-Ordner C:\Python27\Lib\site-packages\pkg-0.1.0-py2.7-win32.egg\pkg
installiert. Die meisten anderen Pakete, die ich dort sehe, haben einen C:\Python27\Lib\site-packages\pkg
-Ordner, der vom Ei-Ordner getrennt ist. Weiß jemand, wie man diese Trennung erhält?
Wie beim Testen gebe ich nach der Installation Folgendes in die Befehlszeile ein:
%Vor% Versuchen Sie, python setup.py develop
( Python setup.py entwickeln vs installieren ) zu untersuchen, damit Sie das Paket nicht nach jedem installieren müssen ändern.
Wie ich im Code kommentiert habe, fand ich folgendes nützlich:
Hier ist setup.py von einem Projekt, das ich gemacht habe. Ich habe herausgefunden, dass setup.py / packaging frustrierend ist, ohne feste Antworten und definitiv nicht pythonisch in dem Sinne, dass man nur einen offensichtlichen Weg hat, etwas zu tun. Hoffentlich hilft das ein wenig.
Die Punkte, die Sie nützlich finden können, sind:
find_packages
, was die Plackerei entfernt, viele Dateien einzuschließen oder mit dem Manifest zu experimentieren. package_data
, mit dem Sie einfach angeben können, dass keine .py-Dateien enthalten sein sollen install_requires
/ tests_require
Sie müssen die Quelle für distribute_setup.py finden, wenn Sie sie noch nicht haben.
- Ist es wirklich notwendig, den Pfad zu jeder einzelnen Quelldatei hinzuzufügen? die Erweiterung? (I.e. volterra / integral.f90) Kann ich einen Parameter nicht geben was sagt, sucht nach Sachen in Volterra /? Der top_path und package_dir Parameter haben den Trick nicht gemacht.
- Momentan ist die init .py-Datei nicht vorhanden im Build enthalten. Warum ist das so?
Hoffentlich wird find_packages()
beide lösen. Ich habe nicht viel Erfahrung beim Verpacken, aber ich musste noch nicht zur manuellen Aufnahme zurückkehren.
- Wie kann ich meine Tests durchführen? Setup?
Ich denke, das ist wahrscheinlich eine andere Frage mit vielen Antworten, je nachdem, wie Sie Tests durchführen. Vielleicht können Sie es separat fragen?
Als Nebenbemerkung habe ich den Eindruck, dass der Standard darin besteht, Ihr Testverzeichnis auf die oberste Ebene zu bringen. I.e. volterra/volterra
und volterra/tests
.
- Was ist der beste Workflow für die Entwicklung in einer solchen Umgebung? Umgebung? Ich möchte mein Paket nicht für jeden einzelnen installieren ändere ich es. Wie führe ich die Entwicklung im Quellverzeichnis wann? Sie müssen einige Erweiterungsmodule kompilieren?
Dies könnte auch eine andere Frage wert sein. Ich sehe nicht, warum Sie Ihr Paket für jede einzelne Änderung installieren müssen. Wenn Sie das Paket hochladen, installieren Sie es nicht auf Ihrem Entwicklungssystem (außer zum Testen der Installation) und arbeiten Sie direkt mit Ihrer Entwicklungskopie. Vielleicht verpasse ich aber etwas, da ich nicht mit kompilierten Erweiterungen arbeite.
Hier ist das Beispiel
%Vor%