Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1d4c035

Browse files
committed
Propagate changes to backend loading to setup/setupext.
1) Restore the ability to set the default backend from setup.cfg.2) Remove the backend fallback code.Note that not including `mpl-data/*.glade` in the package data is fine:that file had been removed in962388f anyways.
1 parent32ad86f commit1d4c035

File tree

3 files changed

+11
-260
lines changed

3 files changed

+11
-260
lines changed

‎setup.cfg.template

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,9 @@
6363
# behavior
6464
#
6565
#agg = auto
66-
#cairo = auto
67-
#gtk3agg = auto
68-
#gtk3cairo = auto
6966
#macosx = auto
70-
#pyside = auto
71-
#qt4agg = auto
7267
#tkagg = auto
7368
#windowing = auto
74-
#wxagg = auto
7569

7670
[rc_options]
7771
# User-configurable options
@@ -81,10 +75,9 @@
8175
#
8276
# The Agg, Ps, Pdf and SVG backends do not require external dependencies. Do
8377
# not choose MacOSX, or TkAgg if you have disabled the relevant extension
84-
# modules.Agg will be used bydefault.
78+
# modules.The default is determined byfallback.
8579
#
8680
#backend = Agg
87-
#
8881

8982
[package_data]
9083
# Package additional files found in the lib/matplotlib directories.

‎setup.py

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,9 @@
7070
setupext.Tests(),
7171
setupext.Toolkits_Tests(),
7272
'Optional backend extensions',
73-
# These backends are listed in order of preference, the first
74-
# being the most preferred. The first one that looks like it will
75-
# work will be selected as the default backend.
76-
setupext.BackendMacOSX(),
77-
setupext.BackendQt5(),
78-
setupext.BackendQt4(),
79-
setupext.BackendGtk3Agg(),
80-
setupext.BackendGtk3Cairo(),
81-
setupext.BackendTkAgg(),
82-
setupext.BackendWxAgg(),
8373
setupext.BackendAgg(),
84-
setupext.BackendCairo(),
74+
setupext.BackendTkAgg(),
75+
setupext.BackendMacOSX(),
8576
setupext.Windowing(),
8677
'Optional package data',
8778
setupext.Dlls(),
@@ -133,7 +124,6 @@ def run(self):
133124
package_dir= {'':'lib'}
134125
install_requires= []
135126
setup_requires= []
136-
default_backend=None
137127

138128
# If the user just queries for information, don't bother figuring out which
139129
# packages to build or install.
@@ -169,10 +159,6 @@ def run(self):
169159
required_failed.append(package)
170160
else:
171161
good_packages.append(package)
172-
if (isinstance(package,setupext.OptionalBackendPackage)
173-
andpackage.runtime_check()
174-
anddefault_backendisNone):
175-
default_backend=package.name
176162
print_raw('')
177163

178164
# Abort if any of the required packages can not be built.
@@ -203,14 +189,16 @@ def run(self):
203189
setup_requires.extend(package.get_setup_requires())
204190

205191
# Write the default matplotlibrc file
206-
ifdefault_backendisNone:
207-
default_backend='svg'
208-
ifsetupext.options['backend']:
209-
default_backend=setupext.options['backend']
210192
withopen('matplotlibrc.template')asfd:
211-
template=fd.read()
193+
template_lines=fd.read().splitlines(True)
194+
backend_line_idx,= [# Also asserts that there is a single such line.
195+
idxforidx,lineinenumerate(template_lines)
196+
ifline.startswith('#backend ')]
197+
ifsetupext.options['backend']:
198+
template_lines[backend_line_idx]= (
199+
'backend: {}'.format(setupext.options['backend']))
212200
withopen('lib/matplotlib/mpl-data/matplotlibrc','w')asfd:
213-
fd.write(template)
201+
fd.write(''.join(template_lines))
214202

215203
# Finalize the extension modules so they can get the Numpy include
216204
# dirs

‎setupext.py

Lines changed: 0 additions & 230 deletions
Original file line numberDiff line numberDiff line change
@@ -384,13 +384,6 @@ def check(self):
384384
"""
385385
pass
386386

387-
defruntime_check(self):
388-
"""
389-
True if the runtime dependencies of the backend are met. Assumes that
390-
the build-time dependencies are met.
391-
"""
392-
returnTrue
393-
394387
defget_packages(self):
395388
"""
396389
Get a list of package names to add to the configuration.
@@ -1368,10 +1361,6 @@ class BackendTkAgg(OptionalBackendPackage):
13681361
defcheck(self):
13691362
return"installing; run-time loading from Python Tcl / Tk"
13701363

