Найти - Пользователи
Полная версия: Python + Fortran
Начало » Python для экспертов » Python + Fortran
1 2
Andity
Здравствуйте!
Подскажите, как организовать взаимодействие этих двух языков? Ситуация: по воле научника приходится писать на фортране. Проект состоит из нескольких модулей (.for-файлов), причем 3 из них написаны не мной. Переписать их на Python, увы, не под силу - даже потому, что часть фортран-кода вообще не понимаю(. Возможно ли как-то вызывать функции из этих фортран-модулей на Python?

Конфиг: Windows; Python 2.5.2; Fortran 77, среда - MS Fortran PowerStation 4.0.

С F2PY разобраться не смог (пытался повторить стандартный пример F2PY) - сначала он не мог найти модуль Numeric, потом поставил Python 2.4, т.к. нашел Numeric, только под него. Дошел вот до чего:
...
No module named msvccompiler in scipy_distutils, trying from distutils..
error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.
bialix
Тебе надо установить Си-компилятор для сборки обверток вокруг фортран-кода. В идеале нужен MS Visual Studio 2003 .NET (который v.7.1) но можно попробовать и mingw (бесплатный). Mingw брать отсюда: http://www.develer.com/oss/GccWinBinaries
Andity
Поставил VS2003. Дело сдвинулось, спасибо.
Вот лог:
Насколько я понял, он не может найти gcc-шный компилятор фортрана (g77). Возможно ли прикрутить к нему Fortran PowerStation 4й? Или же нужно ставить g77, если второе, то подскажите где его можно скачать.
numpy_info:
FOUND:
define_macros = [('NUMERIC_VERSION', '"\\"24.2\\""')]
include_dirs = ['C:\\Python24\\include']

running build
running config_fc
running build_src
building extension "hello" sources
f2py:> c:\docume~1\user\locals~1\temp\tmphbvoht\src\hellomodule.c
creating c:\docume~1\user\locals~1\temp\tmphbvoht
creating c:\docume~1\user\locals~1\temp\tmphbvoht\src
Reading fortran codes...
Reading file 'c:\\fpy\\hello.f'
Post-processing...
Block: hello
Block: foo
Post-processing (stage 2)...
Building modules...
Building module "hello"...
Constructing wrapper function "foo"...
foo(a)
Wrote C/API module "hello" to file "c:\docume~1\user\locals~1\temp\tmphbvoht\src/hellomodule
.c"
adding 'c:\docume~1\user\locals~1\temp\tmphbvoht\src\fortranobject.c' to sources.
adding 'c:\docume~1\user\locals~1\temp\tmphbvoht\src' to include_dirs.
copying C:\Python25\Lib\site-packages\f2py2e\src\fortranobject.c -> c:\docume~1\user\locals~1\temp\t
mphbvoht\src
copying C:\Python25\Lib\site-packages\f2py2e\src\fortranobject.h -> c:\docume~1\user\locals~1\temp\t
mphbvoht\src
running build_ext
No module named msvccompiler in scipy_distutils, trying from distutils..
customize MSVCCompiler
customize MSVCCompiler using build_ext
0
Could not locate executable g77
Could not locate executable f77
customize GnuFCompiler
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
Could not locate executable ifort
Could not locate executable ifc
Could not locate executable efort
Could not locate executable efc
Could not locate executable ifort
MSVCCompiler instance has no attribute 'lib'
customize AbsoftFCompiler
Could not locate executable f90
Executable f90 does not exist
MSVCCompiler instance has no attribute 'lib'
Could not locate executable ifort
Could not locate executable ifc
Could not locate executable efort
Could not locate executable efc
Could not locate executable ifort
MSVCCompiler instance has no attribute 'lib'
customize GnuFCompiler
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
customize GnuFCompiler
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
Could not locate executable f77
Executable f77 does not exist
customize GnuFCompiler using build_ext
building 'hello' extension
compiling C sources
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1\user
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1\user\locals~1
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1\user\locals~1\temp
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1\user\locals~1\temp\tmphbvoht
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\docume~1\user\locals~1\temp\tmphbvoht\src
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe /c /nologo /Ox /MD /W3 /GX /DNDEBU
G -IC:\Python24\include -Ic:\docume~1\user\locals~1\temp\tmphbvoht\src -IC:\Python24\include -IC:\Py
thon24\PC /Tcc:\docume~1\user\locals~1\temp\tmphbvoht\src\hellomodule.c /Foc:\docume~1\user\locals~1
\temp\tmphbvoht\Release\docume~1\user\locals~1\temp\tmphbvoht\src\hellomodule.obj
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe /c /nologo /Ox /MD /W3 /GX /DNDEBU
G -IC:\Python24\include -Ic:\docume~1\user\locals~1\temp\tmphbvoht\src -IC:\Python24\include -IC:\Py
thon24\PC /Tcc:\docume~1\user\locals~1\temp\tmphbvoht\src\fortranobject.c /Foc:\docume~1\user\locals
~1\temp\tmphbvoht\Release\docume~1\user\locals~1\temp\tmphbvoht\src\fortranobject.obj
compiling Fortran sources
f77(f77) options: '-Wall -fno-second-underscore -O2 -funroll-loops -march=i686 -malign-double -fomit
-frame-pointer'
creating c:\docume~1\user\locals~1\temp\tmphbvoht\Release\fpy
compile options: '-IC:\Python24\include -Ic:\docume~1\user\locals~1\temp\tmphbvoht\src -IC:\Python24
\include -IC:\Python24\PC -c'
f77:f77: c:\fpy\hello.f
Could not locate executable f77
Executable f77 does not exist

error: Command "f77 -Wall -fno-second-underscore -O2 -funroll-loops -march=i686 -malign-double -fomi
t-frame-pointer -IC:\Python24\include -Ic:\docume~1\user\locals~1\temp\tmphbvoht\src -IC:\Python24\i
nclude -IC:\Python24\PC -c -c c:\fpy\hello.f -o c:\docume~1\user\locals~1\temp\tmphbvoht\Release\fpy
\hello.o" failed with exit status 1
Андрей Светлов
Интересно. С фортраном еще не сталкивался - но в gcc (в том числе и от MinGW он есть).
Посмотри на этот самый MinGW на sourceforge.net. Если будут проблемы - стучи. Вдвоем - осилим:)
Andity
F2PY для unix-like систем, и вообщем-то не странно, что он не хотел работать под win.
Статья по теме:
http://www.scipy.org/F2PY_Windows

