我试图将Python与用户子程序结合起来,在分析步骤之间更改模型的物质属性。更新脚本Update_Properties.py使用mpi4py并从UEXTERNALDB子例程调用,如下所示:
STAT=SYSTEM("mpiexec -n 4 python /scratch/Update_Properties.py")但是,我一直收到这样的错误:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/gpfs/gpfs1/apps2/abaqus/2019/SimulationServices/V6R2019x/linux_a64/tools/SMApy/python2.7/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax这是在RHEL HPC上,使用Python3.6.1和Abaqus 2019。这项工作是通过SLURM提交的。使用Python3.6.1代替Abaqus,因为后者缺少mpi4py
我已经检查过了,以确保Python3.6.1在PATH上,并且是第一个出现的Python。我还检查了系统上没有设置的PYTHONPATH和PYTHONHOME。我注意到,当Abaqus运行时,它为PYTHONPATH添加了一堆临时条目。
如果Update_Properties.py是作为作业直接提交的,那么脚本就能正常工作。
到目前为止,我已经尝试过:
SYSTEM()调用中指定Python3.6.1的完整路径unset PYTHONPATH之前立即调用Update_Properties.pyunset PYTHONHOME之前立即调用Update_Properties.pyPYTHONPATH之前将Update_Properties.py设置为包含Python3.6.1安装的目录Update_Properties.py然而,每次我得到上述错误。
我研究了Stack Exchange和其他方面的其他问题,特别是:
External call to Python3.5 doesnot work from within Abaqus python
对于这些类型的问题,所给出的答案通常是围绕着清除或编辑PYTHONPATH和/或PYTHONHOME,而我已经尝试了这一点,但没有效果。
发布于 2019-08-20 18:35:32
最终,我绕过了这个问题,使用pyinstaller将Update_Properties.py脚本转换为独立的可执行文件,然后调用它。
https://stackoverflow.com/questions/57532012
复制相似问题