Pythonで.soファイルをインポートできません

2020-06-30 python google-colaboratory

これはすべてGoogle Colabで実行されていることに注意してください。

.so拡張モジュールはC ++ / Cudaで作成され、Ninjaを使用してビルドされました。

私が抱えている問題は、この.so拡張モジュールをインポートできない理由を理解することです。

私が言ったように、私はGoogle Colabを使用しています。信じられないほど混乱しているのは、 .so拡張モジュール_extを含むディレクトリにcd _ext 、完全に正常にインポートでき、意図したすべての機能が動作することです。しかし、一連のインポートを通じて.pyファイルからインポートしようとすると、

すなわち

ファイルxyをインポートし、 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'

含まれているディレクトリにcdしたときに_extモジュールをインポートできるが、それ以外の場合はインポートできない理由が_extません。 sys.pathに追加した場合でも!どんな助けでも大歓迎です。

Answers

Related