@@ -1390,13 +1390,8 @@ def check(self):
13901390 return "installing; run-time loading from Python Tcl / Tk"
13911391
13921392 def runtime_check (self ):
1393- """ Checks whether TkAgg runtime dependencies are met
1394- """
1395- try :
1396- import tkinter
1397- except ImportError :
1398- return False
1399- return True
1393+ """Checks whether TkAgg runtime dependencies are met."""
1394+ return importlib .util .find_spec ("tkinter" ) is not None
14001395
14011396 def get_extension (self ):
14021397 sources = [
@@ -1417,144 +1412,44 @@ def add_flags(self, ext):
14171412 ext .libraries .extend (['dl' ])
14181413
14191414
1420- def backend_gtk3agg_internal_check (x ):
1421- try :
1422- import gi
1423- except ImportError :
1424- return (False , "Requires pygobject to be installed." )
1425-
1426- try :
1427- gi .require_version ("Gtk" , "3.0" )
1428- except ValueError :
1429- return (False , "Requires gtk3 development files to be installed." )
1430- except AttributeError :
1431- return (False , "pygobject version too old." )
1432-
1433- try :
1434- from gi .repository import Gtk , Gdk , GObject
1435- except (ImportError , RuntimeError ):
1436- return (False , "Requires pygobject to be installed." )
1437-
1438- return (True , "version %s.%s.%s" % (
1439- Gtk .get_major_version (),
1440- Gtk .get_micro_version (),
1441- Gtk .get_minor_version ()))
1442-
1443-
14441415class BackendGtk3Agg (OptionalBackendPackage ):
14451416 name = "gtk3agg"
14461417
14471418 def check_requirements (self ):
1448- if 'TRAVIS' in os . environ :
1449- raise CheckFailed ("Can't build with Travis " )
1419+ if not any ( map ( importlib . util . find_spec , [ "cairocffi" , "cairo" ])) :
1420+ raise CheckFailed ("Requires cairocffi or pycairo to be installed. " )
14501421
1451- # This check needs to be performed out-of-process, because
1452- # importing gi and then importing regular old pygtk afterward
1453- # segfaults the interpreter.
14541422 try :
1455- p = multiprocessing .Pool ()
1456- except :
1457- return "unknown (can not use multiprocessing to determine)"
1458- try :
1459- res = p .map_async (backend_gtk3agg_internal_check , [0 ])
1460- success , msg = res .get (timeout = 10 )[0 ]
1461- except multiprocessing .TimeoutError :
1462- p .terminate ()
1463- # No result returned. Probably hanging, terminate the process.
1464- success = False
1465- raise CheckFailed ("Check timed out" )
1466- except :
1467- p .close ()
1468- # Some other error.
1469- success = False
1470- msg = "Could not determine"
1471- raise
1472- else :
1473- p .close ()
1474- finally :
1475- p .join ()
1476-
1477- if success :
1478- return msg
1479- else :
1480- raise CheckFailed (msg )
1481-
1482- def get_package_data (self ):
1483- return {'matplotlib' : ['mpl-data/*.glade' ]}
1484-
1485-
1486- def backend_gtk3cairo_internal_check (x ):
1487- try :
1488- import cairocffi
1489- except ImportError :
1490- try :
1491- import cairo
1423+ import gi
14921424 except ImportError :
1493- return (False , "Requires cairocffi or pycairo to be installed." )
1494-
1495- try :
1496- import gi
1497- except ImportError :
1498- return (False , "Requires pygobject to be installed." )
1499-
1500- try :
1501- gi .require_version ("Gtk" , "3.0" )
1502- except ValueError :
1503- return (False , "Requires gtk3 development files to be installed." )
1504- except AttributeError :
1505- return (False , "pygobject version too old." )
1506-
1507- try :
1508- from gi .repository import Gtk , Gdk , GObject
1509- except (RuntimeError , ImportError ):
1510- return (False , "Requires pygobject to be installed." )
1511-
1512- return (True , "version %s.%s.%s" % (
1513- Gtk .get_major_version (),
1514- Gtk .get_micro_version (),
1515- Gtk .get_minor_version ()))
1516-
1517-
1518- class BackendGtk3Cairo (OptionalBackendPackage ):
1519- name = "gtk3cairo"
1425+ raise CheckFailed ("Requires pygobject to be installed." )
15201426
1521- def check_requirements (self ):
1522- if 'TRAVIS' in os .environ :
1523- raise CheckFailed ("Can't build with Travis" )
1524-
1525- # This check needs to be performed out-of-process, because
1526- # importing gi and then importing regular old pygtk afterward
1527- # segfaults the interpreter.
15281427 try :
1529- p = multiprocessing .Pool ()
1530- except :
1531- return "unknown (can not use multiprocessing to determine)"
1428+ gi .require_version ("Gtk" , "3.0" )
1429+ except ValueError :
1430+ raise CheckFailed (
1431+ "Requires gtk3 development files to be installed." )
1432+ except AttributeError :
1433+ raise CheckFailed ("pygobject version too old." )
1434+
15321435 try :
1533- res = p .map_async (backend_gtk3cairo_internal_check , [0 ])
1534- success , msg = res .get (timeout = 10 )[0 ]
1535- except multiprocessing .TimeoutError :
1536- p .terminate ()
1537- # No result returned. Probably hanging, terminate the process.
1538- success = False
1539- raise CheckFailed ("Check timed out" )
1540- except :
1541- p .close ()
1542- success = False
1543- raise
1544- else :
1545- p .close ()
1546- finally :
1547- p .join ()
1436+ from gi .repository import Gtk , Gdk , GObject
1437+ except (ImportError , RuntimeError ):
1438+ raise CheckFailed ("Requires pygobject to be installed." )
15481439
1549- if success :
1550- return msg
1551- else :
1552- raise CheckFailed ( msg )
1440+ return "version {}.{}.{}" . format (
1441+ Gtk . get_major_version (),
1442+ Gtk . get_minor_version (),
1443+ Gtk . get_micro_version () )
15531444
15541445 def get_package_data (self ):
15551446 return {'matplotlib' : ['mpl-data/*.glade' ]}
15561447
15571448
1449+ class BackendGtk3Cairo (BackendGtk3Agg ):
1450+ name = "gtk3cairo"
1451+
1452+
15581453class BackendWxAgg (OptionalBackendPackage ):
15591454 name = "wxagg"
15601455
0 commit comments