在nextflow脚本块中导入自己的python模块



我在bin/目录中创建了一个名为utilities.py的python脚本:

#!/usr/bin/env python3
import numpy as np
import pandas as pd
from datetime import datetime
import io 

def print_info(in_df, fname_base):
buffer = io.StringIO()
df = in_df.copy()
df.info(buf=buffer)
s = buffer.getvalue()
with open(fname_base+"_info.txt", "w", encoding="utf-8") as f:  
f.write(s)
def print_desc(in_df, fname_base):
df = in_df.copy()
desc = df.describe()
desc.to_csv(fname_base+"_desc.tsv", sep = 't')

def print_data(in_df, fname_base):
df = in_df.copy()
print_info(df, fname_base)
print_desc(df, fname_base)
df.to_csv(fname_base+".tsv", sep = 't')

并使其能够用CCD_ 3执行。我想在工作流中的各个流程中的几个脚本块中使用这些函数。当前,当我尝试从实用程序模块导入函数时:

#!/bin/bash nextflow 
process transform_data {
input:
path(data)
output:
path("out.tsv"), emit: out_data
script:
"""
#!/usr/bin/env python3
import pandas as pd
import io
from utilities import print_info
"""
}

我得到以下错误:

Traceback (most recent call last):
File ".command.sh", line 4, in <module>
from utilities import print_info
ModuleNotFoundError: No module named 'utilities'

可以用这种方式导入自己的模块吗?

您正在使用哪个版本的Nextflow?我测试了v22.04.5和以下作品:

我的设置有点不同,我没有指定#!/usr/bin/env python3,而是直接调用了一个包含from utilities import print_info的python脚本(test.py),它运行得很好。

script:
"""
test.py
"""

请注意,以下内容不起作用:from .utilities import print_info。因此,您可以使用Nextflow导入自定义Python模块。

最新更新