在f2py中使用外部数据文件

时间:2016-06-17 18:57:52

标签: python f2py

我有一些旧的fortran代码,我正在使用f2py包装并导入到python。 fortran代码依赖于驻留在同一目录中的数据文件。如果我在该目录中启动python,一切正常。

但是,如果我从其他地方导入此模块,它会在本地查找文件,显然无法找到它们。

有没有办法告诉模块执行fortran代码的位置(或其他巧妙的方法)?

1 个答案:

答案 0 :(得分:0)

我对f2py了解不多,但看起来有命令行版本和模块版本。

要使用命令行选项,我会看到两个选项:

  1. 修改fortran以找到路径
  2. 使用包装器
  3. 包装命令行

    对于包装器,您可以使用执行以下操作的bash脚本:

    #!/bin/sh
    dir=$(dirname $0)       # gets relative path
    dir=$(readlink -f $dir) # to get absolute
    cd $dir
    # Now call p2py
    

    如果您使用模块版本,则可以在运行pythonized fortran源之前使用os.chdir()更改目录:

    fortran_file = "foo.f"
    dir = os.path.dirname(os.path.abspath(fortran_file))
    os.chdir(dir)
    # Now run p2py against fortran_file
    

    我能想到的唯一其他选择是看你是否可以将路径注入fortran代码。也许您可以阅读代码,更改内存中源代码中的路径,然后对动态修改的代码使用f2py.compile()