与你好世界的f2py

时间:2016-01-18 09:55:39

标签: python python-2.7 numpy f2py

我正在尝试学习如何使用f2py在python中编译fortran代码。我使用Python 2.7.10(通过Python(x,y))和Mingw32作为我的编译器。我试图让它在64位Windows 7中工作,但Python 2.7.10运行在32位。我将C:\MingW\bin\C:\Python27\的相应路径添加到了系统的PATH文件中。

当我尝试编译一个简单的hello.f" Hello,World!"程序,我收到以下错误:

C:\Users\Tim\Desktop>f2py -c -m hello hello.f
running build
running config_cc
unifing config_cc, config, build_clib, build_ext, build commands --compiler options
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
running build_src
build_src
building extension "hello" sources
f2py options: []
f2py:> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7
Reading fortran codes...
    Reading file 'hello.f' (format:fix,strict)
Post-processing...
    Block: hello
            Block: hello
Post-processing (stage 2)...
Building modules...
    Building module "hello"...
    Wrote C/API module "hello" to file "c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c"
  adding 'c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.c' to sources.
  adding 'c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7' to include_dirs.
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.c -> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.h -> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7
build_src: building npy-pkg config files
running build_ext
Cannot build msvcr library: "msvcr90d.dll" not found
customize Mingw32CCompiler
customize Mingw32CCompiler using build_ext
customize GnuFCompiler
Could not locate executable g77
Could not locate executable f77
customize IntelVisualFCompiler
Could not locate executable ifort
Could not locate executable ifl
customize AbsoftFCompiler
Could not locate executable f90
customize CompaqVisualFCompiler
Could not locate executable DF
customize IntelItaniumVisualFCompiler
Could not locate executable efl
customize Gnu95FCompiler
Found executable C:\MinGW\bin\gfortran.exe
Found executable C:\MinGW\bin\gfortran.exe
customize Gnu95FCompiler
customize Gnu95FCompiler using build_ext
building 'hello' extension
compiling C sources
C compiler: gcc -O2 -Wall -Wstrict-prototypes

creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7
compile options: '-DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c'
gcc -O2 -Wall -Wstrict-prototypes -DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c -o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o
Found executable C:\MinGW\bin\gcc.exe
gcc -O2 -Wall -Wstrict-prototypes -DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.c -o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o
compiling Fortran sources
Fortran f77 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -O3 -funroll-loops
Fortran f90 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -fno-second-underscore -O3 -funroll-loops
Fortran fix compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -O3 -funroll-loops
compile options: '-Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c'
gfortran.exe:f77: hello.f
C:\MinGW\bin\gfortran.exe -Wall -g -Wall -g -shared c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\hello.o -Lc:\mingw\lib\gcc\mingw32\4.8.1 -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lgfortran -o .\hello.pyd
C:\Python27\libs/libpython27.a: error adding symbols: File format not recognized
collect2.exe: error: ld returned 1 exit status
error: Command "C:\MinGW\bin\gfortran.exe -Wall -g -Wall -g -shared c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\hello.o -Lc:\mingw\lib\gcc\mingw32\4.8.1 -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lgfortran -o .\hello.pyd" failed with exit status 1

有人可以帮我理清为什么这不是编译并帮助我实现这个目的吗?

1 个答案:

答案 0 :(得分:1)

实际上这似乎是a bug in Python 2.7.10,其中32位libpython27.a包含64位对象。要修复它,要么将python降级到2.7.9,要么将其升级到2.7.11(或者你可以按照this问题的路线,但根据你的经验,这可能很痛苦)。