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
当我尝试按照 here 和 import 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
我不知道为什么这个命令有效而另一个无效。
我想使用 f2py
.
我用命令f2py -c primes.f90 -m primes
成功编译了模块。
此命令生成 primes.cp39-win_amd64.pyd
和一个目录:
primes
--.lib
----libprimes.E32HNUCUWH2OOA5WTEOFP7BSXKY3WIRC.gfortran-win_amd64.dll
当我尝试按照 here 和 import 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
我不知道为什么这个命令有效而另一个无效。