Как докачаю и все поставлю - отпишусь.
Andity
Сделал по инструкции выше - все заработало. На удивление, компилятор Fortran 95, который поставил MinGW запросто скушал мой проект на Fortan 77.

Осталось побороть “undefined reference” - которое возникает при компиляции fortran-новких модулей, которые содержат вызовы других модулей - f2py их попросту не видит.
geofisik
Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?
Spectral
geofisik
Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?
Я вам настоятельно советую не делать это на Windows и научиться использовать Unix (Fedora OS или Ubuntu, что угодно) для таких задач, как у вас. Понимаю, что вам тяжело будет привыкать к новой системе, но считаю нужным написать, что вероятность получить работающую програму на Unix выше, чем на Windows
geofisik
В Ubuntu делал подобное, но в данном случае нужно сделать под “окна”
doza_and
Spectral
Я вам настоятельно советую не делать это на Windows
Много раз связывал разные системы, никаких особых проблем нет. И на виндах нормально и под unix. В этом деле надо быть попроще, F2PY и swig упрощают дело в огромных проектах. А для интерфейсов просто посмотрите как сделать динамическую библиотеку и грузите ее при помощи ctype.

Под виндами довольно трудно фортрану объяснить чтобы экспортировал функции (точнее трудно сделать чтобы код не менялся для intel fortran g95 watcom,и прочие прочие….компиляторы фортрана) поэтому проще слинковать с сишным переходником и цеплять уже его.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB