8000 cairo backend: default to pycairo · lazka/matplotlib@23a4325 · GitHub
[go: up one dir, main page]

Skip to content

Commit 23a4325

Browse files
committed
cairo backend: default to pycairo
As seen in matplotlib#13042 it's a bit faster than cairocffi and it also takes 50 ms less time to import here. Also the GTK3Cairo backend requires pycairo, so there is a good chance it's already loaded anyway for that case.
1 parent d1060a8 commit 23a4325

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

.flake8

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ per-file-ignores =
3232
matplotlib/_mathtext_data.py: E203, E261
3333
matplotlib/backends/_backend_tk.py: E501
3434
matplotlib/backends/backend_agg.py: E302
35-
matplotlib/backends/backend_cairo.py: E203, E221, E402
35+
matplotlib/backends/backend_cairo.py: E203, E221
3636
matplotlib/backends/backend_gtk3.py: E203, E221, E222, E225, E251, E501
3737
matplotlib/backends/backend_pgf.py: E731
3838
matplotlib/backends/qt_editor/_formlayout.py: E501

lib/matplotlib/backends/backend_cairo.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,6 @@
1111

1212
import numpy as np
1313

14-
# cairocffi is more widely compatible than pycairo so try it first.
15-
try:
16-
import cairocffi as cairo
17-
except ImportError:
18-
try:
19-
import cairo
20-
except ImportError:
21-
raise ImportError("cairo backend requires that cairocffi or pycairo "
22-
"is installed")
23-
else:
24-
if cairo.version_info < (1, 11, 0):
25-
# Introduced create_for_data for Py3.
26-
raise ImportError(
27-
"cairo {} is installed; cairo>=1.11.0 is required"
28-
.format(cairo.version))
29-
30-
backend_version = cairo.version
31-
3214
from .. import cbook
3315
from matplotlib.backend_bases import (
3416
_Backend, FigureCanvasBase, FigureManagerBase, GraphicsContextBase,
@@ -39,6 +21,27 @@
3921
from matplotlib.transforms import Affine2D
4022

4123

24+
def import_cairo():
25+
try:
26+
import cairo
27+
if cairo.version_info < (1, 11, 0):
28+
# Introduced create_for_data for Py3.
29+
raise ImportError
30+
except ImportError:
31+
try:
32+
import cairocffi as cairo
33+
except ImportError:
34+
raise ImportError(
35+
"cairo backend requires that pycairo>=1.11.0 or cairocffi"
36+
"is installed")
37+
38+
return cairo
39+
40+
41+
cairo = import_cairo()
42+
backend_version = cairo.version
43+
44+
4245
if cairo.__name__ == "cairocffi":
4346
# Convert a pycairo context to a cairocffi one.
4447
def _to_context(ctx):

0 commit comments

Comments
 (0)
0