1371-
defruntime_check(self):
1372-
"""Checks whether TkAgg runtime dependencies are met."""
1373-
returnimportlib.util.find_spec("tkinter")isnotNone
1374-
13751364
defget_extension(self):
13761365
sources= [
13771366
'src/_tkagg.cpp'
@@ -1391,57 +1380,6 @@ def add_flags(self, ext):
13911380
ext.libraries.extend(['dl'])
13921381

13931382

1394-
classBackendGtk3Agg(OptionalBackendPackage):
1395-
name="gtk3agg"
1396-
1397-
defcheck_requirements(self):
1398-
ifnotany(map(importlib.util.find_spec, ["cairocffi","cairo"])):
1399-
raiseCheckFailed("Requires cairocffi or pycairo to be installed.")
1400-
1401-
try:
1402-
importgi
1403-
exceptImportError:
1404-
raiseCheckFailed("Requires pygobject to be installed.")
1405-
1406-
try:
1407-
gi.require_version("Gtk","3.0")
1408-
exceptValueError:
1409-
raiseCheckFailed(
1410-
"Requires gtk3 development files to be installed.")
1411-
exceptAttributeError:
1412-
raiseCheckFailed("pygobject version too old.")
1413-
1414-
try:
1415-
fromgi.repositoryimportGtk,Gdk,GObject
1416-
except (ImportError,RuntimeError):
1417-
raiseCheckFailed("Requires pygobject to be installed.")
1418-
1419-
return"version {}.{}.{}".format(
1420-
Gtk.get_major_version(),
1421-
Gtk.get_minor_version(),
1422-
Gtk.get_micro_version())
1423-
1424-
defget_package_data(self):
1425-
return {'matplotlib': ['mpl-data/*.glade']}
1426-
1427-
1428-
classBackendGtk3Cairo(BackendGtk3Agg):
1429-
name="gtk3cairo"
1430-
1431-
1432-
classBackendWxAgg(OptionalBackendPackage):
1433-
name="wxagg"
1434-
1435-
defcheck_requirements(self):
1436-
try:
1437-
importwx
1438-
backend_version=wx.VERSION_STRING
1439-
exceptImportError:
1440-
raiseCheckFailed("requires wxPython")
1441-
1442-
return"version %s"%backend_version
1443-
1444-
14451383
classBackendMacOSX(OptionalBackendPackage):
14461384
name='macosx'
14471385

@@ -1487,174 +1425,6 @@ def get_extension(self):
14871425
returnext
14881426

14891427

1490-
classBackendQtBase(OptionalBackendPackage):
1491-
1492-
defconvert_qt_version(self,version):
1493-
version='%x'%version
1494-
temp= []
1495-
whilelen(version)>0:
1496-
version,chunk=version[:-2],version[-2:]
1497-
temp.insert(0,str(int(chunk,16)))
1498-
return'.'.join(temp)
1499-
1500-
defcheck_requirements(self):
1501-
"""
1502-
If PyQt4/PyQt5 is already imported, importing PyQt5/PyQt4 will fail
1503-
so we need to test in a subprocess (as for Gtk3).
1504-
"""
1505-
try:
1506-
p=multiprocessing.Pool()
1507-
1508-
except:
1509-
# Can't do multiprocessing, fall back to normal approach
1510-
# (this will fail if importing both PyQt4 and PyQt5).
1511-
try:
1512-
# Try in-process
1513-
msg=self.callback(self)
1514-
exceptRuntimeError:
1515-
raiseCheckFailed(
1516-
"Could not import: are PyQt4 & PyQt5 both installed?")
1517-
1518-
else:
1519-
# Multiprocessing OK
1520-
try:
1521-
res=p.map_async(self.callback, [self])
1522-
msg=res.get(timeout=10)[0]
1523-
exceptmultiprocessing.TimeoutError:
1524-
p.terminate()
1525-
# No result returned. Probably hanging, terminate the process.
1526-
raiseCheckFailed("Check timed out")
1527-
except:
1528-
# Some other error.
1529-
p.close()
1530-
raise
1531-
else:
1532-
# Clean exit
1533-
p.close()
1534-
finally:
1535-
# Tidy up multiprocessing
1536-
p.join()
1537-
1538-
returnmsg
1539-
1540-
1541-
defbackend_pyside_internal_check(self):
1542-
try:
1543-
fromPySideimport__version__
1544-
fromPySideimportQtCore
1545-
exceptImportError:
1546-
raiseCheckFailed("PySide not found")
1547-
else:
1548-
return ("Qt: %s, PySide: %s"%
1549-
(QtCore.__version__,__version__))
1550-
1551-
1552-
defbackend_pyqt4_internal_check(self):
1553-
try:
1554-
fromPyQt4importQtCore
1555-
exceptImportError:
1556-
raiseCheckFailed("PyQt4 not found")
1557-
1558-
try:
1559-
qt_version=QtCore.QT_VERSION
1560-
pyqt_version_str=QtCore.PYQT_VERSION_STR
1561-
exceptAttributeError:
1562-
raiseCheckFailed('PyQt4 not correctly imported')
1563-
else:
1564-
return ("Qt: %s, PyQt: %s"% (self.convert_qt_version(qt_version),pyqt_version_str))
1565-
1566-
1567-
defbackend_qt4_internal_check(self):
1568-
successes= []
1569-
failures= []
1570-
try:
1571-
successes.append(backend_pyside_internal_check(self))
1572-
exceptCheckFailedase:
1573-
failures.append(str(e))
1574-
1575-
try:
1576-
successes.append(backend_pyqt4_internal_check(self))
1577-
exceptCheckFailedase:
1578-
failures.append(str(e))
1579-
1580-
iflen(successes)==0:
1581-
raiseCheckFailed('; '.join(failures))
1582-
return'; '.join(successes+failures)
1583-
1584-
1585-
classBackendQt4(BackendQtBase):
1586-
name="qt4agg"
1587-
1588-
def__init__(self,*args,**kwargs):
1589-
BackendQtBase.__init__(self,*args,**kwargs)
1590-
self.callback=backend_qt4_internal_check
1591-
1592-
defbackend_pyside2_internal_check(self):
1593-
try:
1594-
fromPySide2import__version__
1595-
fromPySide2importQtCore
1596-
exceptImportError:
1597-
raiseCheckFailed("PySide2 not found")
1598-
else:
1599-
return ("Qt: %s, PySide2: %s"%
1600-
(QtCore.__version__,__version__))
1601-
1602-
defbackend_pyqt5_internal_check(self):
1603-
try:
1604-
fromPyQt5importQtCore
1605-
exceptImportError:
1606-
raiseCheckFailed("PyQt5 not found")
1607-
1608-
try:
1609-
qt_version=QtCore.QT_VERSION
1610-
pyqt_version_str=QtCore.PYQT_VERSION_STR
1611-
exceptAttributeError:
1612-
raiseCheckFailed('PyQt5 not correctly imported')
1613-
else:
1614-
return ("Qt: %s, PyQt: %s"% (self.convert_qt_version(qt_version),pyqt_version_str))
1615-
1616-
defbackend_qt5_internal_check(self):
1617-
successes= []
1618-
failures= []
1619-
try:
1620-
successes.append(backend_pyside2_internal_check(self))
1621-
exceptCheckFailedase:
1622-
failures.append(str(e))
1623-
1624-
try:
1625-
successes.append(backend_pyqt5_internal_check(self))
1626-
exceptCheckFailedase:
1627-
failures.append(str(e))
1628-
1629-
iflen(successes)==0:
1630-
raiseCheckFailed('; '.join(failures))
1631-
return'; '.join(successes+failures)
1632-
1633-
classBackendQt5(BackendQtBase):
1634-
name="qt5agg"
1635-
1636-
def__init__(self,*args,**kwargs):
1637-
BackendQtBase.__init__(self,*args,**kwargs)
1638-
self.callback=backend_qt5_internal_check
1639-
1640-
1641-
classBackendCairo(OptionalBackendPackage):
1642-
name="cairo"
1643-
1644-
defcheck_requirements(self):
1645-
try:
1646-
importcairocffi
1647-
exceptImportError:
1648-
try:
1649-
importcairo
1650-
exceptImportError:
1651-
raiseCheckFailed("cairocffi or pycairo not found")
1652-
else:
1653-
return"pycairo version %s"%cairo.version
1654-
else:
1655-
return"cairocffi version %s"%cairocffi.version
1656-
1657-
16581428
classOptionalPackageData(OptionalPackage):
16591429
config_category="package_data"
16601430

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp