ModuleNotFoundError 在 Snakemake 中使用 conda env 运行 Jupyter Notebook 时

问题描述 投票:0回答:1

我最近尝试在我用 Snakemake 制作的 jupyter notebook 中使用 Scanpy python 包。 Scanpy 安装在我在 Snakemake 的 .yaml 中明确说明的 conda 环境中。 运行作业时:

snakemake --cores 1 results/output.h5ad --use-conda

conda环境加载成功,但是Snakemake没有找到模块报错:

Building DAG of jobs...
Using shell: /bin/bash
Provided cores: 1 (use --cores to define parallelism)
Rules claiming more threads will be scaled down.
Job stats:
job        count    min threads    max threads
-------  -------  -------------  -------------
load_h5        1              1              1
total          1              1              1

Select jobs to execute...

[Fri Feb 24 13:35:29 2023]
rule load_h5:
    input: input/filtered_feature_bc_matrix.h5
    output: results/output.h5ad
    jobid: 0
    reason: Missing output files: results/output.h5ad
    resources: tmpdir=/var/folders/w7/zvnr_nqd4f3_2kdw0259s26r0000gq/T

Activating conda environment: .snakemake/conda/8d45bb2abfce310beb1752237b93c097_
Traceback (most recent call last):
  File "/Users/usr/miniconda3/bin/jupyter-nbconvert", line 10, in <module>
    sys.exit(main())
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/jupyter_core/application.py", line 277, in launch_instance
    return super().launch_instance(argv=argv, **kwargs)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/traitlets/config/application.py", line 1041, in launch_instance
    app.start()
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 418, in start
    self.convert_notebooks()
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 592, in convert_notebooks
    self.convert_single_notebook(notebook_filename)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 555, in convert_single_notebook
    output, resources = self.export_single_notebook(
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/nbconvertapp.py", line 483, in export_single_notebook
    output, resources = self.exporter.from_filename(
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 198, in from_filename
    return self.from_file(f, resources=resources, **kw)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 217, in from_file
    return self.from_notebook_node(
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/exporters/notebook.py", line 36, in from_notebook_node
    nb_copy, resources = super().from_notebook_node(nb, resources, **kw)
  File "/Users/bduc1/miniconda3/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 153, in from_notebook_node
    nb_copy, resources = self._preprocess(nb_copy, resources)
  File "/Users/bduc1/miniconda3/lib/python3.9/site-packages/nbconvert/exporters/exporter.py", line 349, in _preprocess
    nbc, resc = preprocessor(nbc, resc)
  File "/Users/bduc1/miniconda3/lib/python3.9/site-packages/nbconvert/preprocessors/base.py", line 48, in __call__
    return self.preprocess(nb, resources)
  File "/Users/bduc1/miniconda3/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 100, in preprocess
    self.preprocess_cell(cell, resources, index)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 121, in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/jupyter_core/utils/__init__.py", line 168, in wrapped
    return loop.run_until_complete(inner)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nest_asyncio.py", line 90, in run_until_complete
    return f.result()
  File "/Users/usr/miniconda3/lib/python3.9/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/Users/usr/miniconda3/lib/python3.9/asyncio/tasks.py", line 256, in __step
    result = coro.send(None)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbclient/client.py", line 1021, in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
  File "/Users/usr/miniconda3/lib/python3.9/site-packages/nbclient/client.py", line 915, in _check_raise_for_error
    raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
# start coding here
import scanpy as sc
------------------

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
/var/folders/w7/zvnr_nqd4f3_2kdw0259s26r0000gq/T/ipykernel_34677/1324428204.py in <cell line: 2>()
      1 # start coding here
----> 2 import scanpy as sc

ModuleNotFoundError: No module named 'scanpy'
ModuleNotFoundError: No module named 'scanpy'

[Fri Feb 24 13:35:35 2023]
Error in rule load_h5:
    jobid: 0
    input: input/filtered_feature_bc_matrix.h5
    output: results/output.h5ad
    conda-env: /Users/bduc1/projects/wspace/project_brm/.snakemake/conda/8d45bb2abfce310beb1752237b93c097_

Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message

为了确保 Snakemake 创建的环境正常工作,我激活了 Snakemake 生成的环境:

conda activate .snakemake/conda/8d45bb2abfce310beb1752237b93c097_

这行得通,所以我检查使用的是哪个 Python:

which python
/Users/usr/projects/wspace/project/.snakemake/conda/8d45bb2abfce310beb1752237b93c097_/bin/python

这看起来不错,所以我尝试使用 Scanpy:

$ python3
Python 3.10.8 | packaged by conda-forge | (main, Nov 22 2022, 08:27:35) [Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import scanpy as sc
>>> test = sc.read_10x_h5("/Users/usr/projects/wspace/project/input/filtered_feature_bc_matrix.h5")
/Users/usr/projects/wspace/project/.snakemake/conda/8d45bb2abfce310beb1752237b93c097_/lib/python3.10/site-packages/anndata/_core/anndata.py:1830: UserWarning: Variable names are not unique. To make them unique, call `.var_names_make_unique`.

所以 Scanpy 在这种环境下工作! 但是不知何故 Snakemake 找不到 Scanpy 模块!

我在 macOS Monterey 12.5.1 上使用 Snakemake 7.22.0.

任何帮助将不胜感激!

Snakefile 规则是:

rule load_h5:
    output:
        "results/output.h5ad"
    input:
        "input/filtered_feature_bc_matrix.h5"
    conda:
        "envs/scanpy_min.yaml"
    notebook:
        "notebooks/01_load_scanpy.py.ipynb"

scanpy_min.yaml 是:

name: scanpy_min
channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - anndata=0.8.0=pyhd8ed1ab_1
  - appdirs=1.4.4=pyh9f0ad1d_0
  - appnope=0.1.3=pyhd8ed1ab_0
  - arpack=3.7.0=hefb7bc6_2
  - asttokens=2.2.1=pyhd8ed1ab_0
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=pyhd8ed1ab_3
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - blosc=1.21.2=hebb52c4_0
  - brotli=1.0.9=hb7f2c08_8
  - brotli-bin=1.0.9=hb7f2c08_8
  - brotlipy=0.7.0=py310h90acd4f_1005
  - bzip2=1.0.8=h0d85af4_4
  - c-ares=1.18.1=h0d85af4_0
  - ca-certificates=2022.12.7=h033912b_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - certifi=2022.12.7=pyhd8ed1ab_0
  - cffi=1.15.1=py310ha78151a_3
  - charset-normalizer=2.1.1=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - comm=0.1.2=pyhd8ed1ab_0
  - contourpy=1.0.7=py310ha23aa8a_0
  - cryptography=39.0.0=py310hdd0c95c_0
  - cycler=0.11.0=pyhd8ed1ab_0
  - debugpy=1.6.6=py310h7a76584_0
  - decorator=5.1.1=pyhd8ed1ab_0
  - entrypoints=0.4=pyhd8ed1ab_0
  - et_xmlfile=1.1.0=pyhd8ed1ab_0
  - executing=1.2.0=pyhd8ed1ab_0
  - fonttools=4.38.0=py310h90acd4f_1
  - freetype=2.12.1=h3f81eb7_1
  - glpk=5.0=h3cb5acd_0
  - gmp=6.2.1=h2e338ed_0
  - h5py=3.8.0=nompi_py310h5555e59_100
  - hdf5=1.12.2=nompi_h48135f9_101
  - icu=70.1=h96cf925_0
  - idna=3.4=pyhd8ed1ab_0
  - igraph=0.10.3=h020c493_0
  - importlib-metadata=6.0.0=pyha770c72_0
  - importlib_metadata=6.0.0=hd8ed1ab_0
  - ipykernel=6.20.2=pyh736e0ef_0
  - ipython=8.8.0=pyhd1c38e8_0
  - jedi=0.18.2=pyhd8ed1ab_0
  - joblib=1.2.0=pyhd8ed1ab_0
  - jpeg=9e=hac89ed1_2
  - jupyter_client=7.4.9=pyhd8ed1ab_0
  - jupyter_core=5.1.5=py310h2ec42d9_0
  - kiwisolver=1.4.4=py310ha23aa8a_1
  - krb5=1.20.1=h049b76e_0
  - lcms2=2.14=h29502cd_1
  - leidenalg=0.9.1=py310h7a76584_0
  - lerc=4.0.0=hb486fe8_0
  - libaec=1.0.6=hf0c8a7f_1
  - libblas=3.9.0=16_osx64_openblas
  - libbrotlicommon=1.0.9=hb7f2c08_8
  - libbrotlidec=1.0.9=hb7f2c08_8
  - libbrotlienc=1.0.9=hb7f2c08_8
  - libcblas=3.9.0=16_osx64_openblas
  - libcurl=7.87.0=h6df9250_0
  - libcxx=14.0.6=hccf4f1f_0
  - libdeflate=1.17=hac1461d_0
  - libedit=3.1.20191231=h0678c8f_2
  - libev=4.33=haf1e3a3_1
  - libffi=3.4.2=h0d85af4_5
  - libgfortran=5.0.0=11_3_0_h97931a8_27
  - libgfortran5=11.3.0=h082f757_27
  - libiconv=1.17=hac89ed1_0
  - libjpeg-turbo=2.1.4=hb7f2c08_0
  - liblapack=3.9.0=16_osx64_openblas
  - libllvm11=11.1.0=h8fb7429_5
  - libnghttp2=1.51.0=he2ab024_0
  - libopenblas=0.3.21=openmp_h429af6e_3
  - libpng=1.6.39=ha978bb4_0
  - libsodium=1.0.18=hbcb3906_1
  - libsqlite=3.40.0=ha978bb4_0
  - libssh2=1.10.0=h47af595_3
  - libtiff=4.5.0=hee9004a_2
  - libwebp-base=1.2.4=h775f41a_0
  - libxcb=1.13=h0d85af4_1004
  - libxml2=2.10.3=hb9e07b5_0
  - libzlib=1.2.13=hfd90126_4
  - llvm-openmp=15.0.7=h61d9ccf_0
  - llvmlite=0.39.1=py310h2bfb868_1
  - lz4-c=1.9.4=hf0c8a7f_0
  - matplotlib-base=3.6.3=py310he725631_0
  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
  - metis=5.1.0=h2e338ed_1006
  - mpfr=4.1.0=h0f52abe_1
  - munkres=1.1.4=pyh9f0ad1d_0
  - natsort=8.2.0=pyhd8ed1ab_0
  - ncurses=6.3=h96cf925_1
  - nest-asyncio=1.5.6=pyhd8ed1ab_0
  - networkx=3.0=pyhd8ed1ab_0
  - numba=0.56.4=py310h62db5c2_0
  - numexpr=2.8.3=py310hecf8f37_1
  - numpy=1.23.5=py310h1b7c290_0
  - openjpeg=2.5.0=h13ac156_2
  - openpyxl=3.1.0=py310h90acd4f_0
  - openssl=3.0.8=hfd90126_0
  - packaging=23.0=pyhd8ed1ab_0
  - pandas=1.5.3=py310hecf8f37_0
  - parso=0.8.3=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pexpect=4.8.0=pyh1a96a4e_2
  - pickleshare=0.7.5=py_1003
  - pillow=9.4.0=py310hab5364c_0
  - pip=22.3.1=pyhd8ed1ab_0
  - platformdirs=2.6.2=pyhd8ed1ab_0
  - pooch=1.6.0=pyhd8ed1ab_0
  - prompt-toolkit=3.0.36=pyha770c72_0
  - psutil=5.9.4=py310h90acd4f_0
  - pthread-stubs=0.4=hc929b4f_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - pure_eval=0.2.2=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pygments=2.14.0=pyhd8ed1ab_0
  - pynndescent=0.5.8=pyh1a96a4e_0
  - pyopenssl=23.0.0=pyhd8ed1ab_0
  - pyparsing=3.0.9=pyhd8ed1ab_0
  - pysocks=1.7.1=pyha2e5f31_6
  - pytables=3.7.0=py310h90ba602_3
  - python=3.10.8=he7542f4_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-igraph=0.10.3=py310hedfac68_0
  - python_abi=3.10=3_cp310
  - pytz=2022.7.1=pyhd8ed1ab_0
  - pyzmq=25.0.0=py310hf615a82_0
  - readline=8.1.2=h3899abd_0
  - requests=2.28.2=pyhd8ed1ab_0
  - scanpy=1.9.1=pyhd8ed1ab_0
  - scikit-learn=1.2.1=py310hcebe997_0
  - scipy=1.10.0=py310h240c617_0
  - seaborn=0.12.2=hd8ed1ab_0
  - seaborn-base=0.12.2=pyhd8ed1ab_0
  - session-info=1.0.0=pyhd8ed1ab_0
  - setuptools=66.1.1=pyhd8ed1ab_0
  - six=1.16.0=pyh6c4a22f_0
  - snappy=1.1.9=h225ccf5_2
  - stack_data=0.6.2=pyhd8ed1ab_0
  - statsmodels=0.13.5=py310h936d966_2
  - stdlib-list=0.8.0=pyhd8ed1ab_0
  - suitesparse=5.10.1=h7aff33d_1
  - tbb=2021.7.0=hb8565cd_1
  - texttable=1.6.7=pyhd8ed1ab_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tk=8.6.12=h5dbffcc_0
  - tornado=6.2=py310h90acd4f_1
  - tqdm=4.64.1=pyhd8ed1ab_0
  - traitlets=5.8.1=pyhd8ed1ab_0
  - typing-extensions=4.4.0=hd8ed1ab_0
  - typing_extensions=4.4.0=pyha770c72_0
  - tzdata=2022g=h191b570_0
  - umap-learn=0.5.3=py310h2ec42d9_0
  - unicodedata2=15.0.0=py310h90acd4f_0
  - urllib3=1.26.14=pyhd8ed1ab_0
  - wcwidth=0.2.6=pyhd8ed1ab_0
  - wheel=0.38.4=pyhd8ed1ab_0
  - xorg-libxau=1.0.9=h35c211d_0
  - xorg-libxdmcp=1.1.3=h35c211d_0
  - xz=5.2.6=h775f41a_0
  - zeromq=4.3.4=he49afe7_1
  - zipp=3.11.0=pyhd8ed1ab_0
  - zstd=1.5.2=hbc0c0cd_6
prefix: /Users/usr/miniconda3/envs/scanpy_min
python jupyter snakemake
1个回答
0
投票

如果有人遇到同样的问题,我找到了答案。 在感兴趣的环境中只有 jupyter_core 和 jupyter_client 是不够的。 我使用 mamba 安装了 jupyter lab,它解决了所有问题!

© www.soinside.com 2019 - 2024. All rights reserved.