首页 > 解决方案 > 无法在 xenial 上编译 QGIS 3.2;PyQt5 中的 Python3 错误(未定义符号:PySlice_AdjustIndices)

问题描述

在尝试编译最新版本的 QGIS ( https://github.com/qgis/QGIS ) 时,我最终在 cmake-gui 上出现以下错误:

Traceback (most recent call last):
  File "/opt/QGIS/cmake/FindPyQt5.py", line 34, in <module>
    import PyQt5.pyqtconfig
ImportError: No module named 'PyQt5.pyqtconfig'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/QGIS/cmake/FindPyQt5.py", line 37, in <module>
    import PyQt5.QtCore
ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices

Found SIP version: 4.17
Traceback (most recent call last):
  File "/opt/QGIS/cmake/FindQsci.py", line 45, in <module>
    from PyQt5.Qsci import QSCINTILLA_VERSION_STR
ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices

这是我的python3 --version

Python 3.5.2

我安装了 PyQt5 和其他 Python3 包pip3以获得最新的(在 /usr/local 中)。

以下是所有与 qt 相关的软件包$ pip3 list | grep -i qt

PyQt5                         5.11.2                
PyQt5-sip                     4.19.12               
PyQtChart                     5.11.2                
QtAwesome                     0.4.4                 
qtconsole                     4.3.1                 
QtPy                          1.3.1  

安装说明可以在这里找到: https ://github.com/qgis/QGIS/blob/master/INSTALL

我的操作系统是 Ubuntu 16.04;uname -mor

4.15.0-29-generic x86_64 GNU/Linux

如果我只是运行 python3 控制台并尝试从 PyQt5 导入 Qsci,则会出现相同的错误消息,例如:

>>> from PyQt5 import Qsci
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices

对于略有不同的第一个错误,它似乎与以下内容相同:qgis ModuleNotFoundError: No module named 'PyQt5.pyqtconfig'

标签: compilationqgis

解决方案


对于第二个错误,我找到的解决方案是将 python 版本从 3.5 更改为 3.6,本文档中提到的PyQt 应该适用于 python3.5 但它仍然给我错误ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices。所以,尝试用python3.6运行代码


推荐阅读