我正在为SLURM工作负载管理器编写作业提交脚本。首先,我已经加载了anaconda2 / 4.5.12(包括python 2.7)模块。然后,我用Python3.7版本创建了conda环境。我尝试使用“sbatsh”命令提交脚本,但是我收到此错误:
Fatal Python error: initfsencoding: Unable to get the locale encoding
File "/cm/shared/apps/anaconda2/4.5.12/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Current thread 0x00002aaaaaaffc00 (most recent call first):
/cm/local/apps/slurm/var/spool/job04287/slurm_script: line 19: 40032
Aborted python3 taxo.TXT
这是我的脚本文件:
#!/bin/bash
#
#SBATCH --job-name=taxjob
#SBATCH --nodes=4
#SBATCH --tasks-per-node=3
#SBATCH --time=0-03:00:00
#SBATCH --partition=shortq
#SBATCH --mem=24GB
#SBATCH --output=/home/s.e/tax/Ftest-%j.out
#SBATCH --error=/home/s.e/tax/Ftest-%j.err
module load anaconda2/4.5.12
source activate py37
python3 taxo.TXT
问题是"/cm/shared/apps/anaconda2/4.5.12/lib/python2.7/encodings/__init__.py"
如果是python2文件,就像你可以在路径上看到的那样,但它试图将其解释为python3文件。您可以修复此conda问题并使用python2.7运行它或编辑encodings/__init__.py
文件以使其成为python3-interpretable
要了解问题,您可以尝试在python2和python3中手动运行此行:
#Python3
>>> raise Exception,\
File "<stdin>", line 1
raise Exception,\
^
SyntaxError: invalid syntax
但
#Python2.7
>>> raise Exception,\
...
raise Exception,\ "str"
的Python3模拟是raise Exception("str")
。所以你可以改变文件的第123行,但这不是一个好主意,因为可能会出现其他问题,因此最好在配置/执行命令的anaconda中修复一些东西
经过多次尝试,解决方法是将指令“unset PYTHONPATH”添加到我的脚本文件中,如下所示:
....
module load anaconda2/4.5.12
source activate py37
unset PYTHONPATH
python3 taxo.TXT