首页 > 解决方案 > 无法在 python 中导入 .so 文件

问题描述

请注意,这一切都在 Google Colab 中运行。

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

我遇到的问题是了解为什么我无法导入此.so扩展模块。

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

IE

文件x导入y哪个导入z哪个导入表示.so扩展模块。

它说找不到该模块。我尝试将文件添加到 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'

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

标签: pythongoogle-colaboratory

解决方案


推荐阅读