f2py: Python 不导入模块

f2py: Python does not import module

我想使用 f2py.

将 Fortran 模块导入 python

我用命令f2py -c primes.f90 -m primes成功编译了模块。

此命令生成 primes.cp39-win_amd64.pyd 和一个目录:

primes
--.lib
----libprimes.E32HNUCUWH2OOA5WTEOFP7BSXKY3WIRC.gfortran-win_amd64.dll

当我尝试按照 hereimport primes 的描述导入模块时,它导入了一些东西,但没有导入模块。所以例如我看不到文档字符串或访问函数。

我怀疑 Python 试图导入文件夹 'primes' 而不是模块本身。

我该如何解决这个问题?

谢谢。

编辑:

我已经使用 here 中的示例来演示问题:

我的 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``. [...]"

实际return:

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 的几个版本,部分问题似乎是我正在使用系统解释器编译模块和 运行 python 代码的 conda。

对于所有其他组合,引发以下异常:

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 的 this github 问题的解决方案对我有用。

而不是 f2py -c primes.f90 -m primes 我使用 python -m numpy.f2py -c --fcompiler=gnu95 --compiler=mingw32 primes.f90 -m primes

我不知道为什么这个命令有效而另一个无效。