我想用f2py
将Fortran模块导入python。
我用f2py -c primes.f90 -m primes
命令成功编译了这个模块。
生成primes.cp39-win_amd64.pyd
和目录:
primes
--.lib
----libprimes.E32HNUCUWH2OOA5WTEOFP7BSXKY3WIRC.gfortran-win_amd64.dll
当我试图用import primes
导入这里所描述的模块时,它会导入一些东西,但不是模块。例如,我不能看到文档字符串或访问函数。
我怀疑Python试图导入'primes'文件夹,而不是模块本身。
我该如何解决这个问题?
谢谢。编辑:
我用下面的例子来演示这个问题:
显示问题的Python代码:
import primes
print(primes)
print(primes.__doc__) # should return "This module 'primes' is auto-generated with f2py (version:2). Functions: [...]"
print(type(primes)) # as @VladimirF mentioned should return fortran
print(primes.logical_to_integer.__doc__) # should return "prime_numbers = logical_to_integer(is_prime,num_primes,[n]) Wrapper for ``logical_to_integer``. [...]"
实际回报率:
Traceback (most recent call last):
File "xxx", line 6, in <module>
print(primes.logical_to_integer.__doc__)
AttributeError: module 'primes' has no attribute 'logical_to_integer'
<module 'primes' (namespace)>
None
<class 'module'>
编辑1
我已经按照@roygvib的建议做了。我尝试了几个版本的python和conda,部分问题似乎是我使用系统解释器来编译模块和conda来运行python代码。
对于所有其他组合将引发以下异常:
ImportError: DLL load failed while importing primes: Das angegebene Modul wurde nicht gefunden.
可译为:
ImportError: DLL load failed while importing primes: The given Module was not found.
所以实际的错误是在给定的组合中没有产生错误。
@zlamere从这个github问题的解决方案为我工作。
我用python -m numpy.f2py -c --fcompiler=gnu95 --compiler=mingw32 primes.f90 -m primes
代替f2py -c primes.f90 -m primes
我不知道为什么这个命令有效而另一个不行。