Как скомпилировать скрипты Python для использования в FORTRAN? - PullRequest
7 голосов
/ 10 мая 2010

Хотя я нашел много ответов и обсуждений по этому вопросу, я не могу найти решение, специфичное для моей ситуации. Вот оно:

У меня есть основная программа, написанная на Фортране. Мне дали набор скриптов Python, которые очень полезны. Моя цель - получить доступ к этим скриптам на python из моей основной программы на Фортране. В настоящее время я просто называю скрипты из FORTRAN так:

СИСТЕМА ВЫЗОВА ('python pyexample.py')

Данные считываются из файлов .dat и записываются в файлы .dat. Вот как сценарии python и основная программа FORTRAN взаимодействуют друг с другом.

Я сейчас запускаю свой код на моей локальной машине. У меня установлен python с numpy, scipy и т. Д.

Моя проблема: Код должен работать на удаленном сервере. Для строго FORTRAN-кода я компилирую код локально и отправляю исполняемый файл на сервер, где он ожидает в очереди. Однако на сервере не установлен Python. Сервер используется в качестве станции обработки номеров между университетами и промышленностью. Установка Python вместе с необходимыми модулями на сервере не вариант. Это означает, что моя стратегия «CALL SYSTEM ('python pyexample.py')» больше не работает.

Решение ?: Я нашел некоторую информацию о нескольких вещах в потоке Возможно ли скомпилировать Python в машинный код?

Шедскин, Psyco, Cython, Pypy, Cpython API

Эти «модули» (не уверены, что так их называть), похоже, компилируют скрипт Python в код C или C ++. Очевидно, что не все возможности Python могут быть переведены на C. Кроме того, некоторые из них представляются экспериментальными. Можно ли скомпилировать мои скрипты на Python с моим кодом на Фортране? Существует f2py, который конвертирует код FORTRAN в python, но он не работает наоборот.

Любая помощь будет принята с благодарностью. Спасибо за ваше время.

Винсент

PS: я использую python 2.6 в Ubuntu

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

Так или иначе, вам нужно получить среду выполнения Python на вашем сервере, иначе будет невозможно выполнить байт-код Python. Ignacio находится на правильном пути, предлагая напрямую вызывать libpython, но из-за соглашений Fortran о передаче параметров вам будет гораздо проще написать оболочку C для обработки интерфейса между Fortran и API встраивания CPython.

К сожалению, вы делаете это нелегко - гораздо проще написать программу на Python, которая может вызывать подпрограммы на Фортране, чем наоборот.

2 голосов
/ 10 мая 2010

Вы не хотите ничего из этого. Что вы должны сделать, это использовать FFI FORTRAN для общения с libpython и получить его API .

...