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

Numpy 在Windows上使用f2py构建64位Python扩展,numpy,mingw,f2py,python-extensions,mingw-w64,Numpy,Mingw,F2py,Python Extensions,Mingw W64,我正在尝试使用Numpy的f2py.py脚本从Fortran源代码构建Python扩展。我将遵循()中的步骤。我的系统是Windows 7 64位,我主要使用Python 2.7.3[MSC v.1500 64位(AMD64)]。我有Numpy MKL 1.7.1,来自 以下是我尝试过的: 选择Fortran编译器。因为我使用的是64位Python,所以需要一个64位Fortran编译器。从开始,我尝试了一些个人构建 打开一个新的cmd.exeshell,编辑我提取GCC编译器的路径,即: 设

我正在尝试使用Numpy的
f2py.py
脚本从Fortran源代码构建Python扩展。我将遵循()中的步骤。我的系统是Windows 7 64位,我主要使用Python 2.7.3[MSC v.1500 64位(AMD64)]。我有Numpy MKL 1.7.1,来自

以下是我尝试过的:

  • 选择Fortran编译器。因为我使用的是64位Python,所以需要一个64位Fortran编译器。从开始,我尝试了一些个人构建
  • 打开一个新的
    cmd.exe
    shell,编辑我提取GCC编译器的路径,即:
    • 设置路径=%PATH%;c:\gnu\mingw64\bin
    • set C\u INCLUDE\u PATH=C:\gnu\mingw64\INCLUDE
  • 使用以下命令尝试
    f2py.py
    build:

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

  • 输出为(消除
    处的噪声线):

    运行构建
    阅读fortran代码。。。
    正在读取文件“foo.f90”(格式:免费)
    后处理。。。
    区块:富
    布洛克:你好
    后处理(第2阶段)。。。
    构建模块。。。
    建筑模块“foo”。。。
    正在构造包装函数“hello”。。。
    你好()
    将C/API模块“foo”写入文件“C:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\foodmodule.C”
    将“c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7\fortranobject.c”添加到源。
    添加“c:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7”以包括目录。
    正在复制C:\Python27\lib\site packages\numpy\f2py\src\fortranobject.C->C:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
    正在复制C:\Python27\lib\site packages\numpy\f2py\src\fortranobject.h->C:\users\mtoews\appdata\local\temp\tmpjr6qop\src.win-amd64-2.7
    build_src:构建npy pkg配置文件
    运行build_ext
    正在查找python27.dll
    构建导入库(arch=AMD64):“C:\Python27\libs\libpython27.a”(来自C:\Windows\system32\Python27.dll)
    构建msvcr库:“C:\Python27\libs\libmsvcr90.a”(来自C:\Windows\winsxs\amd64_microsoft.vc90.crt_1fc8b3b9ae18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll)
    无法生成msvcr库:“未找到msvcr90d.dll”
    自定义W32C编译器
    使用build_ext自定义mingw32c编译器
    定制GNU95F编译器
    找到可执行文件c:\gnu\mingw64\bin\gfortran.exe
    找到可执行文件c:\gnu\mingw64\bin\gfortran.exe
    回溯(最近一次呼叫最后一次):
    文件“C:\Python27\Scripts\f2py.py”,第24行,在
    main()
    get\U库中的文件“C:\Python27\lib\site packages\numpy\distutils\fcompiler\gnu.py”,第331行
    raise NOTEImplementedError(“仅在win64上支持gfortran的MS编译器”)
    NotImplementedError:在win64上,只有gfortran支持MS编译器
    
    请注意,第一次运行时,在
    C:\Python27\libs
    中生成了三个新文件:

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

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

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

    我在尝试使用安装ggplot时遇到类似错误

    pip install -U ggplot
    
    在这里找到了解决方案:

    不过,Anaconda for Windows附带C和Fortran编译器 在64位Windows上编译可能需要通过更改 中的第331行 anaconditainstalldir\Lib\site packages\numpy\distutils\fcompiler\gnu.py 要通过#raise NOTEImplementedError(“仅支持MS编译器 在win64上运行gfortran”)


    这应该在将来的版本中修复,a和


    看起来这项更改并没有进入1.9.x维护分支,而是在主目录树和之后的任何版本中。

    这似乎有效。此外,我还必须将
    -lmsvcr90
    标志删除到f2py。对我来说也是一样,只是我没有直接运行f2py,而是通过numpy distutils在内部调用它。这篇文章帮助了我(请注意删除生成的
    libmsvcr90.a
    文件):
    pip install -U ggplot