python - 无法在 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!任何帮助将不胜感激。