在Windows上使用f2py构建64位Python扩展

时间:2013-06-05 00:15:29

标签: numpy mingw f2py python-extensions mingw-w64

我正在尝试使用Numpy的f2py.py脚本从Fortran源构建Python扩展。我正在执行http://www.scipy.org/F2PY_Windowsweb archive)中的步骤。我的系统是Windows 7 64位,我主要使用Python 2.7.3 [MSC v.1500 64位(AMD64)]。我有来自http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

的Numpy-MKL 1.7.1

这是我尝试过的:

  1. 选择Fortran编译器。由于我使用的是64位Python,因此需要64位Fortran编译器。从MinGW-w64开始,我尝试了一些个人版本。
  2. 打开一个新的cmd.exe壳,和编辑路径的地方,我萃取GCC编译器,即:
    • set PATH=%PATH%;c:\gnu\mingw64\bin
    • set C_INCLUDE_PATH=C:\gnu\mingw64\include
  3. 使用此命令尝试f2py.py构建:

    C:\Python27\python.exe C:\Python27\Scripts\f2py.py -c --fcompiler=gnu95 --compiler=mingw32 -lmsvcr90 -m foo foo.f90

  4. 输出为(去除<--snip-->处的噪声线):

    running build
    <--snip-->
    Reading fortran codes...
            Reading file 'foo.f90' (format:free)
    Post-processing...
            Block: foo
                            Block: hello
    Post-processing (stage 2)...
    Building modules...
            Building module "foo"...
                    Constructing wrapper function "hello"...
                      hello()
            Wrote C/API module "foo" to file "c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\foomodule.c"
      adding 'c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\fortranobject.c' to sources.
      adding 'c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7' to include_dirs.
    copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.c -> c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
    copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.h -> c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
    build_src: building npy-pkg config files
    running build_ext
    Looking for python27.dll
    Building import library (arch=AMD64): "C:\Python27\libs\libpython27.a" (from C:\Windows\system32\python27.dll)
    Building msvcr library: "C:\Python27\libs\libmsvcr90.a" (from C:\Windows\winsxs\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll)
    Cannot build msvcr library: "msvcr90d.dll" not found
    customize Mingw32CCompiler
    customize Mingw32CCompiler using build_ext
    customize Gnu95FCompiler
    Found executable c:\gnu\mingw64\bin\gfortran.exe
    Found executable c:\gnu\mingw64\bin\gfortran.exe
    Traceback (most recent call last):
      File "C:\Python27\Scripts\f2py.py", line 24, in <module>
        main()
    <--snip-->
      File "C:\Python27\lib\site-packages\numpy\distutils\fcompiler\gnu.py", line 331, in get_libraries
        raise NotImplementedError("Only MS compiler supported with gfortran on win64")
    NotImplementedError: Only MS compiler supported with gfortran on win64
    

    请注意,第一次运行时,会在C:\Python27\libs中构建三个新文件:

    • libmsvcr90.a
    • libpython27.a
    • python27.def

    我还需要安装其他东西吗?我是否需要为f2py提供其他选项?更一般地说,可以从GNU编译器构建MSVC构建Python的扩展吗?

3 个答案:

答案 0 :(得分:8)

似乎解决方案是只注释掉异常行。请参阅此blog post

答案 1 :(得分:1)

尝试使用

安装ggp​​lot时遇到了类似的错误
pip install -U ggplot

此处找到了解决方案:https://github.com/obspy/obspy/wiki/Installation-via-Anaconda

  但是,

Anaconda for Windows附带了C和Fortran编译器   在64位Windows上进行编译可能需要通过更改来获得一个小补丁   行号331英寸   AnacondaInstallDir \ LIB \站点包\ numpy的\的distutils \ fcompiler \ gnu.py   传递#raise NotImplementedError(“仅支持MS编译器   gfortran在win64“)。

答案 2 :(得分:0)

这应该在以后的版本中修复,discussedchanged

看起来这个更改没有进入1.9.x维护分支,但是在主树和任何版本之后。