簡體   English   中英

Snakemake 無法正確激活 conda 環境

[英]Snakemake doesn't activate conda environment correctly

我在名為myenvname modulename

我的snakemake文件包含一個簡單的規則:

rule checker2:
    output:
        "tata.txt"
    conda:
        "myenvname"
    script:
        "scripts/test2.py"

test2.py的內容如下:

import modulename
with open("tata.txt","w") as _f:
    _f.write(modulename.__version__)

當我使用命令snakemake -j 1 --use-conda --conda-frontend conda運行上面的 snakemake 文件時,我得到ModuleNotFoundError ,這意味着我指定的環境中沒有modulename 但是,當我執行以下操作時:

conda activate myenvname
python workflow/scripts/test2.py

... 一切都很完美。 我不知道是怎么回事。

完整的錯誤粘貼在下面,出於隱私考慮省略了一些信息。

Traceback (most recent call last):
  File "/OMITTED/.snakemake/scripts/tmpheaxuqjn.test2.py", line 13, in <module>
    import cnvpytor as cnv
ModuleNotFoundError: No module named 'MODULENAME'
[Thu Nov 17 18:27:22 2022]
Error in rule checker2:
    jobid: 0
    output: tata.txt
    conda-env: MYENVNAME

RuleException:
CalledProcessError in line 12 of /OMITTED/workflow/snakefile:
Command 'source /apps/qiime2/miniconda3/bin/activate 'MYENVNAME'; set -euo pipefail;  /OMITTED/.conda/envs/snakemake/bin/python3.1 /OMITTED/.snakemake/scripts/tmpheaxuqjn.test2.py' returned non-zero exit status 1.
  File "/OMITTED/workflow/snakefile", line 12, in __rule_checker2
  File "/OMITTED/.conda/envs/snakemake/lib/python3.10/concurrent/futures/thread.py", line 58, in run
Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message
Complete log: /OMITTED/.snakemake/log/2022-11-17T182715.495739.snakemake.log

編輯:腳本中的拼寫錯誤已修復,拼寫錯誤不在我正在運行的腳本中,所以這不是這里的問題。

EDIT2:我從評論中嘗試了兩種不同的嘗試。 所有這三個嘗試都使用相同的 CLI 命令snakemake -j 1 --use-conda --conda-frontend conda

嘗試 1

snakemake 中的規則:

rule checker3:
    output:
        "tata.txt"
    conda:
        "myenvname"
    shell:
        """
        conda env list >> {output}
        conda list >> {output}
        """

在 output 文件中,我有以下內容(我刪除了很多環境和包):

# conda environments:
#
...
myenvname              *  /OMITTED/.conda/envs/myenvname
...
# packages in environment at /OMITTED/.conda/envs/myenvname:
#
# Name                    Version                   Build  Channel
...
modulename                  1.2                       dev_0    <develop>
...

這個嘗試證明了 conda 環境是激活的,並且這個環境有modulename

嘗試 2

與運行腳本相同,但我修改了腳本以包含

import time; time.sleep(30); import modulename

所以我可以在刪除之前獲取可運行的腳本。 該腳本在開頭插入了以下內容:

######## snakemake preamble start (automatically inserted, do not edit) ########
import sys; sys.path.extend(['/OMITTED/.conda/envs/snakemake/lib/python3.10/site-packages', '/OMITTED/MYWORKINGDIRECTORY/workflow/scripts']); import pickle; snakemake = pickle.loads(####a lot of stuff here###); from snakemake.logging import logger; logger.printshellcmds = False; __real_file__ = __file__; __file__ = '/OMITTED/MYWORKINGDIRECTORY/workflow/scripts/test3.py';
######## snakemake preamble end #########

我不知道如何處理這些信息。

嘗試 3

我沒有運行腳本,而是運行了一個運行 python 腳本的 shell 命令。

rule checker4:
    output:
        "tata.txt"
    conda:
        "myenvname"
    shell:
        "python workflow/scripts/test3.py"

它有效(沒有顯示錯誤),當我打開“tata.txt”時,我發現“1.2”是我模塊的版本。

結論

snakemake 實際上激活了適當的環境,但問題出在script部分。 我不知道這是為什么。

這里有一個類似的問題,所以這是一個重復的問題。

問題得到解答。 Snakemake 實際上激活了正確的環境,但是運行 python 腳本與該script沖突。 我不知道這是snakemake (版本為6.14.0 )中的錯誤還是故意的。 我已經通過shell命令和python workflow/scripts/MyScript.py運行 python 腳本解決了這個問題——這有點問題,因為我必須包含一個通常由 snakemake object 解決的 CLI 包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM