2010-05-10 16 views
7

Aunque encontré muchas respuestas y discusiones sobre esta pregunta, no puedo encontrar una solución particular para mi situación. Aquí está:¿Cómo compilar scripts de Python para usar en FORTRAN?

que tienen un programa principal escrito en FORTRAN. Me han dado un conjunto de scripts de Python que son muy útiles. Mi objetivo es acceder a estos scripts de Python desde mi programa FORTRAN principal. En la actualidad, simplemente llamo a los guiones de FORTRAN como tal:

SISTEMA DE LLAMADA ('pitón pyexample.py')

datos se leen de los archivos .dat y se escriben en archivos .dat. Así es como las secuencias de comandos python y el principal programa FORTRAN se comunican entre sí.

actualmente estoy dirigiendo mi código en mi máquina local. Tengo Python instalado con numpy, scipy, etc.

Mi problema: El código debe ejecutarse en un servidor remoto. Para el código FORTRAN estrictamente, compilo el código localmente y envío el ejecutable al servidor donde espera en una cola. Sin embargo, el servidor no tiene Python instalado. El servidor se está utilizando como una estación de procesamiento numérico entre las universidades y la industria. Instalar Python junto con los módulos necesarios en el servidor no es una opción. Esto significa que mi estrategia "CALL SYSTEM ('python pyexample.py')" ya no funciona.

Solución ?: me encontré con algo de información sobre un par de cosas en hilo de Is it feasible to compile Python to machine code?

Shedskin, Psyco, Cython, PyPy, API CPython

Estos “módulos” (? No estoy seguro si eso es lo que debe llámalos) parecen compilar una secuencia de comandos python para el código C o C++. Aparentemente, no todas las características de Python pueden traducirse a C. Además, algunas parecen ser experimentales. ¿Es posible compilar mis scripts de Python con mi código FORTRAN? Existe f2py que convierte el código FORTRAN a python, pero no funciona al revés.

Cualquier ayuda sería muy apreciada. Gracias por tu tiempo.

Vicente

PS: Estoy usando Python 2.6 en Ubuntu

+0

no puedo responder a su pregunta principal, pero señalará que f2py no convierte Fortran a Python, pero genera una interfaz de Fortran a Python Python de manera que se puede llamar Fortran. – Fortranner

Respuesta

3

un modo u otro, tendrá que obtener el tiempo de ejecución de Python en su servidor, de lo contrario no será posible ejecutar Python bytecode. Ignacio está en el camino correcto con lo que sugiere que invoca libpython directamente, pero debido a las convenciones que pasan parámetros de Fortran, será mucho más fácil para que usted pueda escribir un envoltorio C para manejar la interfaz entre Fortran y la incrustación de CPython API.

Desafortunadamente, usted está haciendo esto de la manera difícil - que es mucho más fácil escribir un programa Python que se puede llamar subrutinas Fortran que al revés.

1

usted no quiere que ninguno de esos. Lo que debe hacer es usar FORTRAN's FFI para hablar con libpython y congelar su API.

Cuestiones relacionadas