【问题标题】:snakemake cluster script ImportError snakemake.utilssnakemake 集群脚本 ImportError snakemake.utils
【发布时间】:2019-12-26 20:59:35
【问题描述】:

我有一个奇怪的问题,随机出现和出现,我真的不知道何时以及为什么。
我正在运行这样的蛇形管道:

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 已明确安装。正如我所说,这个问题不断出现。它会停留几个小时,然后出于明显的原因消失。我想这表明环境问题,但我真的无法弄清楚是什么,并且没有想法。我试过了:

  • 不同的 conda 版本
  • 不同的蛇形版本
  • 集群上的不同节点
  • ssh 到它刚刚失败的节点并尝试重现错误

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

【问题讨论】:

  • 在某处添加 which pythonwhich snakemake 可能有助于将问题缩小到 conda/snakemake/cluster。
  • 谢谢,这实际上让我找到了解决方案。看我的回答。

标签: python conda hpc snakemake pbs


【解决方案1】:

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

【讨论】:

  • 我也从两个不同的 python3 版本(3.8.2 和 3.7.3)中得到了这个错误,所以即使你已经检查以确保你使用的是 python3,也要确保它是完全相同的版本!
【解决方案2】:

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

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

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

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

【讨论】:

  • 感谢您的建议。我这样做了,但请注意,我必须首先在每个节点上运行“conda activate”:for node in "${nodes[@]}"; do echo $node; ssh $node "conda activate snakemake-try; python -c \"from snakemake.utils import read_job_properties\""; done。无论如何,没有一个节点抱怨,这是我所期望的。还有其他想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
相关资源
最近更新 更多