为了账号安全,请及时绑定邮箱和手机立即绑定

f2py:公开“二手”模块中的参数

f2py:公开“二手”模块中的参数

繁花如伊 2021-03-29 12:08:54
我以为这个问题已经在某个地方解决了,但是我花了过多的时间寻找答案,包括稍微深入了一下源代码。我试图将问题放在第一段。其余部分显示了该问题的基本示例。我正在尝试编译一个模块,该模块包含USE指向另一个更通用的模块的语句。我希望将使用的模块分开放置,以便可以将其作为一组常规设置用于多个“软件包”中。当我使用f2py编译这两个模块时,一切都按从fortran方面所宣传的那样工作,但是从python方面USE看来却被忽略了。如果我允许f2py生成签名文件,该文件将包含一条USE适当的语句,但是如果我完成了编译并从结果库中导入,则在包含use语句的模块中,来自二手模块的参数将不可用。以下是说明情况的两个模块:MODULE test    INTEGER, PARAMETER :: a = 1END MODULE testMODULE test2    USE test    INTEGER, PARAMETER :: b = 2END MODULE test2为了显示中间步骤,我跑了f2py -h test.pyf test.f90 test2.f90。生成以下签名文件;请注意,“ test2”模块包含“使用测试”:!    -*- f90 -*-! Note: the context of this file is case sensitive.python module test ! in    interface  ! in :test        module test ! in :test:test.f90            integer, parameter,optional :: a=1        end module test        module test2 ! in :test:test2.f90            use test            integer, parameter,optional :: b=2        end module test2    end interfaceend python module test! This file was auto-generated with f2py (version:2).! See http://cens.ioc.ee/projects/f2py2e/如果现在使用进行编译,f2py --fcompiler=gfortran -c test.pyf test.f90 test2.f90我将获得test.so(与f2py --fcompiler=gfortran -m test -c test.f90 test2.f90不首先创建签名文件而运行一样)。在python中从该库中导入会暴露test.test.a和test.test2.b,但不会暴露test.test2.a,如下所示:In [1]: import testIn [2]: print test.test.a1In [3]: print test.test2.b2In [4]: print test.test2.a---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)/users/solbrig/svn_checkouts/inversion/satmet/branches/solbrig/rootpath/data/users/GeoIPS/src/test/<ipython-input-4-bffcf464e408> in <module>() ----> 1 print test.test2.aAttributeError: a只是为了说明b从fortran的角度在test2中正确定义的代码,以下代码使用test2并打印b和b:SUBROUTINE run_test()    USE test2    IMPLICIT NONE    print *, "a = ", a    print *, "b = ", bEND SUBROUTINE run_test在使用“ f2py -m run_test -c test.f90 test2.f90 run_test.f90”进行编译并获得run_test.so之后,可以将runtest导入python并按预期工作:
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号