Форум сайта python.su
Здравствуйте!
Подскажите, как организовать взаимодействие этих двух языков? Ситуация: по воле научника приходится писать на фортране. Проект состоит из нескольких модулей (.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.
Отредактировано (Май 27, 2008 00:06:27)
Офлайн
Тебе надо установить Си-компилятор для сборки обверток вокруг фортран-кода. В идеале нужен MS Visual Studio 2003 .NET (который v.7.1) но можно попробовать и mingw (бесплатный). Mingw брать отсюда: http://www.develer.com/oss/GccWinBinaries
Офлайн
Поставил 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. Если будут проблемы - стучи. Вдвоем - осилим:)
Офлайн
F2PY для unix-like систем, и вообщем-то не странно, что он не хотел работать под win.
Статья по теме:
http://www.scipy.org/F2PY_Windows
Как докачаю и все поставлю - отпишусь.
Офлайн
Сделал по инструкции выше - все заработало. На удивление, компилятор Fortran 95, который поставил MinGW запросто скушал мой проект на Fortan 77.
Осталось побороть “undefined reference” - которое возникает при компиляции fortran-новких модулей, которые содержат вызовы других модулей - f2py их попросту не видит.
Офлайн
Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?
Офлайн
geofisikЯ вам настоятельно советую не делать это на Windows и научиться использовать Unix (Fedora OS или Ubuntu, что угодно) для таких задач, как у вас. Понимаю, что вам тяжело будет привыкать к новой системе, но считаю нужным написать, что вероятность получить работающую програму на Unix выше, чем на Windows
Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?
Офлайн
В Ubuntu делал подобное, но в данном случае нужно сделать под “окна”
Офлайн
SpectralМного раз связывал разные системы, никаких особых проблем нет. И на виндах нормально и под unix. В этом деле надо быть попроще, F2PY и swig упрощают дело в огромных проектах. А для интерфейсов просто посмотрите как сделать динамическую библиотеку и грузите ее при помощи ctype.
Я вам настоятельно советую не делать это на Windows
Отредактировано (Янв. 30, 2012 18:47:35)
Офлайн