添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

服务器里边创建了两个虚拟环境,一个虚拟环境 R4.1.2 中 python 版本是 python3.7,另外一个虚拟环境 scenic 中 python 是  python3.8。

scanpy 需要调用 sklearn 模块,又叫 scikit-learn。之前在 R4.1.2 虚拟环境中安装 scanpy 也发生同样报错,但报错位置是 igraph,已经解决。在 R4.1.2 虚拟环境中可以成功导入 sklearn,但在 scenic 虚拟环境中发生报错,如下:

conda activate scenic
python3.8
import sklearn
# 命令日志
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/hanjiangang/anaconda3/envs/scenic/lib/python3.8/site-packages/sklearn/__init__.py", line 83, in <module>
    from .utils._show_versions import show_versions
  File "/home/hanjiangang/anaconda3/envs/scenic/lib/python3.8/site-packages/sklearn/utils/_show_versions.py", line 12, in <module>
    from ._openmp_helpers import _openmp_parallelism_enabled
# 报错位置 sklearn
ImportError: dlopen: cannot load any more object with static TLS

这个报错很多人都会遇到,一般是模块导入顺序的问题,但非常难以排除到底是哪些个模块的基加载顺序问题,而且有时候是版本问题。

尝试把 R4.1.2 虚拟环境中 sklearn 相关文件复制到 scenic 虚拟环境对应的文件夹下,不出意外没法解决问题。

又尝试了下边的办法,解决问题,但不确定是具体哪一环节解决的问题。

在 R4.1.2 虚拟环境的 python3.7 中导入 sklearn,查看版本和依赖包信息

conda activate R4.1.2
python3.7 
import sklearn
sklearn.show_versions()
# 命令日志
/home/hanjiangang/anaconda3/envs/R4.1.2/lib/python3.7/site-packages/_distutils_hack/__init__.py:30: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
System:
    python: 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21)  [GCC 9.4.0]
executable: /home/hanjiangang/anaconda3/envs/R4.1.2/bin/python3.7
   machine: Linux-2.6.32-504.el6.x86_64-x86_64-with-redhat-6.6-Santiago
Python dependencies:
          pip: 22.1.2
   setuptools: 62.3.3
      sklearn: 1.0.2
        numpy: 1.21.6
        scipy: 1.7.3
       Cython: 0.29.33
       pandas: 1.3.5
   matplotlib: 3.5.3
       joblib: 1.2.0
threadpoolctl: 3.1.0
Built with OpenMP: True

根据输出信息,将 sklearn  和依赖包安装到指定版本

# scikit-learn
conda install -c esri scikit-learn
# 其他依赖包
pip install --upgrade 'setuptools == 62.3.3'
pip install --upgrade 'scipy == 1.7.3'
pip install --upgrade 'numpy ==1.21.6'
pip install --upgrade 'Cython == 0.29.33'
pip install --upgrade 'pandas == 1.3.5'
pip install --upgrade 'matplotlib == 3.5.3'
pip install --upgrade 'joblib == 1.2.0'
pip install --upgrade 'threadpoolctl == 3.1.0'

模块导入顺序,未报错

import scenicplus
import sklearn
import igraph # 后边会调用,但再次加载会出现 TLS 报错,所以需要在前边加载
import sys
import os
import scanpy as sc
老哥scenicplus的流程跑通了吗?我这边macs2 callpeak总是出问题,运行: narrow_peaks_dict = peak_calling(macs_path, bed_paths, os.path.join(work_dir, 'scATAC/consensus_peak_calling/MACS/'), genome_size='hs', n_cpu=8, input_format='BEDPE', shift=73, ext_size=146, ignore_reinit_error=True, keep_dup = 'all', q_value = 0.05, _temp_dir = os.path.join(tmp_dir, 'ray_spill')) return with error (code 127): b'/bin/sh: 1: macs2: not found\n' 但是在bash中运行macs2是OK的 numba 报错 SystemError: initialization of _internal failed without raising an exception javaaaaaaaaa: 感谢 解决了,直接指定就行了 构建绵羊(非常见物种)BSgenome参考基因组 鲜衣怒马: BSgenome可以创建人和病毒融合的参考基因组嘛