由于pycairo 1.20

问题描述

我在为我的python3脚本导入matplotlibrary时遇到问题。

我的系统: CentOS Linux 7(核心) 内核3.10.0-1062.9.1.el7.x86_64 Python 3.6.8

最少繁殖:

设置:

python3 -m venv tester
source tester/bin/activate
pip install matplotlib
pip list

礼物:

Package         Version
--------------- ---------
certifi         2020.6.20
cycler          0.10.0
kiwisolver      1.2.0
matplotlib      3.3.2
numpy           1.19.2
Pillow          8.0.1
pip             18.1
pyparsing       2.4.7
python-dateutil 2.8.1
setuptools      40.6.2
six             1.15.0

现在可以实际复制了:

python3
>>>from matplotlib import pyplot as plt

礼物:

Traceback (most recent call last):
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/backends/backend_cairo.py",line 15,in <module>
    import cairo
ModuleNotFoundError: No module named 'cairo'

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/backends/backend_cairo.py",line 21,in <module>
    import cairocffi as cairo
ModuleNotFoundError: No module named 'cairocffi'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/pyplot.py",line 2336,in <module>
    switch_backend(rcParams["backend"])
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/pyplot.py",line 276,in switch_backend
    class backend_mod(matplotlib.backend_bases._Backend):
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/pyplot.py",line 277,in backend_mod
    locals().update(vars(importlib.import_module(backend_name)))
  File "/apps/shared/taifun/x86_64/apps/DATAPROCESSING/python/3.6.8/system/lib/python3.6/importlib/__init__.py",line 126,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "/gpfs/apps/shared/mpo/tester/lib/python3.6/site-packages/matplotlib/backends/backend_cairo.py",line 25,in <module>
    "is installed") from err
ImportError: cairo backend requires that pycairo>=1.11.0 or cairocffiis installed

好,所以我们安装pycairo:

pip install pycairo

礼物:

Collecting pycairo
  Downloading <internal-package-server>/5a10cb7f9ae0d/pycairo-1.20.0.tar.gz (344kB)
    100% |████████████████████████████████| 348kB 3.7MB/s
  Installing build dependencies ... done
Installing collected packages: pycairo
  Running setup.py install for pycairo ... done
Successfully installed pycairo-1.20.0

让我们检查一下:

pip list

似乎还可以:

Package         Version
--------------- ---------
...
pycairo         1.20.0
...

新尝试:

python3
>>>from matplotlib import pyplot as plt

不,同样的错误

...
ImportError: cairo backend requires that pycairo>=1.11.0 or cairocffiis installed

现在,将版本修改为1.11即可:

pip uninstall pycairo
pip install pycairo==1.11
python3
>>> from matplotlib import pyplot as plt
>>>

万岁!

但是为什么pycairo 1.20在这里不起作用? 1.11-> 1.20不应是一个重大更改,其他人应该早些时候通知此问题。我可能会缺少什么?还是我应该在matplotlib上实际打开票证,以便他们调整其要求。清单?

谢谢。

解决方法

好的,我设法解决了这个问题。必须执行几个步骤:

  • 从pycairo切换到cairocffi(如CForce99建议)
  • 更新pip和setuptools(通过输入gitlab-cy.yml),旧版本(40.x)出现了cairocff的.tar.gz问题
  • 设置公司内部pypi镜像的证书的路径(导出REQUEST_CA_BUNDLE)