请注意,所有这些都在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中!任何帮助将不胜感激。