2015-05-02 23 views
5

Ich muss Routinen von Fortran-Modulen in Python aufrufen. Ich habe es mit f2py und python2.7 getan. Es hat ziemlich gut funktioniert.Installieren Sie f2py mit python3

Nun muss ich es mit python3 verwenden, aber f2py scheint nicht mit python3 kompatibel zu sein.

Ich sehe, dass einige Leute eine Version namens f2py3 verwenden, aber es ist nicht durch pip, nicht durch Macports (ich benutze einen Mac). Auch python3+numpy+f2py seem to be already integrated in Fedora.

Hat es jemand geschafft, f2py3 (oder seine Entsprechung) mit python3 auf einem Mac zu verwenden? Falls nein, welche alternative Lösung schlagen Sie vor, Fortran-Bibliotheken mit python3 zu verknüpfen?

+0

Ich bin daran auch interessiert. Zu Ihrer Information, Ihr Fedora-Link oben gibt keine Ergebnisse zurück, wenn ich es versuche, aber ich bekomme einige Informationen, die nur nach 'f2py' über Ihren Link suchen. – JohnE

+0

Ich habe den defekten Link repariert. Es sollte auf die Download-Seiten der RPM-Ressource für python3-numpy-f2py zeigen. – jvtrudel

+0

Ja, funktioniert jetzt. Vielen Dank! – JohnE

Antwort

4

Als Alternative können Sie die Fortran-Routinen und aufrufen, ohne auf f2py angewiesen zu sein. Der Nachteil dieses Ansatzes ist, dass Sie die Schnittstellen selbst festlegen müssen.

Hier ist ein example ich auf SO vor einiger Zeit gepostet.

+0

Sehr interessant, weil f2py anscheinend nicht mehr gepflegt wird (vielleicht irre ich mich?). Das Problem ist, dass ich viele alte Fortran-Codes verwenden muss. Refactoring-Schnittstellen sind keine leichte Aufgabe und können Fehler erzeugen. Aber sicher werde ich Ihren Vorschlag für neue Codes verwenden. – jvtrudel

+0

Nun, für alten Code könnten Sie Compiler-Optionen verwenden, um die generierten Funktionsnamen zu beeinflussen (zB ['-fno-unterstreichen' für' gfortran'] (https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen- Options.html)) und versuche, die Routinen direkt von python (ohne die ISO_C_Bindings) aufzurufen. Dann müssten alle Arbeiten auf der Python-Seite erledigt werden. Beachten Sie, dass dies (im Allgemeinen) nicht portierbar ist und vom verwendeten Compiler abhängt! –