我是在docker中部署代码环境,之前的python是3.6.9版本,想通过jit对原本的代码进行加速优化,但是安装numba时遇到了版本兼容性问题,所以将Python版本升级到了3.7.5,这时候需要重新部署原本的代码环境,在’import gi‘时遇到了问题:
Traceback (most recent call last):
File "main.py", line 3, in <module>
from utils import *
File "/root/videoBox/utils.py", line 2, in <module>
import gi
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
from . import _gi
ImportError: **cannot import name '_gi' from 'gi' (/usr/lib/python3/dist-packages/gi/__init__.py)**
本以为是环境依赖的问题,重新清理环境并安装依赖项后问题还是存在;
接着考虑是不是 PYTHONPATH 环境变量设置的问题,重新指定环境变量路径后还是提示导入失败;
接着查找 /usr/lib/python3/dist-packages/gi/目录中文件是否完好
ls -l /usr/lib/python3/dist-packages/gi/
####:/$ sudo docker exec -it ai bash
root@2e1d778977b6:~/videoBox# ls -l /usr/lib/python3/dist-packages/gi/
total 416
-rw-r--r-- 1 root root 5998 Jan 29 2019 __init__.py
drwxr-xr-x 2 root root 4096 Aug 28 11:53 __pycache__
-rw-r--r-- 1 root root 1945 Jan 29 2019 _constants.py
-rw-r--r-- 1 root root 2080 Jan 29 2019 _error.py
**-rw-r--r-- 1 root root 302416 Jan 29 2019 _gi.cpython-36m-aarch64-linux-gnu.so**
-rw-r--r-- 1 root root 13232 Jan 29 2019 _option.py
-rw-r--r-- 1 root root 15042 Jan 29 2019 _propertyhelper.py
-rw-r--r-- 1 root root 9842 Jan 29 2019 _signalhelper.py
-rw-r--r-- 1 root root 6688 Jan 29 2019 docstring.py
-rw-r--r-- 1 root root 5288 Jan 29 2019 importer.py
-rw-r--r-- 1 root root 10000 Jan 29 2019 module.py
drwxr-xr-x 3 root root 4096 Aug 28 11:48 overrides
-rw-r--r-- 1 root root 766 Jan 29 2019 pygtkcompat.py
drwxr-xr-x 3 root root 4096 Aug 28 11:48 repository
-rw-r--r-- 1 root root 13776 Jan 29 2019 types.py
由**-rw-r–r-- 1 root root 302416 Jan 29 2019 _gi.cpython-36m-aarch64-linux-gnu.so**发现系统中.so文件适配的依然是cpython-36m即3.6版本,尝试多种方法,包括清理重新安装、更改文件名为.cpython-37m-aarch64-linux-gnu.so等,都没有实质解决问题,但是可以确定导入失败是版本不适配导致的
最后尝试如下命令
python3.7 -m pip install --ignore-installed PyGObject
即通过指定 python3.7 -m 的方式,确保 pip 使用 Python 3.7 环境下的包管理器来安装,成功解决了兼容性问题
成功导入模块
注意安装PyGObject前确保安装了相应依赖
sudo apt-get update
sudo apt-get install libcairo2-dev pkg-config python3-dev