snakemake 集群脚本 ImportError snakemake.utils

snakemake cluster script ImportError snakemake.utils

我有一个 st运行ge 问题来来去去 运行domly,我真的不知道什么时候和为什么。
我正在 运行 构建一个像这样的 snakemake 管道:

conda activate $myEnv    
snakemake -s $snakefile --configfile test.conf.yml --cluster "python $qsub_script" --latency-wait 60 --use-conda -p -j 10 --jobscript "$job_script"

我在 conda 环境中安装了 snakemake 5.9.1(也尝试降级到 5.5.4)。
如果我只是 运行 这个命令,这工作正常,但是当我将这个命令 qsub 到我正在使用的 PBS 集群时,我得到一个错误。我的 qsub 脚本如下所示:

#PBS stuff...

source ~/.bashrc
hostname
conda activate PGC_de_novo

cd $workDir
snakefile="..."
qsub_script="pbs_qsub_snakemake_wrapper.py"
job_script="..."
snakemake -s $snakefile --configfile test.conf.yml --cluster "python $qsub_script" --latency-wait 60 --use-conda -p -j 10 --jobscript "$job_script" >out 2>err

我收到的错误信息是:

...
Traceback (most recent call last):
  File "/path/to/pbs_qsub_snakemake_wrapper.py", line 6, in <module>
    from snakemake.utils import read_job_properties
ImportError: No module named snakemake.utils
Error submitting jobscript (exit code 1):
...

所以看起来由于某种原因我的集群脚本没有找到 snakemake,尽管 snakemake 显然已经安装了。正如我所说,这个问题一直来来去去。它会停留几个小时,然后出于明显的原因离开。我猜这表示环境问题,但我真的想不通是什么,而且 运行 没思路。我试过:

但什么也没有。任何想法在哪里看?谢谢!

可能是某些集群节点找不到 snakemake 程序包的路径,因此当向这些节点提交作业时,您会收到错误消息。

我不知道 if/how 会发生这种情况,但如果是这种情况,您可以通过以下内容找到受控节点:

for node in pbsnodes
do
    echo $node
    ssh $node 'python -c "from snakemake.utils import read_job_properties"'
done

for nodes in pbsnodes 遍历可用节点 - 我现在没有确切的语法,但希望你明白了)。这至少会缩小问题的范围......

按照@Manavalan Gajapathy 的建议,我向 snakefile 和集群脚本添加了 print(sys.version) 命令,并且在这两种情况下都得到了与指定版本不同的 python 版本 (2.7.5)在激活的环境中(3.7.5)。
长话短说 - 由于某种原因,当我在 PBS 作业中激活环境时,环境路径仅在 /usr/bin 之后添加到 $PATH,这导致 /usr/bin/python 正在使用(没有 snakemake 包)。本地激活env时,env路径加到$PATH开头,所以用右边的python.
我仍然不明白这种行为,但至少我可以通过更改#PATH 来解决它。我想这不是一个非常优雅的解决方案,但它对我有用。