Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2008 20:40:57

Andity
От:
Зарегистрирован: 2008-02-22
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

Здравствуйте!
Подскажите, как организовать взаимодействие этих двух языков? Ситуация: по воле научника приходится писать на фортране. Проект состоит из нескольких модулей (.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)

Офлайн

#2 Май 26, 2008 20:49:54

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Python + Fortran

Тебе надо установить Си-компилятор для сборки обверток вокруг фортран-кода. В идеале нужен MS Visual Studio 2003 .NET (который v.7.1) но можно попробовать и mingw (бесплатный). Mingw брать отсюда: http://www.develer.com/oss/GccWinBinaries



Офлайн

#3 Май 26, 2008 21:54:19

Andity
От:
Зарегистрирован: 2008-02-22
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

Поставил 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



Офлайн

#4 Май 26, 2008 23:48:01

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Python + Fortran

Интересно. С фортраном еще не сталкивался - но в gcc (в том числе и от MinGW он есть).
Посмотри на этот самый MinGW на sourceforge.net. Если будут проблемы - стучи. Вдвоем - осилим:)



Офлайн

#5 Май 27, 2008 00:55:34

Andity
От:
Зарегистрирован: 2008-02-22
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

F2PY для unix-like систем, и вообщем-то не странно, что он не хотел работать под win.
Статья по теме:
http://www.scipy.org/F2PY_Windows

Как докачаю и все поставлю - отпишусь.



Офлайн

#6 Май 28, 2008 19:37:23

Andity
От:
Зарегистрирован: 2008-02-22
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

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

Осталось побороть “undefined reference” - которое возникает при компиляции fortran-новких модулей, которые содержат вызовы других модулей - f2py их попросту не видит.



Офлайн

#7 Янв. 30, 2012 14:57:43

geofisik
От:
Зарегистрирован: 2011-01-06
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?



Офлайн

#8 Янв. 30, 2012 15:24:27

Spectral
От:
Зарегистрирован: 2010-07-13
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Python + Fortran

geofisik
Продолжу тему через 4 года ). Проблема в следующем. Всё делаю, как в http://www.scipy.org/F2PY_Windows, появляется файл с расширением .pyd, программа на Питоне его видит, но… функция в этом модуле выполняться не желает. Может кто решил эту проблему для Windows?
Я вам настоятельно советую не делать это на Windows и научиться использовать Unix (Fedora OS или Ubuntu, что угодно) для таких задач, как у вас. Понимаю, что вам тяжело будет привыкать к новой системе, но считаю нужным написать, что вероятность получить работающую програму на Unix выше, чем на Windows



Офлайн

#9 Янв. 30, 2012 15:30:12

geofisik
От:
Зарегистрирован: 2011-01-06
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Fortran

В Ubuntu делал подобное, но в данном случае нужно сделать под “окна”



Офлайн

#10 Янв. 30, 2012 18:33:06

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python + Fortran

Spectral
Я вам настоятельно советую не делать это на Windows
Много раз связывал разные системы, никаких особых проблем нет. И на виндах нормально и под unix. В этом деле надо быть попроще, F2PY и swig упрощают дело в огромных проектах. А для интерфейсов просто посмотрите как сделать динамическую библиотеку и грузите ее при помощи ctype.

Под виндами довольно трудно фортрану объяснить чтобы экспортировал функции (точнее трудно сделать чтобы код не менялся для intel fortran g95 watcom,и прочие прочие….компиляторы фортрана) поэтому проще слинковать с сишным переходником и цеплять уже его.



Отредактировано (Янв. 30, 2012 18:47:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version