【问题标题】:nextflow does not find all my python modulesnextflow 没有找到我所有的 python 模块
【发布时间】:2021-10-18 02:31:49
【问题描述】:

我正在尝试制作一个使用 python 脚本的 Nextflow 脚本。我的 python 脚本导入了许多模块,但在 Nextflow python3 中没有找到 7 个模块中的两个(cv2 和 matplotlib)并崩溃。如果我直接从 bash 调用脚本,它工作正常。我想避免创建一个 docker 镜像来运行这个脚本。

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 遇到问题的人...确保你的 shebang 是正确的。我正在使用

    #!/usr/bin/python 

而不是

    #!/usr/bin/python3

由于我所有的软件包都是用 pip3 安装的,而且我只使用 python3,所以你需要正确的 shebang。

【问题讨论】:

  • 在您的进程块和常规 bash shell 中执行 which python,以确保您在两者中使用相同的 python 安装

标签: python-3.x import nextflow


【解决方案1】:

最好避免在流程声明中使用绝对路径。这部分文档值得花一些时间阅读:https://www.nextflow.io/docs/latest/sharing.html#manage-dependencies,尤其是关于如何管理第三方脚本的小节:

任何不需要编译的第三方脚本(Bash、 Python、Perl 等)可以包含在管道项目存储库中, 以便它们与它一起分发。

授予这些文件的执行权限并将它们复制到一个 在项目存储库的根目录中名为 bin/ 的文件夹。 Nextflow 会自动将此文件夹添加到 PATH 环境中 变量,并且脚本将自动在您的 管道,无需指定调用它们的绝对路径。

那么问题是如何管理你的 Python 依赖项。您提到 Docker 不是一种选择。 Conda 也不是一个选项吗? 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

另请参阅best practices 以了解如何使用 Conda。

【讨论】:

  • 感谢您提供的链接,我将阅读。我认为我的问题是我正在使用 sudo 而不是我自己运行 nextflow 脚本。我用 sudo pip3 安装了其他模块,它工作正常。不过,这是一个粗略的解决方案。我需要弄清楚如何在没有提升权限的情况下获得 nextflow。我已经用谷歌搜索了,但到目前为止还没有运气。
  • @TheCodeNovice 啊,就是这样。你绝对不需要 root 来运行 Nextflow :-) 你只需要安装 curl -s https://get.nextflow.io | bash (作为你自己),假设你有 Java 8 或更高版本。然后只需将可执行文件移动到 $PATH 中的某个位置。此外,与其全局安装 Python 模块,不如使用虚拟环境:python -mvenv myenv,激活它,然后pip install 你的部门。
  • 我试过了,但我收到了.nextflow/history.lock (Permission denied)。你以前见过吗?
  • @TheCodeNovice 权限被拒绝...您要从哪里运行 Nextflow 可执行文件?测试命令是否运行正常:./nextflow run hello?
  • 这行得通,因为我第一次以 root 身份运行它创建了所有这些我不拥有的基础设施,因此阻止了一切。把它全部吹走就成功了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多