在W10-64位的python 3.5.5(jupyter)中编译fortran代码时出错

在W10-64位的python 3.5.5(jupyter)中编译fortran代码时出错,python,fortran,f2py,Python,Fortran,F2py,无法使用f2py在W10 64上编译fortran代码,尽管尝试了几种方法 环境: Windows 10,64位 已安装mingw-64位 Python 3.5.5::Anaconda自定义(64位) 将mingw\bin添加到路径中, 也 C\u INCLUDE\u PATH=C:\Program Files\mingw-w64\x86\u 64-8.1.0-posix-seh-rt\u v6-rev0\mingw64\INCLUDE 在jupyter笔记本中,我添加了2个代码块:

无法使用f2py在W10 64上编译fortran代码,尽管尝试了几种方法

环境:

  • Windows 10,64位
  • 已安装mingw-64位
  • Python 3.5.5::Anaconda自定义(64位)
将mingw\bin添加到路径中, 也
C\u INCLUDE\u PATH=C:\Program Files\mingw-w64\x86\u 64-8.1.0-posix-seh-rt\u v6-rev0\mingw64\INCLUDE

在jupyter笔记本中,我添加了2个代码块:

    %%writefile add.f90
C
      SUBROUTINE ZADD(A,B,C,N)
C
      DOUBLE COMPLEX A(*)
      DOUBLE COMPLEX B(*)
      DOUBLE COMPLEX C(*)
      INTEGER N
      DO 20 J = 1, N
         C(J) = A(J)+B(J)
 20   CONTINUE
      END
!python“c:\Users\Laszlo\Anaconda3\Scripts\f2py.py”-m add add.f90-c

错误:

运行build
运行config\u cc
统一配置cc,config,build\u clib,build\u ext,build命令--编译器选项运行config\u fc
统一配置fc,config,build\u clib,build\u ext,build命令--fcompiler选项运行build\u src
build\u src
生成扩展“add”源代码
f2py选项:[]
f2py:>C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5\addmodule.C
创建C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5
读取fortran代码…
读取文件'add.f90'(格式:fix)
后处理…
块:添加
块:zadd
后处理(第2阶段)…构建模块…
构建模块“添加”…
构造包装函数“zadd”…
getarrdims:警告:假定形状数组,使用0而不是“”
getarrdims:警告:假定形状数组,使用0而不是“”
getarrdims:警告:假定形状数组,使用0而不是“*”
zadd(a,b,c,n)
将C/API模块“添加”写入文件“C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5\addmodule.C”
将“C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5\fortranobject.C”添加到源中。
添加“C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5”以包括目录。
复制C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\f2py\src\fortranobject.C->C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5
复制C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\f2py\src\fortranobject.h->C:\Users\Laszlo\AppData\Local\Temp\tmp5uof322x\src.win-amd64-3.5
编译:编译npy pkg配置文件
运行编译文本
查找python35.dll
回溯(最后一次调用):
文件“c:\Users\Laszlo\Anaconda3\Scripts\f2py.py”,第28行,在
main()中
文件“c:\Users\Laszlo\Anaconda3\lib\site packages\numpy\f2py\f2py.py”,第648行,在主
运行编译()中
文件“c:\Users\Laszlo\Anaconda3\lib\site packages\numpy\f2py\f2e.py”,第633行,在运行编译
设置中(ext\u modules=[ext])
文件“C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\core.py”,第166行,在安装程序
中返回旧的安装程序(**new\u attr)
文件“C:\Users\Laszlo\Anaconda3\lib\distutils\core.py”,第148行,在安装程序
dist.运行命令()
文件“C:\Users\Laszlo\Anaconda3\lib\distutils\distutils\distutils\distutils\distutils.py”,第955行,在run_命令中
self.run_命令(cmd)
文件“C:\Users\Laszlo\Anaconda3\lib\distutils\dist.py”,第974行,在run_命令中
cmd_obj.run()
文件“C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\command\build.py”,第47行,在run
文件中“C:\Users\Laszlo\Anaconda3\lib\distutils\command\build.py”,第135行,运行中
self.run\u命令(cmd\u名称)
文件“C:\Users\Laszlo\Anaconda3\lib\distutils\cmd.py”,第313行,运行中
self.distribution.run\u命令(command)
文件“C:\Users\Laszlo\Anaconda3\ob\distutils\dist.py”,第974行,运行中
文件“C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\command\build\u ext.py”,第117行,运行中
force=self.force)
文件“C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\ccompiler.py”,第596行,在新编译器
中C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\mingw32ccompiler.py”,第96行,在init
msvcr\u success=build\u msvcr\u lib lib库()
文件“C:\Users\Laszlo\Anaconda3\lib\site packages\numpy\distutils\mingw32ccompiler.py”,第329行,在build\u msvcr\u库
中,如果int(msvcr\u name.lstrip('msvcr'))<80:
AttributeError:“非类型”对象没有属性“lstrip”

如果我添加了
--fcompiler=gfortran
我得到了
未知供应商:“gfortran”
错误

也尝试过这种方式:

import numpy.f2py as f2py
source="""
subroutine foo
  print*, "Hello world!"
end subroutine
"""
f2py.compile(source, extension = 'f90', modulename='hello', extra_args = '--fcompiler=g95')
我在f2py\uuuu init\uuuuu.py中添加了一些额外的打印命令,并对其进行了更改:

#status, output = exec_command(c)
status = os.system(c)
否则,它将删除可执行文件中的所有反斜杠(distutils问题)

C:\Users\Laszlo\AppData\Local\Temp\tmphcpqwx21f90

子例程foo
print*,“Hello world!”
结束子例程

C:\Users\Laszlo\Anaconda3\python.exe-C“导入numpy.f2py作为f2e;f2py2e.main()”-C-m Hello C:\Users\Laszlo\AppData\Local\Temp\tmphcpqwx21f90--=g95
.1

---------------------------------------------------------------------------
导入错误回溯(最近一次调用最后一次)
在()
--->1导入hello
2导入hello.foo()

导入错误:没有名为“hello”的模块

现在我不知道如何让它在我的W10/巨蟒上工作。 请帮我解决这个问题! 提前谢谢你!
L.

之前尝试过。不幸的是,结果是相同的。在
numpy\distutils\mingw32compiler.py中,from numpy.distutils.misc_util导入(msvc_runtime_library,get_build_architecture)
似乎是问题所在,因为
msvcr_name=msvc_runtime_library()
没有初始化它。msvc_runttime_library()结果无,因为我的sys.version是“3.5.5 | Anaconda custom(64位)|(默认值,2018年4月7日,04:52:34)[MSC v.1900 64位(AMD64)],其中1900未在function.upgraded numpy中列出。现在f2py.compile永远运行,没有错误。安装的fortranmagic可以工作。但当我使用-vvv运行它时,高级登录
import hello
hello.foo()