使用 Python 运行英特尔 Fortran 二进制文件
Posted
技术标签:
【中文标题】使用 Python 运行英特尔 Fortran 二进制文件【英文标题】:Run Intel Fortran binary with Python 【发布时间】:2016-01-13 07:50:09 【问题描述】:我正在尝试从 Mac 上的 Python 脚本中运行 Fortran 二进制文件。在命令行中,Fortran 二进制文件可以正常工作,但是当我在 Python 中使用 os.system
或 subprocess.open
运行它时,会出现以下错误:
dyld: Library not loaded: libimf.dylib
Referenced from: /Path/To/Binary
Reason: image not found
Fortran 二进制文件是使用 Intel Fortran 构建的。知道这里出了什么问题吗?
编辑:
我在 ~/.bash_profile 中设置了这些环境变量,但没有帮助:
export LD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2016.0.083/mac/compiler/lib"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/compilers_and_libraries_2016.1.111/mac/compiler/lib"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/compilers_and_libraries/mac/lib"
export DYLD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2016.0.083/mac/compiler/lib"
export DYLD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/compilers_and_libraries_2016.1.111/mac/compiler/lib"
export DYLD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/compilers_and_libraries/mac/lib"
我正在我的 Mac 上从终端运行 python 脚本。我尝试从 Python 打印
print os.environ['LD_LIBRARY_PATH']
print os.environ['DYLD_LIBRARY_PATH']
两者都给出以下错误:
KeyError: 'DYLD_LIBRARY_PATH'
编辑:
我尝试在我的 Python 代码中使用 os.system
运行另一个二进制文件,效果很好。
【问题讨论】:
可能是LD_LIBRARY_PATH问题,检查一下你的命令行和子进程中是否设置了这个。 你是直接从你的 bash shell 运行 python 吗?您应该使用详细信息而不是在 cmets btw 中编辑问题 您应该使用 os.environ 从 python 脚本中检查您的环境 以任何方式运行 fotran 二进制文件(可执行文件)与运行另一种二进制文件有什么不同吗? 【参考方案1】:我预计问题是因为 Python 的 os.environ
字典中没有 'DYLD_LIBRARY_PATH'
键; DYLD_LIBRARY_PATH
的配置文件设置看起来不错,但 Python 没有收到它。
在我的优胜美地系统上,如果我使用英特尔提供的 compilervars.csh
脚本来设置 DYLD_LIBRARY_PATH
(导致值为 /opt/intel/compilers_and_libraries_2016.1.111/mac/compiler/lib:...
),那么以下操作对我来说成功
$ cat test.f90 && ifort test.f90 && python -c "import os; os.system('./a.out');"
print *, 'Hello World!'
end
Hello World!
(在 bash 中,您可能会使用 compilervars.sh
脚本来代替。)
【讨论】:
【参考方案2】:问题可能在于 Mac El Capitan 中内置的新系统完整性保护 (SIP)。基本上,当您运行受保护的进程时,例如 python 脚本,DYLD_LIBRARY_PATH 不会传递给脚本。
最好的解决方案是以避免使用动态库的方式重新编译您的 Fortran 二进制文件。或者,您可以通过禁用 SIP(可能不推荐)来防止此问题,如下所述:
Macworld Article
您可以通过搜索“DYLD_LIBRARY_PATH SIP”找到有关此问题的更多信息
【讨论】:
以上是关于使用 Python 运行英特尔 Fortran 二进制文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Notepad++ 和 Intel Fortran 编译器编译文件
具有140多个模块的英特尔Fortran 11.1长编译时间
英特尔 oneAPI 与旧版 Parallel Studio XE 的优势(Fortran 用户)
mpifort -DMPI 编译错误:派生类型“mpi_status”用作实际参数。适用于英特尔 Fortran,但不适用于 GNU Fortran