我正在尝试制作一个利用python脚本的Nextflow脚本。我的python脚本导入了许多模块,但是在Nextflow中,python3找不到7个模块和崩溃的两个模块(cv2和matplotlib)。如果我直接从bash调用脚本,它可以正常工作。我想避免创建一个码头形象来运行这个脚本。
Error executing process > 'grab_images (1)'
Caused by:
Process `grab_images (1)` terminated with an error exit status (1)
Command executed:
python3 --version
echo 'processing image-1.npy'
python3 /home/hq/cv_proj/k_means2.py image-1.npy
Command exit status:
1
Command output:
Python 3.7.3
processing image-1.npy
Command error:
Traceback (most recent call last):
File "/home/hq/cv_proj/k_means2.py", line 5, in <module>
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
Work dir:
/home/hq/cv_proj/work/7f/b787c62ec420b2b5eb490603ef913f
Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`我认为,在成功加载numpy、sys、re、time等模块时,存在路径问题。我怎么才能修好?
提前感谢
更新
帮助其他可能在nextflow脚本中使用python时遇到问题的人.确保你的声音是正确的。我在用
#!/usr/bin/python 而不是
#!/usr/bin/python3因为我的所有软件包都是用pip3安装的,而且我只使用python3,所以您需要有正确的shebang。
发布于 2021-08-16 14:19:56
最好在流程声明中避免找到脚本的绝对路径。这部分文档值得花一些时间阅读:https://www.nextflow.io/docs/latest/sharing.html#manage-dependencies,特别是关于如何管理第三方脚本的小节:
任何不需要编译的第三方脚本(Bash、Python、Perl等)都可以包含在管道项目存储库中,以便与其一起分发。 授予这些文件执行权限,并将它们复制到项目存储库根目录中名为bin/的文件夹中。Nextflow将自动将此文件夹添加到PATH环境变量中,脚本将在管道中自动访问,而无需指定调用它们的绝对路径。
然后,问题是如何管理Python依赖项。你说过码头不是一种选择。康达也不是一种选择吗?Conda的配置可能类似于:
name: myenv
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- conda-forge::matplotlib-base=3.4.3
- conda-forge::numpy=1.21.2
- conda-forge::opencv=4.5.2然后,如果上面的内容位于一个名为environment.yml的文件中,请使用以下方法创建环境:
conda env create还请参见使用Conda的最佳做法。
https://stackoverflow.com/questions/68796059
复制相似问题