[英]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
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
。
與運行腳本相同,但我修改了腳本以包含
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 #########
我不知道如何處理這些信息。
我沒有運行腳本,而是運行了一個運行 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.