Verpackung mit numpy und Testsuite

9

Einführung

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:

%Vor%

Nach dem Ausführen von ./setup.py build bekomme ich.

%Vor%

Was weder die __init__.py -Datei noch die Tests beinhaltet.

Fragen

  • Ist es wirklich notwendig, den Pfad zu jeder einzelnen Quelldatei der Erweiterung hinzuzufügen? (I.e. 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.
  • Derzeit ist die __init__.py -Datei nicht im Build enthalten. Warum ist das so?
  • Wie kann ich meine Tests in diesem Setup ausführen?
  • Was ist der beste Workflow für die Entwicklung in einer solchen Umgebung? Ich möchte mein Paket nicht für jede einzelne Änderung, die ich mache, installieren. Wie funktioniert die Entwicklung im Quellverzeichnis, wenn Sie einige Erweiterungsmodule kompilieren müssen?
Lemming 10.10.2013, 13:40
quelle

2 Antworten

2

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:

  • numpy setup.py: Ссылка 2013-11-07
  • winpython setup.py: Ссылка 2013-11-07
  • muss verwendet werden     Importiere setuptools; aus numpy.distutils.core Import-Setup, Erweiterung:      Ссылка 2013-11-07
  • Umhüllung FORTRAN-Code mit f2py: Ссылка 2013-11-07
  • numpy disutils: Ссылка 2013-11-07
  • manifestieren Dateien in disutils:     'distutils aktualisiert MANIFEST nicht ordnungsgemäß. wenn sich der Inhalt von Verzeichnissen ändert.      Ссылка
  • Wenn die Dinge nicht in Ordnung sind, versuchen Sie, Build-, Sdist-, Ei- Verzeichnisse zu löschen und versuchen Sie es erneut:      Ссылка 2013-11-07
  • Fortran-Erweiterungen werden in ihrem entsprechenden Unterpaket installiert     d. h. "my_ext = Erweiterung (name = 'my_pack._fortran', sources = ['my_pack / code.f90'])"     Beachten Sie, dass Quellen auch bei einer Datei eine Liste sind:      Ссылка 2013-11-07
  • installiert Fortran-Quelldateien in das entsprechende Unterpaket     "package_data = {'': [' .f95', ' .f90']} # Beachten Sie, dass es ein Diktat und eine Liste ist":      Ссылка 2013-11-07
  • Kapitel 9 Fortran-Programmierung mit NumPy-Arrays:     Langtangen, Hans Petter. 2013. Python Scripting für computergestützte Wissenschaft. 3. Auflage. Springer.
  • Hitchhikers Anleitung zur Verpackung:      Ссылка
  • Python Packaging: Hass, Hass, Hass überall:      Ссылка
  • So verpacken Sie Ihren Python-Code:      Ссылка
  • Testanforderungen installieren:      Ссылка 2013-11-07
  • 'python setup.py entwickeln':      Ссылка
rtrwalker 08.11.2013, 00:41
quelle
2

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%     
KobeJohn 15.10.2013 05:14
quelle

Tags und Links