无法在python中导入.so文件

2024-05-26 21:51:36 发布

您现在位置:Python中文网/ 问答频道 /正文

注意,这些都是在GoogleColab中运行的

.so扩展模块是用C++/Cuda编写的,并使用Ninja构建的

我遇到的问题是理解为什么我无法导入这个.so扩展模块

正如我所说,我正在使用Google Colab。令人难以置信的困惑是,当我cd进入包含.so扩展模块_ext的目录时,我能够完美地导入它,并且所有预期的功能都可以工作。但是,当我试图通过一系列导入从.py文件导入它时

File x imports y which imports z which imports said .so extension module.

它说找不到模块。我已尝试将文件添加到sys.path,但没有任何效果

下面是文件夹结构和colab代码/错误输出

文件文件夹结构

├── CenterNet
│   ├── data
│   ├── exp
│   ├── experiments
│   ├── images
│   ├── LICENSE
│   ├── models
│   ├── NOTICE
│   ├── readme
│   ├── README.md
│   ├── requirements.txt
│   └── src
│       ├── demo.py
│       ├── _init_paths.py
│       ├── lib
│       │   ├── datasets
│       │   ├── detectors
│       │   ├── external
│       │   ├── logger.py
│       │   ├── models
│       │   │   ├── data_parallel.py
│       │   │   ├── decode.py
│       │   │   ├── losses.py
│       │   │   ├── model.py
│       │   │   ├── networks
│       │   │   │   ├── DCNv2
│       │   │   │   │   ├── build
│       │   │   │   │   │   ├── lib.linux-x86_64-3.6
│       │   │   │   │   │   │   └── _ext.cpython-36m-x86_64-linux-gnu.so
│       │   │   │   │   │   └── temp.linux-x86_64-3.6
│       │   │   │   │   ├── DCNv2.egg-info
│       │   │   │   │   ├── dcn_v2_onnx.py
│       │   │   │   │   ├── dcn_v2.py
│       │   │   │   │   ├── _ext.cpython-36m-x86_64-linux-gnu.so # <-- The file I want to import.
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── LICENSE
│       │   │   │   │   ├── make.sh
│       │   │   │   │   ├── README.md
│       │   │   │   │   ├── setup.py
│       │   │   │   │   ├── src
│       │   │   │   │   │   ├── cpu
│       │   │   │   │   │   ├── cuda
│       │   │   │   │   │   ├── dcn_v2.h
│       │   │   │   │   │   └── vision.cpp
│       │   │   │   │   ├── testcpu.py
│       │   │   │   │   └── testcuda.py
│       │   │   │   ├── dlav0.py
│       │   │   │   ├── large_hourglass.py
│       │   │   │   ├── msra_resnet.py
│       │   │   │   ├── pose_dla_dcn.py
│       │   │   │   ├── __pycache__
│       │   │   │   └── resnet_dcn.py
│       │   │   ├── __pycache__
│       │   │   │   ├── decode.cpython-36.pyc
│       │   │   │   ├── model.cpython-36.pyc
│       │   │   │   └── utils.cpython-36.pyc
│       │   │   ├── scatter_gather.py
│       │   │   └── utils.py
│       │   ├── opts.py
│       │   ├── __pycache__
│       │   ├── trains
│       │   └── utils
│       ├── main.py
│       ├── test.py
│       └── tools

Colab代码

    %cd $root_dir
    %cd CenterNet/src/lib/models/networks/DCNv2
    
    !ls
    
    import _ext 
    import sys
    
    print('I exist at - ', _ext.__file__, ' !')
    sys.path.insert(0, _ext.__file__)
    
    %cd $root_dir/CenterNet/src
    
    !python demo.py ctdet --demo /content/CenterNet/images/19064748793_bb942deea1_k.jpg --load_model ../models/ddd_3dop.pth

输出

/content
/content/CenterNet/src/lib/models/networks/DCNv2

build       _ext.cpython-36m-x86_64-linux-gnu.so  __pycache__  testcpu.py
DCNv2.egg-info  __init__.py               README.md    testcuda.py
dcn_v2_onnx.py  LICENSE                   setup.py
dcn_v2.py   make.sh                   src

I exist at -  /content/CenterNet/src/lib/models/networks/DCNv2/_ext.cpython-36m-x86_64-linux-gnu.so !
/content/CenterNet/src

['/content/CenterNet/src/lib/models/networks/DCNv2/_ext.cpython-36m-x86_64-linux-gnu.so', '/content/CenterNet/src/lib', '/content/CenterNet/src', '/env/python', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/root/.local/lib/python3.6/site-packages', '/root/.local/lib/python3.6/site-packages/pycocotools-2.0-py3.6-linux-x86_64.egg', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

Traceback (most recent call last):
  File "demo.py", line 16, in <module>
    from detectors.detector_factory import detector_factory
  File "/content/CenterNet/src/lib/detectors/detector_factory.py", line 5, in <module>
    from .exdet import ExdetDetector
  File "/content/CenterNet/src/lib/detectors/exdet.py", line 21, in <module>
    from .base_detector import BaseDetector
  File "/content/CenterNet/src/lib/detectors/base_detector.py", line 11, in <module>
    from models.model import create_model, load_model
  File "/content/CenterNet/src/lib/models/model.py", line 12, in <module>
    from .networks.pose_dla_dcn import get_pose_net as get_dla_dcn
  File "/content/CenterNet/src/lib/models/networks/pose_dla_dcn.py", line 16, in <module>
    from .DCNv2.dcn_v2 import DCN
  File "/content/CenterNet/src/lib/models/networks/DCNv2/dcn_v2.py", line 17, in <module>
    import _ext as _backend
ModuleNotFoundError: No module named '_ext'

我不知道为什么当我将cd模块导入到它所包含的目录中时,我能够导入_ext模块,但无法导入其他模块;即使添加到sys.path!任何帮助都将不胜感激


Tags: pyimportsrcsomodelslinuxlibcontent

热门问题