无法在python中导入.so文件

时间:2020-06-30 01:37:52

标签: python google-colaboratory

请注意,所有这些都在Google Colab中运行。

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

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

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

文件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

合作代码

    %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中!任何帮助将不胜感激。

0 个答案:

没有答案
相关问题