2010-05-10 3 views
7

Bien que j'ai trouvé beaucoup de réponses et de discussions sur cette question, je suis incapable de trouver une solution particulière à ma situation. Le voici:Comment compiler des scripts Python à utiliser dans FORTRAN?

J'ai un programme principal écrit en FORTRAN. On m'a donné un ensemble de scripts Python qui sont très utiles. Mon but est d'accéder à ces scripts python à partir de mon programme FORTRAN principal. À l'heure actuelle, j'appelle simplement les scripts de FORTRAN en tant que tels:

SYSTEM CALL ('python pyexample.py')

Les données sont lues à partir des fichiers .dat et écrit fichiers .dat. C'est ainsi que les scripts python et le programme FORTRAN principal communiquent entre eux. Je cours actuellement mon code sur ma machine locale. J'ai python installé avec numpy, scipy, etc.

Mon problème: Le code doit être exécuté sur un serveur distant. Pour le code strictement FORTRAN, je compile le code localement et envoie l'exécutable au serveur où il attend dans une file d'attente. Cependant, le serveur n'a pas installé python. Le serveur est utilisé comme une station de calcul entre les universités et l'industrie. L'installation de Python avec les modules nécessaires sur le serveur n'est pas une option. Cela signifie que ma stratégie "CALL SYSTEM ('python pyexample.py')" ne fonctionne plus.

Solution ?: J'ai trouvé quelques informations sur un certain nombre de choses en fil Is it feasible to compile Python to machine code?

Shedskin, Psyco, Cython, Pypy, API CPython

Ces « modules » (? Je ne sais pas si c'est quoi appelez-les) semblent compiler un script python en C ou en C++. Apparemment, toutes les caractéristiques de Python ne peuvent pas être traduites en C. De plus, certaines d'entre elles semblent être expérimentales. Est-il possible de compiler mes scripts python avec mon code FORTRAN? Il existe f2py qui convertit le code FORTRAN en python, mais cela ne fonctionne pas dans l'autre sens.

Toute aide serait grandement apprécié. Merci pour votre temps.

Vincent

PS: J'utilise Python 2.6 sur Ubuntu

+0

Je ne peux pas répondre à votre question mais vous indiquera que f2py ne convertit pas Fortran à Python, mais génère une interface de Fortran à Python afin que Python peut appeler Fortran. – Fortranner

Répondre

3

une manière ou d'une autre, vous aurez besoin pour obtenir le temps d'exécution de Python sur votre serveur, sinon il ne sera pas possible d'exécuter Python bytecode. Ignacio est sur la bonne voie en suggérant d'invoquer directement libpython, mais en raison des conventions de passage de paramètres de Fortran, il vous sera beaucoup plus facile d'écrire un wrapper C pour gérer l'interface entre Fortran et l'API d'intégration de CPython.

Malheureusement, vous faites cela à la dure - il est beaucoup plus facile d'écrire un programme Python qui peut appeler Fortran que l'inverse.

1

Vous ne voulez pas de ceux-ci. Ce que vous devriez faire est d'utiliser FFI de FORTRAN pour parler avec libpython et frober son API.

Questions connexes