在 f2py 中使用外部数据文件
Using external data files in f2py
我有一些旧的 Fortran 代码,我正在使用 f2py
包装并导入到 python。 Fortran 代码依赖于位于同一目录中的数据文件。如果我在该目录中启动 python,一切正常。
但是,如果我从其他地方导入这个模块,它会在本地查找文件,显然找不到它们。
有没有办法告诉模块在哪里执行 fortran 代码(或其他聪明的方法)?
不太了解f2py
不过貌似有命令行版和模块版。
要使用命令行选项,我看到两个选项:
- 修改fortran查找路径
- 用包装器包装命令行
对于包装器,您可以使用执行如下操作的 bash 脚本:
#!/bin/sh
dir=$(dirname [=10=]) # gets relative path
dir=$(readlink -f $dir) # to get absolute
cd $dir
# Now call p2py
如果你使用模块版本,你可以使用os.chdir()
在运行你的pythonized fortran源之前改变目录:
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()
。
我有一些旧的 Fortran 代码,我正在使用 f2py
包装并导入到 python。 Fortran 代码依赖于位于同一目录中的数据文件。如果我在该目录中启动 python,一切正常。
但是,如果我从其他地方导入这个模块,它会在本地查找文件,显然找不到它们。
有没有办法告诉模块在哪里执行 fortran 代码(或其他聪明的方法)?
不太了解f2py
不过貌似有命令行版和模块版。
要使用命令行选项,我看到两个选项:
- 修改fortran查找路径
- 用包装器包装命令行
对于包装器,您可以使用执行如下操作的 bash 脚本:
#!/bin/sh
dir=$(dirname [=10=]) # gets relative path
dir=$(readlink -f $dir) # to get absolute
cd $dir
# Now call p2py
如果你使用模块版本,你可以使用os.chdir()
在运行你的pythonized fortran源之前改变目录:
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()
。