Started removing runtime support for Python2 and PyQt4. without_py2_and_pyqt4

Sat, 31 Aug 2019 12:58:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Aug 2019 12:58:11 +0200
branch
without_py2_and_pyqt4
changeset 7192
a22eee00b052
parent 7191
960850ec284c
child 7196
ab0a91b82b37

Started removing runtime support for Python2 and PyQt4.

eric6.e4p file | annotate | diff | comparison | revisions
eric6/CondaInterface/Conda.py file | annotate | diff | comparison | revisions
eric6/CondaInterface/CondaExecDialog.py file | annotate | diff | comparison | revisions
eric6/CondaInterface/CondaExportDialog.py file | annotate | diff | comparison | revisions
eric6/CondaInterface/__init__.py file | annotate | diff | comparison | revisions
eric6/Cooperation/Connection.py file | annotate | diff | comparison | revisions
eric6/DataViews/CodeMetrics.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebugServer.py file | annotate | diff | comparison | revisions
eric6/Debugger/VariablesViewer.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5ProcessDialog.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5GoogleMail.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5RFC6266.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5SslCertificatesInfoWidget.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5XmlRpcClient.py file | annotate | diff | comparison | revisions
eric6/E5XML/XMLStreamWriterBase.py file | annotate | diff | comparison | revisions
eric6/Globals/__init__.py file | annotate | diff | comparison | revisions
eric6/Graphics/PackageDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/Graphics/UMLClassDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/HexEdit/HexEditSearchReplaceWidget.py file | annotate | diff | comparison | revisions
eric6/HexEdit/HexEditWidget.py file | annotate | diff | comparison | revisions
eric6/Network/IRC/IrcChannelWidget.py file | annotate | diff | comparison | revisions
eric6/Network/IRC/IrcWidget.py file | annotate | diff | comparison | revisions
eric6/PipInterface/Pip.py file | annotate | diff | comparison | revisions
eric6/PipInterface/PipDialog.py file | annotate | diff | comparison | revisions
eric6/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
eric6/PipInterface/PipPackageDetailsDialog.py file | annotate | diff | comparison | revisions
eric6/PluginManager/PluginExceptions.py file | annotate | diff | comparison | revisions
eric6/PluginManager/PluginInstallDialog.py file | annotate | diff | comparison | revisions
eric6/PluginManager/PluginManager.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/PluginWizardEricPlugin.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesStatusDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitUtilities.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/git.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgClient.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectHelper.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/purge.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListAllGuardsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListGuardsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py file | annotate | diff | comparison | revisions
eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui file | annotate | diff | comparison | revisions
eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/HelpDocumentationPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ProgramsDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric6/Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
eric6/Project/Project.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectProtocolsBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/UicLoadUi.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Exporters/ExporterHTML.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Lexers/__init__.py file | annotate | diff | comparison | revisions
eric6/QScintilla/SpellChecker.py file | annotate | diff | comparison | revisions
eric6/QScintilla/TypingCompleters/CompleterPython.py file | annotate | diff | comparison | revisions
eric6/Toolbox/PyQt4ImportHook.py file | annotate | diff | comparison | revisions
eric6/UI/BrowserModel.py file | annotate | diff | comparison | revisions
eric6/UI/CodeDocumentationViewer.py file | annotate | diff | comparison | revisions
eric6/UI/CompareDialog.py file | annotate | diff | comparison | revisions
eric6/UI/FindFileDialog.py file | annotate | diff | comparison | revisions
eric6/UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
eric6/UI/PythonAstViewer.py file | annotate | diff | comparison | revisions
eric6/UI/SymbolsWidget.py file | annotate | diff | comparison | revisions
eric6/UI/UserInterface.py file | annotate | diff | comparison | revisions
eric6/Utilities/BackgroundService.py file | annotate | diff | comparison | revisions
eric6/Utilities/ClassBrowsers/__init__.py file | annotate | diff | comparison | revisions
eric6/Utilities/__init__.py file | annotate | diff | comparison | revisions
eric6/Utilities/binplistlib.py file | annotate | diff | comparison | revisions
eric6/VCS/StatusMonitorThread.py file | annotate | diff | comparison | revisions
eric6/VCS/VersionControl.py file | annotate | diff | comparison | revisions
eric6/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvConfigurationDialog.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvExecDialog.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Bookmarks/NsHtmlReader.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Feeds/FeedsManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/FlashCookieManager/FlashCookieManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/SafeBrowsing/SafeBrowsingAPIClient.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/SafeBrowsing/SafeBrowsingCache.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/SafeBrowsing/SafeBrowsingManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/SafeBrowsing/SafeBrowsingUrl.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/SpeedDial/SpeedDial.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Tools/WebBrowserTools.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/UrlBar/FavIconLabel.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/UrlBar/UrlBar.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/VirusTotal/VirusTotalApi.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserPage.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebInspector.py file | annotate | diff | comparison | revisions
eric6/eric6.py file | annotate | diff | comparison | revisions
eric6/eric6_api.py file | annotate | diff | comparison | revisions
eric6/eric6_browser.py file | annotate | diff | comparison | revisions
eric6/eric6_compare.py file | annotate | diff | comparison | revisions
eric6/eric6_configure.py file | annotate | diff | comparison | revisions
eric6/eric6_diff.py file | annotate | diff | comparison | revisions
eric6/eric6_doc.py file | annotate | diff | comparison | revisions
eric6/eric6_editor.py file | annotate | diff | comparison | revisions
eric6/eric6_hexeditor.py file | annotate | diff | comparison | revisions
eric6/eric6_iconeditor.py file | annotate | diff | comparison | revisions
eric6/eric6_plugininstall.py file | annotate | diff | comparison | revisions
eric6/eric6_pluginrepository.py file | annotate | diff | comparison | revisions
eric6/eric6_pluginuninstall.py file | annotate | diff | comparison | revisions
eric6/eric6_post_install.py file | annotate | diff | comparison | revisions
eric6/eric6_qregexp.py file | annotate | diff | comparison | revisions
eric6/eric6_qregularexpression.py file | annotate | diff | comparison | revisions
eric6/eric6_re.py file | annotate | diff | comparison | revisions
eric6/eric6_shell.py file | annotate | diff | comparison | revisions
eric6/eric6_snap.py file | annotate | diff | comparison | revisions
eric6/eric6_sqlbrowser.py file | annotate | diff | comparison | revisions
eric6/eric6_tray.py file | annotate | diff | comparison | revisions
eric6/eric6_trpreviewer.py file | annotate | diff | comparison | revisions
eric6/eric6_uipreviewer.py file | annotate | diff | comparison | revisions
eric6/eric6_unittest.py file | annotate | diff | comparison | revisions
scripts/create_windows_links.py file | annotate | diff | comparison | revisions
scripts/install-debugclients.py file | annotate | diff | comparison | revisions
scripts/install.py file | annotate | diff | comparison | revisions
scripts/uninstall-debugclients.py file | annotate | diff | comparison | revisions
scripts/uninstall.py file | annotate | diff | comparison | revisions
setup.py file | annotate | diff | comparison | revisions
--- a/eric6.e4p	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6.e4p	Sat Aug 31 12:58:11 2019 +0200
@@ -214,9 +214,7 @@
     <Source>eric6/E5XML/XMLStreamWriterBase.py</Source>
     <Source>eric6/E5XML/__init__.py</Source>
     <Source>eric6/Globals/AppInfo.py</Source>
-    <Source>eric6/Globals/E5ConfigParser.py</Source>
     <Source>eric6/Globals/__init__.py</Source>
-    <Source>eric6/Globals/compatibility_fixes.py</Source>
     <Source>eric6/Graphics/ApplicationDiagramBuilder.py</Source>
     <Source>eric6/Graphics/AssociationItem.py</Source>
     <Source>eric6/Graphics/ClassItem.py</Source>
@@ -1609,7 +1607,6 @@
     <Source>eric6/WebBrowser/SafeBrowsing/SafeBrowsingManager.py</Source>
     <Source>eric6/WebBrowser/SafeBrowsing/SafeBrowsingThreatList.py</Source>
     <Source>eric6/WebBrowser/SafeBrowsing/SafeBrowsingUrl.py</Source>
-    <Source>eric6/WebBrowser/SafeBrowsing/SafeBrowsingUtilities.py</Source>
     <Source>eric6/WebBrowser/SafeBrowsing/__init__.py</Source>
     <Source>eric6/WebBrowser/SearchWidget.py</Source>
     <Source>eric6/WebBrowser/Session/SessionManager.py</Source>
@@ -1742,8 +1739,6 @@
     <Source>eric6/eric6_uipreviewer.pyw</Source>
     <Source>eric6/eric6_unittest.py</Source>
     <Source>eric6/eric6_unittest.pyw</Source>
-    <Source>eric6/eric6_webbrowser.py</Source>
-    <Source>eric6/eric6_webbrowser.pyw</Source>
     <Source>eric6/eric6config.py</Source>
     <Source>scripts/cleanupSource.py</Source>
     <Source>scripts/compileUiFiles.py</Source>
@@ -2318,9 +2313,6 @@
     <Other>eric6/APIs/MicroPython/circuitpython.api</Other>
     <Other>eric6/APIs/MicroPython/microbit.api</Other>
     <Other>eric6/APIs/MicroPython/micropython.api</Other>
-    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
-    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
-    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/Python3/PyQt4.bas</Other>
     <Other>eric6/APIs/Python3/PyQt5.bas</Other>
     <Other>eric6/APIs/Python3/PyQtChart.bas</Other>
@@ -2328,6 +2320,9 @@
     <Other>eric6/APIs/Python3/QScintilla2.bas</Other>
     <Other>eric6/APIs/Python3/eric6.api</Other>
     <Other>eric6/APIs/Python3/eric6.bas</Other>
+    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
+    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
+    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/QSS/qss.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.bas</Other>
@@ -2530,7 +2525,6 @@
     <Other>linux/eric6.desktop.in</Other>
     <Other>linux/eric6_browser.desktop</Other>
     <Other>linux/eric6_browser.desktop.in</Other>
-    <Other>linux/eric6_webbrowser.desktop.in</Other>
     <Other>others/default.e4k</Other>
     <Other>others/default_Mac.e4k</Other>
     <Other>others/pylint.rc</Other>
--- a/eric6/CondaInterface/Conda.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/CondaInterface/Conda.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import json
 import os
--- a/eric6/CondaInterface/CondaExecDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/CondaInterface/CondaExecDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/CondaInterface/CondaExportDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/CondaInterface/CondaExportDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 
--- a/eric6/CondaInterface/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/CondaInterface/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Cooperation/Connection.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Cooperation/Connection.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSignal, QTimer, QTime, QByteArray
 from PyQt5.QtNetwork import QTcpSocket, QHostInfo
--- a/eric6/DataViews/CodeMetrics.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/DataViews/CodeMetrics.py	Sat Aug 31 12:58:11 2019 +0200
@@ -18,7 +18,6 @@
 
 import os
 import io
-import sys
 import keyword
 import token
 import tokenize
@@ -68,10 +67,7 @@
         
         source = io.BytesIO(text.encode("utf-8"))
         try:
-            if sys.version_info[0] == 2:
-                gen = tokenize.generate_tokens(source.readline)
-            else:
-                gen = tokenize.tokenize(source.readline)
+            gen = tokenize.tokenize(source.readline)
             for toktype, toktext, start, end, line in gen:
                 (srow, scol) = start
                 (erow, ecol) = end
--- a/eric6/Debugger/DebugServer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Debugger/DebugServer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import sys
@@ -220,10 +216,7 @@
         self.clientType = \
             Preferences.Prefs.settings.value('DebugClient/Type')
         if self.clientType is None:
-            if sys.version_info[0] == 2:
-                self.clientType = 'Python2'
-            else:
-                self.clientType = 'Python3'
+            self.clientType = 'Python3'
         # Change clientType if dependent interpreter does not exist anymore
         # (maybe deinstalled,...)
         elif self.clientType == 'Python2' and Preferences.getDebugger(
--- a/eric6/Debugger/VariablesViewer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Debugger/VariablesViewer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,11 +9,6 @@
 
 from __future__ import unicode_literals
 
-try:
-    str = unicode
-except NameError:
-    pass
-
 import ast
     
 from PyQt5.QtCore import (Qt, QAbstractItemModel, QModelIndex, QRegExp,
--- a/eric6/E5Gui/E5ProcessDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5Gui/E5ProcessDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/E5Network/E5GoogleMail.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5Network/E5GoogleMail.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,13 +8,8 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
-import sys
 import base64
 import json
 import datetime
@@ -152,19 +147,7 @@
         else:
             self.__doSendMessages()
     
-    def __prepareMessage_v2(self, message):
-        """
-        Private method to prepare the message for sending (Python2 Variant).
-        
-        @param message message to be prepared
-        @type email.mime.text.MIMEBase
-        @return prepared message dictionary
-        @rtype dict
-        """
-        raw = base64.urlsafe_b64encode(message.as_string())
-        return {'raw': raw}
-    
-    def __prepareMessage_v3(self, message):
+    def __prepareMessage(self, message):
         """
         Private method to prepare the message for sending (Python2 Variant).
         
@@ -281,10 +264,7 @@
             while self.__messages:
                 count += 1
                 message = self.__messages.pop(0)
-                if sys.version_info[0] == 2:
-                    message1 = self.__prepareMessage_v2(message)
-                else:
-                    message1 = self.__prepareMessage_v3(message)
+                message1 = self.__prepareMessage(message)
                 service.users().messages()\
                     .send(userId="me", body=message1).execute()
                 results.append(self.tr("Message #{0} sent.").format(count))
--- a/eric6/E5Network/E5RFC6266.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5Network/E5RFC6266.py	Sat Aug 31 12:58:11 2019 +0200
@@ -15,10 +15,7 @@
 
 from __future__ import unicode_literals
 
-try:  # Py3
-    import urllib.parse as parse
-except (ImportError):
-    import urlparse as parse    # __IGNORE_WARNING__
+import urllib.parse as parse
 import collections
 import string
 import re
--- a/eric6/E5Network/E5SslCertificatesInfoWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5Network/E5SslCertificatesInfoWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, QCryptographicHash, QDateTime
 from PyQt5.QtWidgets import QWidget
--- a/eric6/E5Network/E5XmlRpcClient.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5Network/E5XmlRpcClient.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,8 @@
 """
 
 from __future__ import unicode_literals
-try:
-    import xmlrpclib as xmlrpc
-except ImportError:
-    import xmlrpc.client as xmlrpc
+
+import xmlrpc.client as xmlrpc
 
 from PyQt5.QtCore import QObject, QUrl, QByteArray
 from PyQt5.QtNetwork import QNetworkAccessManager, \
--- a/eric6/E5XML/XMLStreamWriterBase.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/E5XML/XMLStreamWriterBase.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,12 +8,7 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
-import sys
 import pickle
 import base64
 
@@ -45,10 +40,8 @@
             dict: self._write_dictionary,
             set: self._write_set,
             frozenset: self._write_frozenset,
+            bytes: self._write_bytes,
         }
-        # 'bytes' is identical to 'str' in Py2
-        if sys.version_info[0] >= 3:
-            self.basics[bytes] = self._write_bytes
 
         self.setAutoFormatting(True)
         self.setAutoFormattingIndent(2)
--- a/eric6/Globals/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Globals/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -12,10 +12,6 @@
 #
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import sys
 import os
@@ -425,12 +421,8 @@
     @return converted QByteArray
     @rtype QByteArray
     """
-    if sys.version_info[0] == 2:
-        if isinstance(txt, unicode):    # __IGNORE_WARNING__
-            txt = txt.encode("utf-8")
-    else:
-        if isinstance(txt, str):
-            txt = txt.encode("utf-8")
+    if isinstance(txt, str):
+        txt = txt.encode("utf-8")
     
     return QByteArray(txt)
 
--- a/eric6/Graphics/PackageDiagramBuilder.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Graphics/PackageDiagramBuilder.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,10 +11,7 @@
 
 import glob
 import os.path
-try:  # Py3
-    from itertools import zip_longest
-except ImportError:
-    from itertools import izip_longest as zip_longest    # __IGNORE_WARNING__
+from itertools import zip_longest
 
 from PyQt5.QtWidgets import QApplication, QGraphicsTextItem
 
--- a/eric6/Graphics/UMLClassDiagramBuilder.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Graphics/UMLClassDiagramBuilder.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,8 @@
 """
 
 from __future__ import unicode_literals
-try:  # Py3
-    from itertools import zip_longest
-except ImportError:
-    from itertools import izip_longest as zip_longest    # __IGNORE_WARNING__
+
+from itertools import zip_longest
 
 from PyQt5.QtWidgets import QGraphicsTextItem
 
--- a/eric6/HexEdit/HexEditSearchReplaceWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/HexEdit/HexEditSearchReplaceWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, Qt, QByteArray, QRegExp
 from PyQt5.QtGui import QRegExpValidator
--- a/eric6/HexEdit/HexEditWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/HexEdit/HexEditWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals, division
-try:
-    chr = unichr       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import math
 
--- a/eric6/Network/IRC/IrcChannelWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Network/IRC/IrcChannelWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,7 @@
 
 from __future__ import unicode_literals
 
-try:
-    from itertools import izip_longest as zip_longest   # __IGNORE_EXCEPTION__
-except ImportError:
-    from itertools import zip_longest
+from itertools import zip_longest
 
 import re
 
--- a/eric6/Network/IRC/IrcWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Network/IRC/IrcWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import re
 import logging
--- a/eric6/PipInterface/Pip.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PipInterface/Pip.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 import sys
--- a/eric6/PipInterface/PipDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PipInterface/PipDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QTimer, \
     QProcess
--- a/eric6/PipInterface/PipFreezeDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PipInterface/PipFreezeDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 
--- a/eric6/PipInterface/PipPackageDetailsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PipInterface/PipPackageDetailsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    basestring    # __IGNORE_WARNING__
-except NameError:
-    basestring = str
 
 from PyQt5.QtCore import Qt, QLocale
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem, \
@@ -181,7 +177,7 @@
         elif text is None:
             text = ""
         if forUrl:
-            if not isinstance(text, basestring) or \
+            if not isinstance(text, str) or \
                     not text.startswith(("http://", "https://", "ftp://")):
                 # ignore if the schema is not one of the listed ones
                 text = ""
--- a/eric6/PluginManager/PluginExceptions.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PluginManager/PluginExceptions.py	Sat Aug 31 12:58:11 2019 +0200
@@ -143,21 +143,3 @@
                 "PluginError",
                 "The plugin class {0} of module {1} is missing {2}.")\
             .format(class_, name, missing)
-
-
-class PluginPy2IncompatibleError(PluginError):
-    """
-    Class defining an error raised, when the plugin is incompatible
-    with Python2.
-    """
-    def __init__(self, name):
-        """
-        Constructor
-        
-        @param name name of the plugin module (string)
-        """
-        self._errorMessage = \
-            QCoreApplication.translate(
-                "PluginError",
-                "The plugin module {0} is not compatible with Python2.")\
-            .format(name)
--- a/eric6/PluginManager/PluginInstallDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PluginManager/PluginInstallDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -477,9 +477,6 @@
         if doCompile:
             dirName = os.path.join(destination, packageName)
             files = os.path.join(destination, pluginFileName)
-            if sys.version_info[0] == 2:
-                dirName = dirName.encode(sys.getfilesystemencoding())
-                files = files.encode(sys.getfilesystemencoding())
             os.path.join_unicode = False
             compileall.compile_dir(dirName, quiet=True)
             compileall.compile_file(files, quiet=True)
--- a/eric6/PluginManager/PluginManager.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/PluginManager/PluginManager.py	Sat Aug 31 12:58:11 2019 +0200
@@ -32,7 +32,7 @@
 
 from .PluginExceptions import PluginPathError, PluginModulesError, \
     PluginLoadError, PluginActivationError, PluginModuleFormatError, \
-    PluginClassFormatError, PluginPy2IncompatibleError
+    PluginClassFormatError
 
 import UI.PixmapCache
 
@@ -382,8 +382,6 @@
         @param reload_ flag indicating to reload the module (boolean)
         @exception PluginLoadError raised to indicate an issue loading
             the plug-in
-        @exception PluginPy2IncompatibleError raised to indicate the Python 2
-            incompatibility of a plug-in
         """
         try:
             fname = "{0}.py".format(os.path.join(directory, name))
@@ -393,21 +391,6 @@
                     "Module is missing the 'autoactivate' attribute.")
                 self.__failedModules[name] = module
                 raise PluginLoadError(name)
-            if sys.version_info[0] < 3:
-                if not hasattr(module, "python2Compatible"):
-                    module.error = self.tr(
-                        "Module is missing the Python2 compatibility flag."
-                        " Please update.")
-                    compatible = False
-                elif not getattr(module, "python2Compatible", True):
-                    module.error = self.tr(
-                        "Module is not Python2 compatible.")
-                    compatible = False
-                else:
-                    compatible = True
-                if not compatible:
-                    self.__failedModules[name] = module
-                    raise PluginPy2IncompatibleError(name)
             if getattr(module, "autoactivate", False):
                 self.__inactiveModules[name] = module
             else:
@@ -434,9 +417,6 @@
                     pass
         except PluginLoadError:
             print("Error loading plug-in module:", name)
-        except PluginPy2IncompatibleError:
-            print("Error loading plug-in module:", name)
-            print("The plug-in is not Python2 compatible.")
         except Exception as err:
             module = imp.new_module(name)
             module.error = self.tr(
--- a/eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sat Aug 31 12:58:11 2019 +0200
@@ -53,13 +53,6 @@
 
     if codestring and codestring[-1] != '\n':
         codestring = codestring + '\n'
-
-    # Check type for py2: if not str it's unicode
-#    if sys.version_info[0] == 2:
-#        try:
-#            codestring = codestring.encode('utf-8')
-#        except UnicodeError:
-#            pass
     
     return codestring
 
--- a/eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import fnmatch
--- a/eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os.path
 
--- a/eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os.path
 
--- a/eric6/Plugins/PluginWizardEricPlugin.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/PluginWizardEricPlugin.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QUrl, QDateTime, QByteArray, QTimer
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import json
 
--- a/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QObject, QEventLoop, QByteArray
 from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, \
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -24,9 +20,8 @@
 
 from .Ui_GitBisectLogBrowserDialog import Ui_GitBisectLogBrowserDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitBisectLogBrowserDialog(QWidget, Ui_GitBisectLogBrowserDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
@@ -24,9 +20,8 @@
 
 from .Ui_GitBlameDialog import Ui_GitBlameDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitBlameDialog(QDialog, Ui_GitBlameDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -23,9 +19,8 @@
 
 from .Ui_GitDescribeDialog import Ui_GitDescribeDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitDescribeDialog(QDialog, Ui_GitDescribeDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -23,9 +19,8 @@
 
 from .Ui_GitDialog import Ui_GitDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitDialog(QDialog, Ui_GitDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, QFileInfo, Qt
 from PyQt5.QtGui import QTextCursor, QCursor
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,158 +9,9 @@
 
 from __future__ import unicode_literals
 
-import re
-
-from PyQt5.QtGui import QSyntaxHighlighter, QColor, QTextCharFormat, QFont
-
-import Preferences
-
-try:
-    from E5Gui.E5GenericDiffHighlighter import TERMINAL, \
-        E5GenericDiffHighlighter
-except ImportError:
-    def TERMINAL(pattern):
-        """
-        Function to mark a pattern as the final one to search for.
-        
-        @param pattern pattern to be marked (string)
-        @return marked pattern (string)
-        """
-        return "__TERMINAL__:{0}".format(pattern)
-
-    # Cache the results of re.compile for performance reasons
-    _REGEX_CACHE = {}
+from PyQt5.QtGui import QColor
 
-    class E5GenericDiffHighlighter(QSyntaxHighlighter):
-        """
-        Class implementing a generic diff highlighter.
-        """
-        def __init__(self, doc):
-            """
-            Constructor
-            
-            @param doc reference to the text document (QTextDocument)
-            """
-            super(E5GenericDiffHighlighter, self).__init__(doc)
-            
-            self.textColor = QColor(0, 0, 0)
-            self.addedColor = QColor(190, 237, 190)
-            self.removedColor = QColor(237, 190, 190)
-            self.replacedColor = QColor(190, 190, 237)
-            self.contextColor = QColor(255, 220, 168)
-            self.headerColor = QColor(237, 237, 190)
-            
-            self.normalFormat = self.makeFormat()
-            
-            self._rules = []
-            self.generateRules()
-        
-        def generateRules(self):
-            """
-            Public method to generate the rule set.
-            
-            Note: This method must me implemented by derived syntax
-            highlighters.
-            """
-            pass
-        
-        def createRules(self, *rules):
-            """
-            Public method to create the highlighting rules.
-            
-            @param rules set of highlighting rules (list of tuples of rule
-                pattern (string) and highlighting format (QTextCharFormat))
-            """
-            for ruleFormat in rules:
-                rule, formats = ruleFormat
-                terminal = rule.startswith(TERMINAL(''))
-                if terminal:
-                    rule = rule[len(TERMINAL('')):]
-                try:
-                    regex = _REGEX_CACHE[rule]
-                except KeyError:
-                    regex = _REGEX_CACHE[rule] = re.compile(rule)
-                self._rules.append((regex, formats, terminal))
-        
-        def formats(self, line):
-            """
-            Public method to determine the highlighting formats for a line of
-            text.
-            
-            @param line text line to be highlighted (string)
-            @return list of matched highlighting rules (list of tuples of match
-                object and format (QTextCharFormat))
-            """
-            matched = []
-            for rx, formats, terminal in self._rules:
-                match = rx.match(line)
-                if not match:
-                    continue
-                matched.append([match, formats])
-                if terminal:
-                    return matched
-            
-            return matched
-        
-        def makeFormat(self, fg=None, bg=None, bold=False):
-            """
-            Public method to generate a format definition.
-            
-            @param fg foreground color (QColor)
-            @param bg background color (QColor)
-            @param bold flag indicating bold text (boolean)
-            @return format definiton (QTextCharFormat)
-            """
-            font = Preferences.getEditorOtherFonts("MonospacedFont")
-            charFormat = QTextCharFormat()
-            charFormat.setFontFamily(font.family())
-            charFormat.setFontPointSize(font.pointSize())
-            
-            if fg:
-                charFormat.setForeground(fg)
-            
-            if bg:
-                charFormat.setBackground(bg)
-            
-            if bold:
-                charFormat.setFontWeight(QFont.Bold)
-            
-            return charFormat
-        
-        def highlightBlock(self, text):
-            """
-            Public method to highlight a block of text.
-            
-            @param text text to be highlighted (string)
-            """
-            formats = self.formats(text)
-            if not formats:
-                # nothing matched
-                self.setFormat(0, len(text), self.normalFormat)
-                return
-            
-            for match, charFormat in formats:
-                start = match.start()
-                groups = match.groups()
-
-                # No groups in the regex, assume this is a single rule
-                # that spans the entire line
-                if not groups:
-                    self.setFormat(0, len(text), charFormat)
-                    continue
-
-                # Groups exist, rule is a tuple corresponding to group
-                for groupIndex, group in enumerate(groups):
-                    if not group:
-                        # empty match
-                        continue
-                    
-                    # allow None as a no-op format
-                    length = len(group)
-                    if charFormat[groupIndex]:
-                        self.setFormat(start, start + length,
-                                       charFormat[groupIndex])
-                    start += length
+from E5Gui.E5GenericDiffHighlighter import TERMINAL, E5GenericDiffHighlighter
 
 
 class GitDiffHighlighter(E5GenericDiffHighlighter):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import collections
@@ -26,13 +22,12 @@
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox, E5FileDialog
 
-from Globals import qVersionTuple
+from Globals import qVersionTuple, strToQByteArray
 
 from .Ui_GitLogBrowserDialog import Ui_GitLogBrowserDialog
 
 from .GitDiffHighlighter import GitDiffHighlighter
 from .GitDiffGenerator import GitDiffGenerator
-from .GitUtilities import strToQByteArray
 
 import UI.PixmapCache
 import Preferences
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -24,9 +20,8 @@
 
 from .Ui_GitReflogBrowserDialog import Ui_GitReflogBrowserDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitReflogBrowserDialog(QWidget, Ui_GitReflogBrowserDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -23,9 +19,8 @@
 
 from .Ui_GitRemoteRepositoriesDialog import Ui_GitRemoteRepositoriesDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitRemoteRepositoriesDialog(QWidget, Ui_GitRemoteRepositoriesDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -24,9 +20,8 @@
 
 from .Ui_GitStashBrowserDialog import Ui_GitStashBrowserDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitStashBrowserDialog(QWidget, Ui_GitStashBrowserDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import tempfile
@@ -25,14 +21,13 @@
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox
 
-from Globals import qVersionTuple
+from Globals import qVersionTuple, strToQByteArray
 
 from .Ui_GitStatusDialog import Ui_GitStatusDialog
 
 from .GitDiffHighlighter import GitDiffHighlighter
 from .GitDiffGenerator import GitDiffGenerator
 from .GitDiffParser import GitDiffParser
-from .GitUtilities import strToQByteArray
 
 import Preferences
 import UI.PixmapCache
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QProcess
 
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesStatusDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesStatusDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
@@ -23,9 +19,8 @@
 
 from .Ui_GitTagBranchListDialog import Ui_GitTagBranchListDialog
 
-from .GitUtilities import strToQByteArray
-
 import Preferences
+from Globals import strToQByteArray
 
 
 class GitTagBranchListDialog(QDialog, Ui_GitTagBranchListDialog):
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitUtilities.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitUtilities.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,9 +10,8 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
-from PyQt5.QtCore import QProcessEnvironment, QByteArray
+from PyQt5.QtCore import QProcessEnvironment
 
 import Utilities
 
@@ -45,23 +44,3 @@
         env.insert("LANGUAGE", language)
     
     proc.setProcessEnvironment(env)
-
-
-try:
-    from Globals import strToQByteArray
-except ImportError:
-    def strToQByteArray(txt):
-        """
-        Module function to convert a Python string into a QByteArray.
-        
-        @param txt Python string to be converted
-        @type str, bytes, bytearray, unicode
-        """
-        if sys.version_info[0] == 2:
-            if isinstance(txt, unicode):    # __IGNORE_WARNING__
-                txt = txt.encode("utf-8")
-        else:
-            if isinstance(txt, str):
-                txt = txt.encode("utf-8")
-        
-        return QByteArray(txt)
--- a/eric6/Plugins/VcsPlugins/vcsGit/git.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/git.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import shutil
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgClient.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgClient.py	Sat Aug 31 12:58:11 2019 +0200
@@ -7,11 +7,6 @@
 Module implementing an interface to the Mercurial command server.
 """
 
-try:
-    str = unicode
-except NameError:
-    pass
-
 import struct
 import io
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, QFileInfo, Qt
 from PyQt5.QtGui import QTextCursor, QCursor
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectBrowserHelper.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectBrowserHelper.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,6 +11,7 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import QObject
+from PyQt5.QtWidgets import QMenu
 
 
 class HgExtensionProjectBrowserHelper(QObject):
@@ -48,6 +49,14 @@
             reimplemented
         """
         raise NotImplementedError
+        
+        return {
+            'mainMenu': QMenu(),
+            'multiMenu': QMenu(),
+            'backMenu': QMenu(),
+            'dirMenu': QMenu(),
+            'dirMultiMenu': QMenu(),
+        }
     
     def menuTitle(self):
         """
@@ -60,6 +69,8 @@
             reimplemented
         """
         raise NotImplementedError
+        
+        return ""
     
     def showExtensionMenu(self, key, controlled):
         """
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectHelper.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectHelper.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,6 +10,7 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import QObject
+from PyQt5.QtWidgets import QMenu
 
 
 class HgExtensionProjectHelper(QObject):
@@ -71,6 +72,8 @@
             reimplemented
         """
         raise NotImplementedError
+        
+        return QMenu()
     
     def menuTitle(self):
         """
@@ -83,6 +86,8 @@
             reimplemented
         """
         raise NotImplementedError
+        
+        return ""
     
     def shutdown(self):
         """
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QProcess
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,6 +10,7 @@
 from __future__ import unicode_literals
 
 import os
+from configparser import ConfigParser
 
 from PyQt5.QtCore import pyqtSlot, Qt, QEvent
 from PyQt5.QtWidgets import QDialog, QTreeWidgetItem
@@ -18,7 +19,6 @@
 from E5Gui import E5MessageBox
 
 import Globals
-from Globals.E5ConfigParser import E5ConfigParser
 
 from .HgUtilities import getConfigPath
 from .HgUserConfigHostFingerprintDialog import \
@@ -104,7 +104,7 @@
         Public method to write the user configuration file.
         """
         if self.__config is None:
-            self.__config = E5ConfigParser()
+            self.__config = ConfigParser()
         
         ###################################################################
         ## ui section
@@ -307,7 +307,7 @@
         """
         cfgFile = getConfigPath()
         
-        self.__config = E5ConfigParser(delimiters=("=",))
+        self.__config = ConfigParser(delimiters=("=",))
         if self.__config.read(cfgFile):
             # step 1: extract user name and email
             try:
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py	Sat Aug 31 12:58:11 2019 +0200
@@ -22,11 +22,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/purge.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/purge.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListAllGuardsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListAllGuardsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListGuardsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListGuardsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QCoreApplication
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QAbstractItemView, \
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import shutil
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,7 +10,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -78,9 +77,6 @@
             for annotation in annotations:
                 author = annotation["author"]
                 line = annotation["line"]
-                if sys.version_info[0] == 2:
-                    author = author.decode('utf-8')
-                    line = line.decode('utf-8')
                 self.__generateItem(
                     annotation["revision"].number, author,
                     annotation["number"] + 1, line)
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,7 +10,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -90,9 +89,6 @@
             for entry in entries:
                 file = entry[0]
                 changelist = entry[1]
-                if sys.version_info[0] == 2:
-                    file = file.decode('utf-8')
-                    changelist = changelist.decode('utf-8')
                 if changelist not in self.changeListsDict:
                     self.changeListsDict[changelist] = []
                 filename = file.replace(path + os.sep, "")
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,7 +11,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -224,8 +223,6 @@
                         diff_list = []
                         for diff_sum in diff_summary:
                             path = diff_sum['path']
-                            if sys.version_info[0] == 2:
-                                path = path.decode('utf-8')
                             diff_list.append("{0} {1}".format(
                                 self.__getDiffSummaryKind(
                                     diff_sum['summarize_kind']),
@@ -237,8 +234,6 @@
                             url1, revision1=rev1,
                             url_or_path2=url2, revision2=rev2,
                             recurse=recurse)
-                        if sys.version_info[0] == 2:
-                            diffText = diffText.decode('utf-8')
                 else:
                     if pegRev is not None:
                         diffText = self.client.diff_peg(
@@ -250,8 +245,6 @@
                         diffText = self.client.diff(
                             tmpdir, name,
                             revision1=rev1, revision2=rev2, recurse=recurse)
-                    if sys.version_info[0] == 2:
-                        diffText = diffText.decode('utf-8')
                 counter = 0
                 for line in diffText.splitlines():
                     if line.startswith("--- ") or \
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,7 +11,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -67,8 +66,6 @@
             entries = self.client.info2(fn, recurse=False)
             infoStr = "<table>"
             for path, info in entries:
-                if sys.version_info[0] == 2:
-                    path = path.decode('utf-8')
                 infoStr += self.tr(
                     "<tr><td><b>Path (relative to project):</b></td>"
                     "<td>{0}</td></tr>").format(path)
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,7 +10,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -309,9 +308,6 @@
             for log in logs:
                 author = log["author"]
                 message = log["message"]
-                if sys.version_info[0] == 2:
-                    author = author.decode('utf-8')
-                    message = message.decode('utf-8')
                 self.__generateLogItem(
                     author, log["date"], message,
                     log["revision"], log['changed_paths'])
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,7 +11,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -121,12 +120,7 @@
                 proplist = self.client.proplist(name, recurse=recursive)
                 counter = 0
                 for path, prop in proplist:
-                    if sys.version_info[0] == 2:
-                        path = path.decode('utf-8')
                     for propName, propVal in list(prop.items()):
-                        if sys.version_info[0] == 2:
-                            propName = propName.decode('utf-8')
-                            propVal = propVal.decode('utf-8')
                         self.__generateItem(path, propName, propVal)
                         self.propsFound = True
                     counter += 1
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,7 +11,6 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 
 import pysvn
 
@@ -326,9 +325,6 @@
                         depth = pysvn.depth.immediate
                     changelists = self.client.get_changelist(name, depth=depth)
                     for fpath, changelist in changelists:
-                        if sys.version_info[0] == 2:
-                            fpath = fpath.decode('utf-8')
-                            changelist = changelist.decode('utf-8')
                         fpath = Utilities.normcasepath(fpath)
                         changelistsDict[fpath] = changelist
                 hideChangelistColumn = hideChangelistColumn and \
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,9 +10,9 @@
 from __future__ import unicode_literals
 
 import os
-import sys
 import shutil
 import time
+from urllib.parse import quote
 
 from PyQt5.QtCore import Qt, QMutexLocker, pyqtSignal, QRegExp, QDateTime, \
     QCoreApplication
@@ -1075,10 +1075,9 @@
             
             reposRoot = rx_base.cap(1)
             if tagOp in [1, 4]:
-                url = '{0}/tags/{1}'.format(reposRoot, Utilities.quote(tag))
+                url = '{0}/tags/{1}'.format(reposRoot, quote(tag))
             elif tagOp in [2, 8]:
-                url = '{0}/branches/{1}'.format(
-                    reposRoot, Utilities.quote(tag))
+                url = '{0}/branches/{1}'.format(reposRoot, quote(tag))
         else:
             url = self.__svnURL(tag)
         
@@ -1219,10 +1218,9 @@
             reposRoot = rx_base.cap(1)
             tn = tag
             if tagType == 1:
-                url = '{0}/tags/{1}'.format(reposRoot, Utilities.quote(tag))
+                url = '{0}/tags/{1}'.format(reposRoot, quote(tag))
             elif tagType == 2:
-                url = '{0}/branches/{1}'.format(
-                    reposRoot, Utilities.quote(tag))
+                url = '{0}/branches/{1}'.format(reposRoot, quote(tag))
             elif tagType == 4:
                 url = '{0}/trunk'.format(reposRoot)
                 tn = 'HEAD'
@@ -1725,8 +1723,6 @@
             apiVersion = QCoreApplication.translate('subversion', "unknown")
         
         hmsz = time.strftime("%H:%M:%S %Z", time.localtime(entry.commit_time))
-        if sys.version_info[0] == 2:
-            hmsz = hmsz.decode(sys.getfilesystemencoding())
         return QCoreApplication.translate(
             'subversion',
             """<h3>Repository information</h3>"""
@@ -2486,8 +2482,6 @@
                                                 depth=pysvn.depth.infinity)
                 for entry in entries:
                     changelist = entry[1]
-                    if sys.version_info[0] == 2:
-                        changelist = changelist.decode('utf-8')
                     if changelist not in changelists:
                         changelists.append(changelist)
             except pysvn.ClientError:
@@ -2534,20 +2528,18 @@
             scheme = url[0]
             host = url[1]
             port, path = url[2].split("/", 1)
-            return "{0}:{1}:{2}/{3}".format(scheme, host, port,
-                                            Utilities.quote(path))
+            return "{0}:{1}:{2}/{3}".format(scheme, host, port, quote(path))
         else:
             scheme = url[0]
             if scheme == "file":
-                return "{0}:{1}".format(scheme, Utilities.quote(url[1]))
+                return "{0}:{1}".format(scheme, quote(url[1]))
             else:
                 try:
                     host, path = url[1][2:].split("/", 1)
                 except ValueError:
                     host = url[1][2:]
                     path = ""
-                return "{0}://{1}/{2}".format(scheme, host,
-                                              Utilities.quote(path))
+                return "{0}://{1}/{2}".format(scheme, host, quote(path))
 
     def svnNormalizeURL(self, url):
         """
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, QTimer, QProcess, QProcessEnvironment, \
     QRegExp, Qt
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QRegExp, QProcess
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,14 +8,11 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
 import shutil
+from urllib.parse import quote
 
 from PyQt5.QtCore import pyqtSignal, QProcess, QRegExp, QCoreApplication
 from PyQt5.QtWidgets import QLineEdit, QDialog, QInputDialog, QApplication
@@ -994,10 +991,9 @@
             
             reposRoot = rx_base.cap(1)
             if tagOp in [1, 4]:
-                url = '{0}/tags/{1}'.format(reposRoot, Utilities.quote(tag))
+                url = '{0}/tags/{1}'.format(reposRoot, quote(tag))
             elif tagOp in [2, 8]:
-                url = '{0}/branches/{1}'.format(
-                    reposRoot, Utilities.quote(tag))
+                url = '{0}/branches/{1}'.format(reposRoot, quote(tag))
         else:
             url = self.__svnURL(tag)
         
@@ -1117,10 +1113,9 @@
             reposRoot = rx_base.cap(1)
             tn = tag
             if tagType == 1:
-                url = '{0}/tags/{1}'.format(reposRoot, Utilities.quote(tag))
+                url = '{0}/tags/{1}'.format(reposRoot, quote(tag))
             elif tagType == 2:
-                url = '{0}/branches/{1}'.format(
-                    reposRoot, Utilities.quote(tag))
+                url = '{0}/branches/{1}'.format(reposRoot, quote(tag))
             elif tagType == 4:
                 url = '{0}/trunk'.format(reposRoot)
                 tn = 'HEAD'
@@ -2307,20 +2302,18 @@
             scheme = url[0]
             host = url[1]
             port, path = url[2].split("/", 1)
-            return "{0}:{1}:{2}/{3}".format(
-                scheme, host, port, Utilities.quote(path))
+            return "{0}:{1}:{2}/{3}".format(scheme, host, port, quote(path))
         else:
             scheme = url[0]
             if scheme == "file":
-                return "{0}:{1}".format(scheme, Utilities.quote(url[1]))
+                return "{0}:{1}".format(scheme, quote(url[1]))
             else:
                 try:
                     host, path = url[1][2:].split("/", 1)
                 except ValueError:
                     host = url[1][2:]
                     path = ""
-                return "{0}://{1}/{2}".format(
-                    scheme, host, Utilities.quote(path))
+                return "{0}://{1}/{2}".format(scheme, host, quote(path))
 
     def svnNormalizeURL(self, url):
         """
--- a/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -409,14 +409,8 @@
                     flags |= re.DOTALL
                 if self.verboseCheckBox.isChecked():
                     flags |= re.VERBOSE
-                if self.py2Button.isChecked():
-                    if self.localeCheckBox.isChecked():
-                        flags |= re.LOCALE
-                    if self.unicodeCheckBox.isChecked():
-                        flags |= re.UNICODE
-                else:
-                    if self.unicodeCheckBox.isChecked():
-                        flags |= re.ASCII
+                if self.unicodeCheckBox.isChecked():
+                    flags |= re.ASCII
                 re.compile(regex, flags)
                 E5MessageBox.information(
                     self,
@@ -465,14 +459,8 @@
                     flags |= re.DOTALL
                 if self.verboseCheckBox.isChecked():
                     flags |= re.VERBOSE
-                if self.py2Button.isChecked():
-                    if self.localeCheckBox.isChecked():
-                        flags |= re.LOCALE
-                    if self.unicodeCheckBox.isChecked():
-                        flags |= re.UNICODE
-                else:
-                    if self.unicodeCheckBox.isChecked():
-                        flags |= re.ASCII
+                if self.unicodeCheckBox.isChecked():
+                    flags |= re.ASCII
                 regobj = re.compile(regex, flags)
                 matchobj = regobj.search(text, startpos)
                 if matchobj is not None:
@@ -608,31 +596,6 @@
         """
         self.nextButton.setEnabled(False)
         
-    @pyqtSlot(bool)
-    def on_py2Button_toggled(self, checked):
-        """
-        Private slot called when the Python version was selected.
-        
-        @param checked state of the Python 2 button (boolean)
-        """
-        # set the checkboxes
-        self.localeCheckBox.setEnabled(checked)
-        if checked:
-            self.unicodeCheckBox.setText(self.tr("Unicode"))
-        else:
-            self.unicodeCheckBox.setText(self.tr("ASCII"))
-        self.unicodeCheckBox.setChecked(not self.unicodeCheckBox.isChecked())
-        
-        # clear the result table
-        self.resultTable.clear()
-        self.resultTable.setColumnCount(0)
-        self.resultTable.setRowCount(0)
-        
-        # remove the highlight
-        tc = self.textTextEdit.textCursor()
-        tc.setPosition(0)
-        self.textTextEdit.setTextCursor(tc)
-        
     def getCode(self, indLevel, indString):
         """
         Public method to get the source code.
@@ -662,14 +625,8 @@
             flags.append('re.DOTALL')
         if self.verboseCheckBox.isChecked():
             flags.append('re.VERBOSE')
-        if self.localeCheckBox.isChecked() and \
-           self.py2Button.isChecked():
-            flags.append('re.LOCALE')
         if self.unicodeCheckBox.isChecked():
-            if self.py2Button.isChecked():
-                flags.append('re.UNICODE')
-            else:
-                flags.append('re.ASCII')
+            flags.append('re.ASCII')
         flags = " | ".join(flags)
         
         code = ''
--- a/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui	Sat Aug 31 12:58:11 2019 +0200
@@ -18,51 +18,6 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QGroupBox" name="versionGroup">
-     <property name="title">
-      <string>Python Version</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <item>
-       <widget class="QRadioButton" name="py2Button">
-        <property name="statusTip">
-         <string/>
-        </property>
-        <property name="text">
-         <string>Python 2</string>
-        </property>
-        <property name="checked">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="py3Button">
-        <property name="text">
-         <string>Python 3</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>535</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <layout class="QHBoxLayout">
      <item>
       <widget class="QLabel" name="variableLabel">
@@ -428,13 +383,6 @@
          </property>
         </widget>
        </item>
-       <item row="1" column="2">
-        <widget class="QCheckBox" name="unicodeCheckBox">
-         <property name="text">
-          <string>ASCII</string>
-         </property>
-        </widget>
-       </item>
        <item row="1" column="0">
         <widget class="QCheckBox" name="verboseCheckBox">
          <property name="text">
@@ -453,12 +401,9 @@
         </widget>
        </item>
        <item row="1" column="1">
-        <widget class="QCheckBox" name="localeCheckBox">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
+        <widget class="QCheckBox" name="unicodeCheckBox">
          <property name="text">
-          <string>Observe Locale</string>
+          <string>ASCII</string>
          </property>
         </widget>
        </item>
@@ -513,8 +458,6 @@
  </widget>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
-  <tabstop>py2Button</tabstop>
-  <tabstop>py3Button</tabstop>
   <tabstop>variableLineEdit</tabstop>
   <tabstop>importCheckBox</tabstop>
   <tabstop>commentButton</tabstop>
@@ -539,13 +482,11 @@
   <tabstop>regexpTextEdit</tabstop>
   <tabstop>textTextEdit</tabstop>
   <tabstop>caseSensitiveCheckBox</tabstop>
+  <tabstop>multilineCheckBox</tabstop>
+  <tabstop>dotallCheckBox</tabstop>
   <tabstop>verboseCheckBox</tabstop>
-  <tabstop>multilineCheckBox</tabstop>
-  <tabstop>localeCheckBox</tabstop>
-  <tabstop>dotallCheckBox</tabstop>
   <tabstop>unicodeCheckBox</tabstop>
   <tabstop>resultTable</tabstop>
-  <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode    # __IGNORE_WARNING__
-except NameError:
-    pass
 
 import os
 import sys
--- a/eric6/Preferences/ConfigurationPages/HelpDocumentationPage.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/HelpDocumentationPage.py	Sat Aug 31 12:58:11 2019 +0200
@@ -62,11 +62,6 @@
         self.pyside2DocDirPicker.setFilters(self.tr(
             "HTML Files (*.html *.htm);;All Files (*)"))
         
-        try:
-            import PyQt5        # __IGNORE_WARNING__
-        except ImportError:
-            self.pyqt5Group.setEnabled(False)
-        
         pyside_py2, pyside_py3 = Utilities.checkPyside("1")
         if pyside_py2 or pyside_py3:
             self.pysideGroup.setEnabled(True)
--- a/eric6/Preferences/ProgramsDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Preferences/ProgramsDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import re
@@ -144,7 +140,7 @@
         # 2.1b. Forms Compiler PyQt4
         self.__createProgramEntry(
             self.tr("Forms Compiler (Python, PyQt4)"),
-            Utilities.generatePyQtToolPath("pyuic4", ["py3uic4", "py2uic4"]),
+            Utilities.generatePyQtToolPath("pyuic4", ["py3uic4"]),
             '--version', 'Python User', 4)
         # 2.1c. Resource Compiler PyQt4
         self.__createProgramEntry(
@@ -161,7 +157,7 @@
         # 2.2b. Forms Compiler PyQt5
         self.__createProgramEntry(
             self.tr("Forms Compiler (Python, PyQt5)"),
-            Utilities.generatePyQtToolPath("pyuic5", ["py3uic5", "py2uic5"]),
+            Utilities.generatePyQtToolPath("pyuic5", ["py3uic5"]),
             '--version', 'Python User', 4)
         # 2.2c. Resource Compiler PyQt5
         self.__createProgramEntry(
--- a/eric6/Preferences/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Preferences/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -17,10 +17,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    basestring    # __IGNORE_WARNING__
-except NameError:
-    basestring = str
 
 import os
 import fnmatch
@@ -116,18 +112,12 @@
         "MaxVariableSize": 0,     # Bytes, 0 = no limit
         "BgColorNew": QColor("#28FFEEAA"),
         "BgColorChanged": QColor("#2870FF66"),
-    }
-    debuggerDefaults["AllowedHosts"] = ["127.0.0.1", "::1%0"]
-    if sys.version_info[0] == 2:
+        "AllowedHosts": ["127.0.0.1", "::1%0"],
         # space separated list of Python2 extensions
-        debuggerDefaults["PythonExtensions"] = ".py .pyw .py2 .pyw2 .ptl"
+        "PythonExtensions": ".py2 .pyw2 .ptl",
         # space separated list of Python3 extensions
-        debuggerDefaults["Python3Extensions"] = ".py3 .pyw3"
-    else:
-        # space separated list of Python2 extensions
-        debuggerDefaults["PythonExtensions"] = ".py2 .pyw2 .ptl"
-        # space separated list of Python3 extensions
-        debuggerDefaults["Python3Extensions"] = ".py .pyw .py3 .pyw3"
+        "Python3Extensions": ".py .pyw .py3 .pyw3"
+    }
     
     # defaults for the UI settings
     uiDefaults = {
@@ -3019,7 +3009,7 @@
             download["Downloaded"] = prefClass.settings.value("Downloaded")
             if download["Downloaded"] is None:
                 download["Downloaded"] = QDateTime()
-            elif isinstance(download["Downloaded"], basestring):
+            elif isinstance(download["Downloaded"], str):
                 download["Downloaded"] = QDateTime.fromString(
                     download["Downloaded"], "yyyy-MM-dd hh:mm:ss")
             downloads.append(download)
--- a/eric6/Project/CreateDialogCodeDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/CreateDialogCodeDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import sys
 import os
--- a/eric6/Project/Project.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/Project.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode   # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 import time
--- a/eric6/Project/ProjectFormsBrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/ProjectFormsBrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import sys
@@ -674,17 +670,17 @@
                 ["Python", "Python2", "Python3"]:
             if self.project.getProjectType() in ["Qt4", ]:
                 self.__uicompiler = Utilities.generatePyQtToolPath(
-                    'pyuic4', ["py3uic4", "py2uic4"])
+                    'pyuic4', ["py3uic4"])
             elif self.project.getProjectType() in ["PyQt5"]:
                 self.__uicompiler = Utilities.generatePyQtToolPath(
-                    'pyuic5', ["py3uic5", "py2uic5"])
+                    'pyuic5', ["py3uic5"])
             elif self.project.getProjectType() in ["E6Plugin"]:
                 if PYQT_VERSION < 0x050000:
                     self.__uicompiler = Utilities.generatePyQtToolPath(
-                        'pyuic4', ["py3uic4", "py2uic4"])
+                        'pyuic4', ["py3uic4"])
                 else:
                     self.__uicompiler = Utilities.generatePyQtToolPath(
-                        'pyuic5', ["py3uic5", "py2uic5"])
+                        'pyuic5', ["py3uic5"])
             elif self.project.getProjectType() == "PySide":
                 self.__uicompiler = \
                     Utilities.generatePySideToolPath('pyside-uic', "1")
--- a/eric6/Project/ProjectInterfacesBrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/ProjectInterfacesBrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import glob
--- a/eric6/Project/ProjectProtocolsBrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/ProjectProtocolsBrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import glob
--- a/eric6/Project/ProjectResourcesBrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/ProjectResourcesBrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/Project/ProjectTranslationsBrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/ProjectTranslationsBrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import shutil
--- a/eric6/Project/UicLoadUi.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Project/UicLoadUi.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import print_function
-try:
-    bytes = unicode     # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import sys
 import json
--- a/eric6/QScintilla/Editor.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/QScintilla/Editor.py	Sat Aug 31 12:58:11 2019 +0200
@@ -7,11 +7,6 @@
 Module implementing the editor component of the eric6 IDE.
 """
 from __future__ import unicode_literals
-try:
-    str = unicode
-    chr = unichr
-except NameError:
-    pass
 
 import os
 import re
--- a/eric6/QScintilla/Exporters/ExporterHTML.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/QScintilla/Exporters/ExporterHTML.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,16 +9,12 @@
 
 from __future__ import unicode_literals
 
-try:  # Only for Py2
-    import StringIO as io   # __IGNORE_EXCEPTION__
-except (ImportError, NameError):
-    import io       # __IGNORE_WARNING__
-
 # This code is a port of the C++ code found in SciTE 1.74
 # Original code: Copyright 1998-2006 by Neil Hodgson <neilh@scintilla.org>
 
 import os
 import sys
+import io
 
 from PyQt5.QtCore import Qt
 from PyQt5.QtGui import QCursor, QFontInfo
--- a/eric6/QScintilla/Lexers/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/QScintilla/Lexers/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -140,7 +140,7 @@
         "Python3": [QCoreApplication.translate('Lexers', "Python3"),
                     'dummy.py', "lexerPython3.png"],
         "MicroPython": [QCoreApplication.translate('Lexers', "MicroPython"),
-                    'dummy.py', "micropython"],
+                        'dummy.py', "micropython"],
         "QSS": [QCoreApplication.translate('Lexers', "QSS"), 'dummy.qss',
                 "lexerCSS.png"],
         "Ruby": [QCoreApplication.translate('Lexers', "Ruby"), 'dummy.rb',
--- a/eric6/QScintilla/SpellChecker.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/QScintilla/SpellChecker.py	Sat Aug 31 12:58:11 2019 +0200
@@ -546,12 +546,3 @@
                     return self
         
         raise StopIteration
-    
-    if sys.version_info.major == 2:
-        def next(self):
-            """
-            Public method to advance to the next error.
-            
-            @return self
-            """
-            return self.__next__()
--- a/eric6/QScintilla/TypingCompleters/CompleterPython.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/QScintilla/TypingCompleters/CompleterPython.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    chr = unichr
-except NameError:
-    pass
 
 import re
 
--- a/eric6/Toolbox/PyQt4ImportHook.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Toolbox/PyQt4ImportHook.py	Sat Aug 31 12:58:11 2019 +0200
@@ -94,12 +94,3 @@
     import PyQt5    # __IGNORE_WARNING__
 except ImportError:
     sys.meta_path.insert(0, PyQt4Importer())
-    
-    if sys.version_info[0] == 2:
-        try:
-            from PyQt5 import sip
-        except ImportError:
-            import sip
-        sip.setapi('QString', 2)
-        sip.setapi('QVariant', 2)
-        sip.setapi('QTextStream', 2)
--- a/eric6/UI/BrowserModel.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/BrowserModel.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,13 +8,8 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
-import sys
 import fnmatch
 import json
 
@@ -1149,7 +1144,7 @@
         elif self.isJavaScriptFile():
             pixName = "fileJavascript.png"
             self._populated = False
-            self._lazyPopulation = sys.version_info[0] == 3
+            self._lazyPopulation = True
             self._moduleName = os.path.basename(finfo)
         else:
             pixName = "fileMisc.png"
--- a/eric6/UI/CodeDocumentationViewer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/CodeDocumentationViewer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    basestring    # __IGNORE_WARNING__
-except NameError:
-    basestring = str
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QTimer
 from PyQt5.QtGui import QCursor
--- a/eric6/UI/CompareDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/CompareDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    basestring    # __IGNORE_WARNING__
-except NameError:
-    basestring = str
 
 import re
 from difflib import _mdiff, IS_CHARACTER_JUNK
@@ -288,9 +284,9 @@
         self.diffButton.setEnabled(False)
         self.diffButton.hide()
         
-        if isinstance(lines1, basestring):
+        if isinstance(lines1, str):
             lines1 = lines1.splitlines(True)
-        if isinstance(lines2, basestring):
+        if isinstance(lines2, str):
             lines2 = lines2.splitlines(True)
         
         self.__compare(lines1, lines2)
--- a/eric6/UI/FindFileDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/FindFileDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -11,7 +11,6 @@
 
 import os
 import re
-import sys
 
 from PyQt5.QtCore import pyqtSignal, Qt, pyqtSlot
 from PyQt5.QtGui import QCursor
@@ -387,10 +386,7 @@
             txt = re.escape(ct)
         if wo:
             txt = "\\b{0}\\b".format(txt)
-        if sys.version_info[0] == 2:
-            flags = re.UNICODE | re.LOCALE
-        else:
-            flags = re.UNICODE
+        flags = re.UNICODE
         if not cs:
             flags |= re.IGNORECASE
         try:
--- a/eric6/UI/Previewers/PreviewerHTML.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/Previewers/PreviewerHTML.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,18 +9,13 @@
 
 from __future__ import unicode_literals
 
-try:  # Only for Py2
-    import StringIO as io   # __IGNORE_EXCEPTION__
-    str = unicode
-except (ImportError, NameError):
-    import io       # __IGNORE_WARNING__
-
 import os
 import threading
 import re
 import shutil
 import tempfile
 import sys
+import io
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QSize, QThread
 from PyQt5.QtGui import QCursor
--- a/eric6/UI/PythonAstViewer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/PythonAstViewer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,11 +10,6 @@
 
 from __future__ import unicode_literals
 
-try:
-    str = unicode
-except NameError:
-    pass
-
 import ast
 
 from PyQt5.QtCore import pyqtSlot, Qt, QTimer
--- a/eric6/UI/SymbolsWidget.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/SymbolsWidget.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,17 +9,9 @@
 
 from __future__ import unicode_literals
 
-try:
-    # Py2
-    str = unicode
-    chr = unichr
-    import htmlentitydefs as html_entities
-except (NameError, ImportError):
-    # Py3
-    import html.entities as html_entities
-
 import sys
 import unicodedata
+import html.entities
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, QAbstractTableModel, \
     QModelIndex, Qt, QItemSelectionModel, QLocale
@@ -372,9 +364,9 @@
             elif col == 2:
                 return "0x{0:04x}".format(symbolId)
             elif col == 3:
-                if symbolId in html_entities.codepoint2name:
+                if symbolId in html.entities.codepoint2name:
                     return "&{0};".format(
-                        html_entities.codepoint2name[symbolId])
+                        html.entities.codepoint2name[symbolId])
             elif col == 4:
                 return unicodedata.name(chr(symbolId), '').title()
         
--- a/eric6/UI/UserInterface.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/UI/UserInterface.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 import sys
@@ -1982,7 +1978,6 @@
             self.actions.append(self.condaWidgetActivateAct)
             self.addAction(self.condaWidgetActivateAct)
         
-        # TODO: add action for "MicroPython", Ctrl+Alt+Shift+M
         if self.microPythonWidget is not None:
             self.microPythonWidgetActivateAct = E5Action(
                 self.tr('MicroPython'),
@@ -2783,25 +2778,21 @@
         except ImportError:
             self.pyqt4DocAct = None
         
-        try:
-            import PyQt5        # __IGNORE_WARNING__
-            self.pyqt5DocAct = E5Action(
-                self.tr('PyQt5 Documentation'),
-                self.tr('PyQt&5 Documentation'),
-                0, 0, self, 'pyqt5_documentation')
-            self.pyqt5DocAct.setStatusTip(self.tr(
-                'Open PyQt5 Documentation'))
-            self.pyqt5DocAct.setWhatsThis(self.tr(
-                """<b>PyQt5 Documentation</b>"""
-                """<p>Display the PyQt5 Documentation. Dependent upon your"""
-                """ settings, this will either show the help in Eric's"""
-                """ internal help viewer/web browser, or execute a web"""
-                """ browser or Qt Assistant. </p>"""
-            ))
-            self.pyqt5DocAct.triggered.connect(self.__showPyQt5Doc)
-            self.actions.append(self.pyqt5DocAct)
-        except ImportError:
-            self.pyqt5DocAct = None
+        self.pyqt5DocAct = E5Action(
+            self.tr('PyQt5 Documentation'),
+            self.tr('PyQt&5 Documentation'),
+            0, 0, self, 'pyqt5_documentation')
+        self.pyqt5DocAct.setStatusTip(self.tr(
+            'Open PyQt5 Documentation'))
+        self.pyqt5DocAct.setWhatsThis(self.tr(
+            """<b>PyQt5 Documentation</b>"""
+            """<p>Display the PyQt5 Documentation. Dependent upon your"""
+            """ settings, this will either show the help in Eric's"""
+            """ internal help viewer/web browser, or execute a web"""
+            """ browser or Qt Assistant. </p>"""
+        ))
+        self.pyqt5DocAct.triggered.connect(self.__showPyQt5Doc)
+        self.actions.append(self.pyqt5DocAct)
         
     def __initPythonDocActions(self):
         """
--- a/eric6/Utilities/BackgroundService.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Utilities/BackgroundService.py	Sat Aug 31 12:58:11 2019 +0200
@@ -139,8 +139,7 @@
             self.__processQueue()
         else:
             packedData = json.dumps([fx, fn, data])
-            if sys.version_info[0] == 3:
-                packedData = bytes(packedData, 'utf-8')
+            packedData = bytes(packedData, 'utf-8')
             header = struct.pack(
                 b'!II', len(packedData), adler32(packedData) & 0xffffffff)
             connection.write(header)
@@ -171,8 +170,7 @@
 
             assert adler32(packedData) & 0xffffffff == datahash, \
                 'Hashes not equal'
-            if sys.version_info[0] == 3:
-                packedData = packedData.decode('utf-8')
+            packedData = packedData.decode('utf-8')
             # "check" if is's a tuple of 3 values
             fx, fn, data = json.loads(packedData)
             
@@ -385,8 +383,7 @@
         if not connection.waitForReadyRead(1000):
             return
         lang = connection.read(64)
-        if sys.version_info[0] == 3:
-            lang = lang.decode('utf-8')
+        lang = lang.decode('utf-8')
         # Avoid hanging of eric on shutdown
         if self.connections.get(lang):
             self.connections[lang].close()
--- a/eric6/Utilities/ClassBrowsers/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Utilities/ClassBrowsers/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -23,7 +23,6 @@
 
 import os
 import imp
-import sys
 
 import Preferences
 
@@ -78,7 +77,7 @@
         from . import rbclbr
         dictionary = rbclbr.readmodule_ex(module, path)
         rbclbr._modules.clear()
-    elif ext in __extensions["JavaScript"] and sys.version_info[0] == 3:
+    elif ext in __extensions["JavaScript"]:
         from . import jsclbr
         dictionary = jsclbr.readmodule_ex(module, path)
         jsclbr._modules.clear()
--- a/eric6/Utilities/__init__.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Utilities/__init__.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,22 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-    import locale
-    import urllib
-
-    def quote(url):
-        """
-        Replacement for the urllib.quote function because of unicode problems.
-        
-        @param url text to quote (string)
-        @return quoted url (string)
-        """
-        return urllib.quote(url.encode('utf-8'))
-except NameError:
-    basestring = str
-    from urllib.parse import quote    # __IGNORE_WARNING__
 
 import os
 import sys
@@ -623,7 +607,7 @@
     @return dictionary of string, boolean, complex, float and int
     """
     flags = {}
-    if isinstance(text, basestring):
+    if isinstance(text, str):
         lines = text.rstrip().splitlines()
     else:
         lines = text
@@ -1530,9 +1514,6 @@
     if isWindowsPlatform():
         if not user:
             return win32_GetUserName()
-        else:
-            if sys.version_info[0] == 2:
-                user = user.decode(locale.getpreferredencoding())
     
     return user
 
@@ -1653,7 +1634,7 @@
         elif ext in py3Ext and ext not in py2Ext:
             pyVer = 3
         elif source:
-            if isinstance(source, basestring):
+            if isinstance(source, str):
                 line0 = source.splitlines()[0]
             else:
                 line0 = source[0]
--- a/eric6/Utilities/binplistlib.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/Utilities/binplistlib.py	Sat Aug 31 12:58:11 2019 +0200
@@ -53,10 +53,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 #
 # Ported from the Python 2 biplist.py script.
--- a/eric6/VCS/StatusMonitorThread.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/VCS/StatusMonitorThread.py	Sat Aug 31 12:58:11 2019 +0200
@@ -203,6 +203,8 @@
             implemented by a subclass
         """
         raise RuntimeError('Not implemented')
+        
+        return tuple()
     
     def _getInfo(self):
         """
--- a/eric6/VCS/VersionControl.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/VCS/VersionControl.py	Sat Aug 31 12:58:11 2019 +0200
@@ -97,6 +97,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return (False, "")
+        
     def vcsInit(self, vcsDir, noDialog=False):
         """
         Public method used to initialize the vcs.
@@ -109,6 +111,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsConvertProject(self, vcsDataDict, project, addAll=True):
         """
         Public method to convert an uncontrolled project to a version
@@ -138,13 +142,15 @@
         @param addAll flag indicating to add all files to the repository
         @type bool
         @return tuple containing a flag indicating an execution without errors
-            and a flag indicating the version controll status
+            and a flag indicating the version control status
         @rtype tuple of (bool, bool)
         @exception RuntimeError to indicate that this method must be
             implemented by a subclass
         """
         raise RuntimeError('Not implemented')
         
+        return (False, False)
+        
     def vcsCheckout(self, vcsDataDict, projectDir, noDialog=False):
         """
         Public method used to check the project out of the vcs.
@@ -158,6 +164,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsExport(self, vcsDataDict, projectDir):
         """
         Public method used to export a directory from the vcs.
@@ -170,6 +178,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsCommit(self, name, message, noDialog=False):
         """
         Public method used to make the change of a file/directory permanent in
@@ -184,6 +194,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsUpdate(self, name, noDialog=False):
         """
         Public method used to update a file/directory in the vcs.
@@ -197,6 +209,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsAdd(self, name, isDir=False, noDialog=False):
         """
         Public method used to add a file/directory in the vcs.
@@ -243,6 +257,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsMove(self, name, project, target=None, noDialog=False):
         """
         Public method used to move a file/directory.
@@ -257,6 +273,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsLogBrowser(self, name, isFile=False):
         """
         Public method used to view the log of a file/directory in the vcs
@@ -322,6 +340,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def vcsMerge(self, name):
         """
         Public method used to merge a tag/branch into the local project.
@@ -344,6 +364,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return 0
+        
     def vcsAllRegisteredStates(self, names, dname):
         """
         Public method used to get the registered states of a number of files
@@ -358,6 +380,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return {}
+        
     def vcsName(self):
         """
         Public method returning the name of the vcs.
@@ -368,6 +392,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return ""
+        
     def vcsCleanup(self, name):
         """
         Public method used to cleanup the local copy.
@@ -424,6 +450,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return ""
+        
     def vcsGetProjectBrowserHelper(self, browser, project,
                                    isTranslationsBrowser=False):
         """
@@ -440,6 +468,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return None                         # __IGNORE_WARNING_M831__
+        
     def vcsGetProjectHelper(self, project):
         """
         Public method to instanciate a helper object for the project.
@@ -450,6 +480,8 @@
             implemented by a subclass
         """
         raise RuntimeError('Not implemented')
+        
+        return None                         # __IGNORE_WARNING_M831__
     
     #####################################################################
     ## methods above need to be implemented by a subclass
--- a/eric6/ViewManager/ViewManager.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/ViewManager/ViewManager.py	Sat Aug 31 12:58:11 2019 +0200
@@ -339,6 +339,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def canTile(self):
         """
         Public method to signal if tiling of managed windows is available.
@@ -348,6 +350,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return False
+        
     def tile(self):
         """
         Public method to tile the managed windows.
@@ -373,6 +377,8 @@
         """
         raise RuntimeError('Not implemented')
         
+        return None                         # __IGNORE_WARNING_M831__
+        
     def _removeAllViews(self):
         """
         Protected method to remove all views (i.e. windows).
--- a/eric6/VirtualEnv/VirtualenvConfigurationDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/VirtualEnv/VirtualenvConfigurationDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import sys
--- a/eric6/VirtualEnv/VirtualenvExecDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/VirtualEnv/VirtualenvExecDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import sys
 import os
--- a/eric6/WebBrowser/Bookmarks/NsHtmlReader.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/Bookmarks/NsHtmlReader.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import QObject, QIODevice, QFile, QRegExp, Qt, QDateTime
 
--- a/eric6/WebBrowser/Feeds/FeedsManager.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/Feeds/FeedsManager.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QXmlStreamReader
 from PyQt5.QtGui import QCursor
--- a/eric6/WebBrowser/FlashCookieManager/FlashCookieManager.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/FlashCookieManager/FlashCookieManager.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,11 +9,6 @@
 
 from __future__ import unicode_literals
 
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
-
 import shutil
 
 from PyQt5.QtCore import QObject, QTimer, QDir, QFileInfo, QFile
--- a/eric6/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 import shutil
--- a/eric6/WebBrowser/SafeBrowsing/SafeBrowsingAPIClient.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/SafeBrowsing/SafeBrowsingAPIClient.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import json
 import base64
--- a/eric6/WebBrowser/SafeBrowsing/SafeBrowsingCache.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/SafeBrowsing/SafeBrowsingCache.py	Sat Aug 31 12:58:11 2019 +0200
@@ -22,7 +22,6 @@
     QCoreApplication, QEventLoop
 from PyQt5.QtSql import QSql, QSqlDatabase, QSqlQuery
 
-from .SafeBrowsingUtilities import toHex
 from .SafeBrowsingThreatList import ThreatList
 
 
@@ -593,7 +592,7 @@
                     query.prepare(queryStr)
                     query.addBindValue(QByteArray(prefix),
                                        QSql.In | QSql.Binary)
-                    query.addBindValue(toHex(prefix[:4]))
+                    query.addBindValue(prefix[:4].hex())
                     query.addBindValue(threatList.threatType)
                     query.addBindValue(threatList.platformType)
                     query.addBindValue(threatList.threatEntryType)
--- a/eric6/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Sat Aug 31 12:58:11 2019 +0200
@@ -31,7 +31,6 @@
 from .SafeBrowsingCache import SafeBrowsingCache
 from .SafeBrowsingThreatList import ThreatList, HashPrefixList
 from .SafeBrowsingUrl import SafeBrowsingUrl
-from .SafeBrowsingUtilities import toHex
 
 
 class SafeBrowsingManager(QObject):
@@ -427,7 +426,7 @@
         @rtype list of ThreatList
         """
         fullHashes = list(fullHashes)
-        cues = [toHex(fh[:4]) for fh in fullHashes]
+        cues = [fh[:4].hex() for fh in fullHashes]
         result = []
         
         matchingPrefixes = {}
--- a/eric6/WebBrowser/SafeBrowsing/SafeBrowsingUrl.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/SafeBrowsing/SafeBrowsingUrl.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,18 +9,12 @@
 
 from __future__ import unicode_literals
 
-try:
-    import urlparse     # Py2
-    import urllib       # Py2
-except ImportError:
-    import urllib.parse as urllib
-    from urllib import parse as urlparse
-
 import re
 import posixpath
 import socket
 import struct
 import hashlib
+import urllib.parse
 
 import Preferences
 
@@ -70,7 +64,7 @@
             @return unescaped URL string
             @rtype str
             """
-            uu = urllib.unquote(u)
+            uu = urllib.parse.unquote(u)
             if uu == u:
                 return uu
             else:
@@ -86,7 +80,7 @@
             @rtype str
             """
             safeChars = '!"$&\'()*+,-./:;<=>?@[\\]^_`{|}~'
-            return urllib.quote(s, safe=safeChars)
+            return urllib.parse.quote(s, safe=safeChars)
         
         url = self.__url.strip()
         url = url.replace('\n', '').replace('\r', '').replace('\t', '')
@@ -96,10 +90,10 @@
         if len(url.split('://')) <= 1:
             url = Preferences.getWebBrowser("DefaultScheme") + url
         url = quote(fullUnescape(url))
-        urlParts = urlparse.urlsplit(url)
+        urlParts = urllib.parse.parse.urlsplit(url)
         if not urlParts[0]:
             url = Preferences.getWebBrowser("DefaultScheme") + url
-            urlParts = urlparse.urlsplit(url)
+            urlParts = urllib.parse.parse.urlsplit(url)
         protocol = urlParts.scheme
         host = fullUnescape(urlParts.hostname)
         path = fullUnescape(urlParts.path)
@@ -184,10 +178,10 @@
                 curPath = curPath + pathParts[i] + '/'
                 yield curPath
         
-        protocol, addressStr = urllib.splittype(url)
-        host, path = urllib.splithost(addressStr)
-        user, host = urllib.splituser(host)
-        host, port = urllib.splitport(host)
+        protocol, addressStr = urllib.parse.splittype(url)
+        host, path = urllib.parse.splithost(addressStr)
+        user, host = urllib.parse.splituser(host)
+        host, port = urllib.parse.splitport(host)
         host = host.strip('/')
         seenPermutations = set()
         for h in hostPermutations(host):
--- a/eric6/WebBrowser/SpeedDial/SpeedDial.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/SpeedDial/SpeedDial.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import os
 
--- a/eric6/WebBrowser/Tools/WebBrowserTools.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/Tools/WebBrowserTools.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 import re
--- a/eric6/WebBrowser/UrlBar/FavIconLabel.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/UrlBar/FavIconLabel.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 from PyQt5.QtCore import Qt, QPoint, QMimeData
 from PyQt5.QtGui import QDrag, QPixmap
--- a/eric6/WebBrowser/UrlBar/UrlBar.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/UrlBar/UrlBar.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, Qt, QPointF, QUrl, QDateTime, QTimer, QPoint
 from PyQt5.QtGui import QColor, QPalette, QLinearGradient, QIcon
--- a/eric6/WebBrowser/VirusTotal/VirusTotalApi.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/VirusTotal/VirusTotalApi.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import json
 
--- a/eric6/WebBrowser/WebBrowserPage.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/WebBrowserPage.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals, print_function
-try:
-    str = unicode       # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, QUrl, QUrlQuery, QTimer, \
     QEventLoop, QPoint, QPointF
--- a/eric6/WebBrowser/WebBrowserView.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/WebBrowserView.py	Sat Aug 31 12:58:11 2019 +0200
@@ -9,10 +9,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode           # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 
--- a/eric6/WebBrowser/WebBrowserWindow.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/WebBrowserWindow.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode           # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import os
 import shutil
--- a/eric6/WebBrowser/WebInspector.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/WebBrowser/WebInspector.py	Sat Aug 31 12:58:11 2019 +0200
@@ -8,10 +8,6 @@
 """
 
 from __future__ import unicode_literals
-try:
-    str = unicode           # __IGNORE_EXCEPTION__
-except NameError:
-    pass
 
 import json
 import os
--- a/eric6/eric6.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6.py	Sat Aug 31 12:58:11 2019 +0200
@@ -29,14 +29,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-    import StringIO as io   # __IGNORE_EXCEPTION__
-    import locale
-except ImportError:
-    import io       # __IGNORE_WARNING__
-    basestring = str
-
 try:
     try:
         from PyQt5 import sip       # __IGNORE_EXCEPTION__
@@ -49,17 +41,15 @@
 import traceback
 import time
 import logging
+import io
 
 try:
     from PyQt5.QtCore import qWarning, QLibraryInfo, QTimer, QCoreApplication
 except ImportError:
-    try:    # Py2
-        import tkMessageBox as messagebox
+    try:
+        from tkinter import messagebox
     except ImportError:
-        try:    # Py3
-            from tkinter import messagebox
-        except ImportError:
-            sys.exit(100)
+        sys.exit(100)
     messagebox.showerror(
         "eric6 Error",
         "PyQt could not be imported. Please make sure"
@@ -194,15 +184,13 @@
     if distroInfo:
         versionInfo += "{0}\n{1}".format(separator, distroInfo)
     
-    if isinstance(excType, basestring):
+    if isinstance(excType, str):
         tbinfo = tracebackobj
     else:
         tbinfofile = io.StringIO()
         traceback.print_tb(tracebackobj, None, tbinfofile)
         tbinfofile.seek(0)
         tbinfo = tbinfofile.read()
-        if sys.version_info[0] == 2:
-            tbinfo = tbinfo.decode(locale.getpreferredencoding())
     errmsg = '{0}: \n{1}'.format(str(excType), str(excValue))
     sections = [separator, timeString, separator, errmsg, separator, tbinfo]
     msg = '\n'.join(sections)
@@ -215,10 +203,6 @@
         pass
     
     if inMainLoop is None:
-        if sys.version_info[0] == 2:
-            notice = notice.encode(sys.stdout.encoding, 'replace')
-            msg = msg.encode(sys.stdout.encoding, 'replace')
-            versionInfo = versionInfo.encode(sys.stdout.encoding, 'replace')
         warning = notice + msg + versionInfo
         print(warning)                          # __IGNORE_WARNING_M801__
     else:
@@ -228,8 +212,6 @@
             .replace("&", "&amp;")\
             .replace(">", "&gt;")\
             .replace("<", "&lt;")
-        if sys.version_info[0] == 2:
-            warning = warning.encode('utf-8', 'replace')
         qWarning(warning)
 
 
@@ -335,8 +317,6 @@
             path = os.path.join(pyqtDataDir, "bin")
         else:
             path = pyqtDataDir
-        if sys.version_info[0] == 2:
-            path = path.encode(sys.getfilesystemencoding())
         os.environ["PATH"] = path + os.pathsep + os.environ["PATH"]
     
     pluginFile = None
--- a/eric6/eric6_api.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_api.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 import glob
 import fnmatch
 
--- a/eric6/eric6_browser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_browser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 try:
     try:
         from PyQt5 import sip
--- a/eric6/eric6_compare.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_compare.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_configure.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_configure.py	Sat Aug 31 12:58:11 2019 +0200
@@ -19,11 +19,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_diff.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_diff.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_doc.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_doc.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 import glob
 import fnmatch
 
--- a/eric6/eric6_editor.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_editor.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_hexeditor.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_hexeditor.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_iconeditor.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_iconeditor.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_plugininstall.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_plugininstall.py	Sat Aug 31 12:58:11 2019 +0200
@@ -20,11 +20,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_pluginrepository.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_pluginrepository.py	Sat Aug 31 12:58:11 2019 +0200
@@ -20,11 +20,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_pluginuninstall.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_pluginuninstall.py	Sat Aug 31 12:58:11 2019 +0200
@@ -20,11 +20,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_post_install.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_post_install.py	Sat Aug 31 12:58:11 2019 +0200
@@ -65,12 +65,9 @@
     @rtype any
     """
     try:
-        import _winreg as winreg
+        import winreg
     except ImportError:
-        try:
-            import winreg
-        except ImportError:
-            return None
+        return None
     
     try:
         registryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0,
--- a/eric6/eric6_qregexp.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_qregexp.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_qregularexpression.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_qregularexpression.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_re.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_re.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_shell.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_shell.py	Sat Aug 31 12:58:11 2019 +0200
@@ -22,11 +22,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_snap.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_snap.py	Sat Aug 31 12:58:11 2019 +0200
@@ -20,11 +20,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_sqlbrowser.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_sqlbrowser.py	Sat Aug 31 12:58:11 2019 +0200
@@ -20,11 +20,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_tray.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_tray.py	Sat Aug 31 12:58:11 2019 +0200
@@ -24,11 +24,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_trpreviewer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_trpreviewer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_uipreviewer.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_uipreviewer.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/eric6/eric6_unittest.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/eric6/eric6_unittest.py	Sat Aug 31 12:58:11 2019 +0200
@@ -21,11 +21,6 @@
 
 import Toolbox.PyQt4ImportHook  # __IGNORE_WARNING__
 
-try:  # Only for Py2
-    import Globals.compatibility_fixes     # __IGNORE_WARNING__
-except (ImportError):
-    pass
-
 for arg in sys.argv[:]:
     if arg.startswith("--config="):
         import Globals
--- a/scripts/create_windows_links.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/scripts/create_windows_links.py	Sat Aug 31 12:58:11 2019 +0200
@@ -16,14 +16,6 @@
 
 from eric6config import getConfig
 
-# Define file name markers for Python variants
-PythonMarkers = {
-    2: "_py2",
-    3: "_py3",
-}
-
-includePythonVariant = False
-
 
 def main(argv):
     """
@@ -32,11 +24,6 @@
     @param argv list of command line arguments
     @type list of str
     """
-    global includePythonVariant
-    
-    if "-y" in argv:
-        includePythonVariant = True
-    
     regPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" + \
               "\\User Shell Folders"
     
@@ -78,12 +65,9 @@
     @rtype any
     """
     try:
-        import _winreg as winreg
+        import winreg
     except ImportError:
-        try:
-            import winreg
-        except ImportError:
-            return None
+        return None
     
     try:
         registryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0,
@@ -139,33 +123,15 @@
         the link target and the icon target
     @rtype list of tuples of (str, str, str)
     """
-    global includePythonVariant
-    
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-    else:
-        marker = ""
-    
     majorVersion, minorVersion = sys.version_info[:2]
     entriesTemplates = [
         ("eric6 (Python {0}.{1}).lnk",
-         os.path.join(getConfig("bindir"), "eric6" + marker + ".cmd"),
+         os.path.join(getConfig("bindir"), "eric6.cmd"),
          os.path.join(getConfig("ericPixDir"), "eric6.ico")),
+        ("eric6 Browser (Python {0}.{1}).lnk",
+         os.path.join(getConfig("bindir"), "eric6_browser.cmd"),
+         os.path.join(getConfig("ericPixDir"), "ericWeb48.ico")),
     ]
-    if sys.version_info.major == 2:
-        entriesTemplates.append((
-            "eric6 Browser (Python {0}.{1}).lnk",
-            os.path.join(getConfig("bindir"),
-                         "eric6_webbrowser" + marker + ".cmd"),
-            os.path.join(getConfig("ericPixDir"), "ericWeb48.ico")
-        ))
-    else:
-        entriesTemplates.append((
-            "eric6 Browser (Python {0}.{1}).lnk",
-            os.path.join(getConfig("bindir"),
-                         "eric6_browser" + marker + ".cmd"),
-            os.path.join(getConfig("ericPixDir"), "ericWeb48.ico")
-        ))
     
     return [
         (e[0].format(majorVersion, minorVersion), e[1], e[2])
--- a/scripts/install-debugclients.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/scripts/install-debugclients.py	Sat Aug 31 12:58:11 2019 +0200
@@ -12,17 +12,6 @@
 """
 
 from __future__ import unicode_literals, print_function
-try:
-    import cStringIO as io
-    try:
-        from PyQt5 import sip
-    except ImportError:
-        import sip
-    sip.setapi('QString', 2)
-    sip.setapi('QVariant', 2)
-    sip.setapi('QTextStream', 2)
-except (ImportError):
-    import io    # __IGNORE_WARNING__
 
 import sys
 import os
@@ -30,6 +19,7 @@
 import compileall
 import shutil
 import fnmatch
+import io
 
 # Define the globals.
 progName = None
@@ -53,7 +43,6 @@
     global currDir
     
     if sys.platform.startswith("win"):
-        # different meaning of input between Py2 and Py3
         try:
             input("Press enter to continue...")
         except (EOFError, SyntaxError):
@@ -253,9 +242,8 @@
     global progName, modDir, doCleanup, doCompile, distDir
     global sourceDir
     
-    if sys.version_info < (2, 7, 0) or sys.version_info > (3, 9, 9):
-        print('Sorry, eric6 requires at least Python 2.7 or '
-              'Python 3 for running.')
+    if sys.version_info < (3, 5, 0) or sys.version_info > (3, 99, 99):
+        print('Sorry, eric6 requires at least Python 3.5 for running.')
         exit(5)
     
     progName = os.path.basename(argv[0])
@@ -317,7 +305,6 @@
     if doCompile:
         print("\nCompiling source files ...")
         skipRe = re.compile(r"DebugClients[\\/]Python[\\/]")
-        # Hide compile errors (mainly because of Py2/Py3 differences)
         sys.stdout = io.StringIO()
         if distDir:
             compileall.compile_dir(
--- a/scripts/install.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/scripts/install.py	Sat Aug 31 12:58:11 2019 +0200
@@ -10,19 +10,6 @@
 """
 
 from __future__ import unicode_literals, print_function
-try:
-    # Python2 only
-    import cStringIO as io
-    try:
-        from PyQt5 import sip
-    except ImportError:
-        import sip
-    sip.setapi('QString', 2)
-    sip.setapi('QVariant', 2)
-    sip.setapi('QTextStream', 2)
-    input = raw_input       # __IGNORE_WARNING__
-except (ImportError):
-    import io               # __IGNORE_WARNING__
 
 import sys
 import os
@@ -32,9 +19,9 @@
 import glob
 import shutil
 import fnmatch
-import codecs
 import subprocess
 import time
+import io
 
 # Define the globals.
 progName = None
@@ -50,7 +37,6 @@
 doCleanDesktopLinks = False
 forceCleanDesktopLinks = False
 doCompile = True
-includePythonVariant = False
 cfg = {}
 progLanguages = ["Python", "Ruby", "QSS"]
 sourceDir = "eric"
@@ -63,50 +49,33 @@
 macAppBundleName = defaultMacAppBundleName
 macAppBundlePath = defaultMacAppBundlePath
 macPythonExe = defaultMacPythonExe
-pyqtVariant = ""
-pyqtOverride = False
 
 # Define blacklisted versions of the prerequisites
 BlackLists = {
     "sip": [],
-    "PyQt4": [],
     "PyQt5": [],
     "QScintilla2": [],
 }
 PlatformsBlackLists = {
     "windows": {
         "sip": [],
-        "PyQt4": [],
         "PyQt5": [],
         "QScintilla2": [],
     },
     
     "linux": {
         "sip": [],
-        "PyQt4": [],
         "PyQt5": [],
         "QScintilla2": [],
     },
     
     "mac": {
         "sip": [],
-        "PyQt4": [],
         "PyQt5": [],
         "QScintilla2": [],
     },
 }
 
-# Define file name markers for Python variants
-PythonMarkers = {
-    2: "_py2",
-    3: "_py3",
-}
-# Define a mapping of markers to full text
-PythonTextMarkers = {
-    "_py2": "Python 2",
-    "_py3": "Python 3",
-}
-
 
 def exit(rcode=0):
     """
@@ -119,7 +88,6 @@
     print()
     
     if sys.platform.startswith(("win", "cygwin")):
-        # different meaning of input between Py2 and Py3
         try:
             input("Press enter to continue...")
         except (EOFError, SyntaxError):
@@ -138,21 +106,20 @@
     """
     global progName, modDir, distDir, apisDir
     global macAppBundleName, macAppBundlePath, macPythonExe
-    global pyqtVariant
 
     print()
     print("Usage:")
     if sys.platform == "darwin":
         print("    {0} [-chxyz] [-a dir] [-b dir] [-d dir] [-f file] [-i dir]"
-              " [-m name] [-n path] [-p python] [--no-apis] [--pyqt=version]"
+              " [-m name] [-n path] [-p python] [--no-apis]"
               .format(progName))
     elif sys.platform.startswith(("win", "cygwin")):
         print("    {0} [-chxyz] [-a dir] [-b dir] [-d dir] [-f file]"
-              " [--clean-desktop] [--no-apis] [--pyqt=version]"
+              " [--clean-desktop] [--no-apis]"
               .format(progName))
     else:
         print("    {0} [-chxyz] [-a dir] [-b dir] [-d dir] [-f file] [-i dir]"
-              " [--no-apis] [--pyqt=version]"
+              " [--no-apis]"
               .format(progName))
     print("where:")
     print("    -h, --help display this help message")
@@ -184,13 +151,7 @@
         ("    --clean-desktop delete desktop links before installation")
     print("    -x         don't perform dependency checks (use on your own"
           " risk)")
-    print("    -y         add the Python variant to the executable names")
     print("    -z         don't compile the installed python files")
-    print("    --pyqt=version version of PyQt to be used (one of 4 or 5)")
-    if pyqtVariant:
-        print("                   (default: {0})".format(pyqtVariant[-1]))
-    else:
-        print("                   (no PyQt variant found)")
     print()
     print("The file given to the -f option must be valid Python code"
           " defining a")
@@ -206,41 +167,12 @@
     exit(rcode)
 
 
-def determinePyQtVariant():
-    """
-    Module function to determine the PyQt variant to be used.
-    """
-    global pyqtVariant, pyqtOverride
-    
-    pyqtVariant = ""
-    # need to handle the --pyqt= option here
-    if "--pyqt=4" in sys.argv:
-        pyqtVariant = "PyQt4"
-        pyqtOverride = True
-    elif "--pyqt=5" in sys.argv:
-        pyqtVariant = "PyQt5"
-        pyqtOverride = True
-    else:
-        try:
-            import PyQt5        # __IGNORE_WARNING__
-            pyqtVariant = "PyQt5"
-            del sys.modules["PyQt5"]
-        except ImportError:
-            try:
-                import PyQt4    # __IGNORE_WARNING__
-                pyqtVariant = "PyQt4"
-                del sys.modules["PyQt4"]
-            except ImportError:
-                # default to PyQt5, installation will be asked for
-                pyqtVariant = "PyQt5"
-
-
 def initGlobals():
     """
     Module function to set the values of globals that need more than a
     simple assignment.
     """
-    global platBinDir, modDir, pyModDir, apisDir, pyqtVariant, platBinDirOld
+    global platBinDir, modDir, pyModDir, apisDir, platBinDirOld
     
     try:
         import distutils.sysconfig
@@ -271,7 +203,7 @@
     modDir = distutils.sysconfig.get_python_lib(True)
     pyModDir = modDir
     
-    pyqtDataDir = os.path.join(modDir, pyqtVariant)
+    pyqtDataDir = os.path.join(modDir, "PyQt5")
     if os.path.exists(os.path.join(pyqtDataDir, "qsci")):
         # it's the installer
         qtDataDir = pyqtDataDir
@@ -281,10 +213,7 @@
     else:
         # determine dynamically
         try:
-            if pyqtVariant == "PyQt4":
-                from PyQt4.QtCore import QLibraryInfo
-            else:
-                from PyQt5.QtCore import QLibraryInfo
+            from PyQt5.QtCore import QLibraryInfo
             qtDataDir = QLibraryInfo.location(QLibraryInfo.DataPath)
         except ImportError:
             qtDataDir = None
@@ -302,53 +231,39 @@
     @param text the contents to copy to the file.
     """
     f = open(name, "w")
-    if sys.version_info[0] == 2:
-        text = codecs.encode(text, "utf-8")
     f.write(text)
     f.close()
 
 
-def copyDesktopFile(src, dst, marker):
+def copyDesktopFile(src, dst):
     """
     Modify a desktop file and write it to its destination.
     
     @param src source file name (string)
     @param dst destination file name (string)
-    @param marker marker to be used (string)
     """
     global cfg, platBinDir
     
-    if sys.version_info[0] == 2:
-        f = codecs.open(src, "r", "utf-8")
-    else:
-        f = open(src, "r", encoding="utf-8")
+    f = open(src, "r", encoding="utf-8")
     text = f.read()
     f.close()
     
     text = text.replace("@BINDIR@", platBinDir)
-    text = text.replace("@MARKER@", marker)
-    if marker:
-        t_marker = " ({0})".format(PythonTextMarkers[marker])
-    else:
-        t_marker = ""
-    text = text.replace("@PY_MARKER@", t_marker)
+    text = text.replace("@MARKER@", "")
+    text = text.replace("@PY_MARKER@", "")
     
-    if sys.version_info[0] == 2:
-        f = codecs.open(dst, "w", "utf-8")
-    else:
-        f = open(dst, "w", encoding="utf-8")
+    f = open(dst, "w", encoding="utf-8")
     f.write(text)
     f.close()
     os.chmod(dst, 0o644)
 
 
-def copyAppStreamFile(src, dst, marker):
+def copyAppStreamFile(src, dst):
     """
     Modify an appstream file and write it to its destination.
     
     @param src source file name (string)
     @param dst destination file name (string)
-    @param marker marker to be used (string)
     """
     if os.path.exists(os.path.join("eric", "eric6", "UI", "Info.py")):
         # Installing from archive
@@ -359,21 +274,15 @@
     else:
         Version = "Unknown"
     
-    if sys.version_info[0] == 2:
-        f = codecs.open(src, "r", "utf-8")
-    else:
-        f = open(src, "r", encoding="utf-8")
+    f = open(src, "r", encoding="utf-8")
     text = f.read()
     f.close()
     
-    text = text.replace("@MARKER@", marker)\
+    text = text.replace("@MARKER@", "")\
         .replace("@VERSION@", Version.split(None, 1)[0])\
         .replace("@DATE@", time.strftime("%Y-%m-%d"))
     
-    if sys.version_info[0] == 2:
-        f = codecs.open(dst, "w", "utf-8")
-    else:
-        f = open(dst, "w", encoding="utf-8")
+    f = open(dst, "w", encoding="utf-8")
     f.write(text)
     f.close()
     os.chmod(dst, 0o644)
@@ -408,33 +317,21 @@
         application (boolean)
     @return the platform specific name of the wrapper (string)
     """
-    global includePythonVariant, pyqtVariant, pyqtOverride
-    
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-    else:
-        marker = ""
-    
-    if pyqtOverride and pyqtVariant == "PyQt4":
-        pyqt4opt = " --pyqt4"
-    else:
-        pyqt4opt = ""
-    
     # all kinds of Windows systems
     if sys.platform.startswith(("win", "cygwin")):
-        wname = wfile + marker + ".cmd"
+        wname = wfile + ".cmd"
         if isGuiScript:
             wrapper = \
                 '''@echo off\n''' \
                 '''start "" "{2}\\pythonw.exe"''' \
-                ''' "{0}\\{1}.pyw"{3}''' \
+                ''' "{0}\\{1}.pyw"''' \
                 ''' %1 %2 %3 %4 %5 %6 %7 %8 %9\n'''.format(
-                    pydir, wfile, sys.exec_prefix, pyqt4opt)
+                    pydir, wfile, sys.exec_prefix)
         else:
             wrapper = \
-                '''@"{0}\\python" "{1}\\{2}.py"{3}''' \
+                '''@"{0}\\python" "{1}\\{2}.py"''' \
                 ''' %1 %2 %3 %4 %5 %6 %7 %8 %9\n'''.format(
-                    sys.exec_prefix, pydir, wfile, pyqt4opt)
+                    sys.exec_prefix, pydir, wfile)
 
     # Mac OS X
     elif sys.platform == "darwin":
@@ -442,19 +339,19 @@
         pyexec = "{0}/bin/pythonw{1}".format(sys.exec_prefix, major)
         if not os.path.exists(pyexec):
             pyexec = "{0}/bin/python{1}".format(sys.exec_prefix, major)
-        wname = wfile + marker
+        wname = wfile
         wrapper = ('''#!/bin/sh\n'''
                    '''\n'''
-                   '''exec "{0}" "{1}/{2}.py"{3} "$@"\n'''
-                   .format(pyexec, pydir, wfile, pyqt4opt))
+                   '''exec "{0}" "{1}/{2}.py" "$@"\n'''
+                   .format(pyexec, pydir, wfile))
 
     # *nix systems
     else:
-        wname = wfile + marker
+        wname = wfile
         wrapper = ('''#!/bin/sh\n'''
                    '''\n'''
-                   '''exec "{0}" "{1}/{2}.py"{3} "$@"\n'''
-                   .format(sys.executable, pydir, wfile, pyqt4opt))
+                   '''exec "{0}" "{1}/{2}.py" "$@"\n'''
+                   .format(sys.executable, pydir, wfile))
     
     wname = os.path.join(saveDir, wname)
     copyToFile(wname, wrapper)
@@ -574,7 +471,7 @@
     """
     Uninstall the old eric files.
     """
-    global platBinDir, platBinDirOld, includePythonVariant
+    global platBinDir, platBinDirOld
     
     try:
         from eric6config import getConfig
@@ -602,13 +499,9 @@
         "eric6_tray", "eric6_editor",
         "eric6_plugininstall", "eric6_pluginuninstall",
         "eric6_pluginrepository", "eric6_sqlbrowser",
-        "eric6_webbrowser", "eric6_iconeditor",
-        "eric6_snap", "eric6_hexeditor", "eric6_browser",
-        "eric6_shell",
+        "eric6_iconeditor", "eric6_snap", "eric6_hexeditor",
+        "eric6_browser", "eric6_shell",
     ]
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-        rem_wnames = [n + marker for n in rem_wnames]
     
     try:
         dirs = [platBinDir, getConfig('bindir')]
@@ -677,20 +570,13 @@
                      "/usr/share/pixmaps/ericWeb.png"]:
             if os.path.exists(name):
                 os.remove(name)
-        if includePythonVariant:
-            marker = PythonMarkers[sys.version_info.major]
-        else:
-            marker = ""
         for name in [
-            "/usr/share/applications/eric6" + marker + ".desktop",
-            "/usr/share/appdata/eric6" + marker + ".appdata.xml",
-            "/usr/share/metainfo/eric6" + marker + ".appdata.xml",
-            "/usr/share/applications/eric6_webbrowser" + marker +
-            ".desktop",
-            "/usr/share/applications/eric6_browser" + marker +
-            ".desktop",
-            "/usr/share/pixmaps/eric" + marker + ".png",
-            "/usr/share/pixmaps/ericWeb" + marker + ".png",
+            "/usr/share/applications/eric6.desktop",
+            "/usr/share/appdata/eric6.appdata.xml",
+            "/usr/share/metainfo/eric6.appdata.xml",
+            "/usr/share/applications/eric6_browser.desktop",
+            "/usr/share/pixmaps/eric.png",
+            "/usr/share/pixmaps/ericWeb.png",
         ]:
             if os.path.exists(name):
                 os.remove(name)
@@ -701,20 +587,13 @@
             path = os.path.expanduser(name)
             if os.path.exists(path):
                 os.remove(path)
-        if includePythonVariant:
-            marker = PythonMarkers[sys.version_info.major]
-        else:
-            marker = ""
         for name in [
-            "~/.local/share/applications/eric6" + marker + ".desktop",
-            "~/.local/share/appdata/eric6" + marker + ".appdata.xml",
-            "~/.local/share/metainfo/eric6" + marker + ".appdata.xml",
-            "~/.local/share/applications/eric6_webbrowser" + marker +
-            ".desktop",
-            "~/.local/share/applications/eric6_browser" + marker +
-            ".desktop",
-            "~/.local/share/pixmaps/eric" + marker + ".png",
-            "~/.local/share/pixmaps/ericWeb" + marker + ".png",
+            "~/.local/share/applications/eric6.desktop",
+            "~/.local/share/appdata/eric6.appdata.xml",
+            "~/.local/share/metainfo/eric6.appdata.xml",
+            "~/.local/share/applications/eric6_browser.desktop",
+            "~/.local/share/pixmaps/eric.png",
+            "~/.local/share/pixmaps/ericWeb.png",
         ]:
             path = os.path.expanduser(name)
             if os.path.exists(path):
@@ -806,7 +685,7 @@
     @return result code (integer)
     """
     global distDir, doCleanup, cfg, progLanguages, sourceDir, configName
-    global includePythonVariant, installApis
+    global installApis
     
     # Create the platform specific wrappers.
     scriptsDir = "install_scripts"
@@ -821,8 +700,8 @@
                  "eric6_pluginuninstall", "eric6_qregexp",
                  "eric6_qregularexpression", "eric6_re", "eric6_snap",
                  "eric6_sqlbrowser", "eric6_tray", "eric6_trpreviewer",
-                 "eric6_uipreviewer", "eric6_unittest", "eric6_webbrowser",
-                 "eric6_browser", "eric6_shell", "eric6"]:
+                 "eric6_uipreviewer", "eric6_unittest", "eric6_browser",
+                 "eric6_shell", "eric6"]:
         wnames.append(createPyWrapper(cfg['ericDir'], name, scriptsDir))
     
     # set install prefix, if not None
@@ -1013,77 +892,55 @@
     """
     Install Linux specific files.
     """
-    global distDir, sourceDir, includePythonVariant
+    global distDir, sourceDir
     
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-    else:
-        marker = ""
-
     if distDir:
         dst = os.path.normpath(os.path.join(distDir, "usr/share/pixmaps"))
         if not os.path.exists(dst):
             os.makedirs(dst)
         shutilCopy(
             os.path.join(eric6SourceDir, "icons", "default", "eric.png"),
-            os.path.join(dst, "eric" + marker + ".png"))
+            os.path.join(dst, "eric.png"))
         shutilCopy(
             os.path.join(eric6SourceDir, "icons", "default", "ericWeb48.png"),
-            os.path.join(dst, "ericWeb" + marker + ".png"))
+            os.path.join(dst, "ericWeb.png"))
         dst = os.path.normpath(
             os.path.join(distDir, "usr/share/applications"))
         if not os.path.exists(dst):
             os.makedirs(dst)
         copyDesktopFile(os.path.join(sourceDir, "linux", "eric6.desktop.in"),
-                        os.path.join(dst, "eric6" + marker + ".desktop"),
-                        marker)
-        copyDesktopFile(
-            os.path.join(sourceDir, "linux", "eric6_webbrowser.desktop.in"),
-            os.path.join(dst, "eric6_webbrowser" + marker + ".desktop"),
-            marker)
+                        os.path.join(dst, "eric6.desktop"))
         copyDesktopFile(
             os.path.join(sourceDir, "linux", "eric6_browser.desktop.in"),
-            os.path.join(dst, "eric6_browser" + marker + ".desktop"),
-            marker)
+            os.path.join(dst, "eric6_browser.desktop"))
         dst = os.path.normpath(
             os.path.join(distDir, "usr/share/metainfo"))
         if not os.path.exists(dst):
             os.makedirs(dst)
         copyAppStreamFile(
             os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
-            os.path.join(dst, "eric6" + marker + ".appdata.xml"),
-            marker)
+            os.path.join(dst, "eric6.appdata.xml"))
     elif os.getuid() == 0:
         shutilCopy(os.path.join(
             eric6SourceDir, "icons", "default", "eric.png"),
-            "/usr/share/pixmaps/eric" + marker + ".png")
+            "/usr/share/pixmaps/eric.png")
         copyDesktopFile(
             os.path.join(sourceDir, "linux", "eric6.desktop.in"),
-            "/usr/share/applications/eric6" + marker + ".desktop",
-            marker)
+            "/usr/share/applications/eric6.desktop")
         if os.path.exists("/usr/share/metainfo"):
             copyAppStreamFile(
                 os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
-                "/usr/share/metainfo/eric6" + marker + ".appdata.xml",
-                marker)
+                "/usr/share/metainfo/eric6.appdata.xml")
         elif os.path.exists("/usr/share/appdata"):
             copyAppStreamFile(
                 os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
-                "/usr/share/appdata/eric6" + marker + ".appdata.xml",
-                marker)
+                "/usr/share/appdata/eric6.appdata.xml")
         shutilCopy(os.path.join(
             eric6SourceDir, "icons", "default", "ericWeb48.png"),
-            "/usr/share/pixmaps/ericWeb" + marker + ".png")
-        copyDesktopFile(
-            os.path.join(sourceDir, "linux", "eric6_webbrowser.desktop.in"),
-            "/usr/share/applications/eric6_webbrowser" + marker +
-            ".desktop",
-            marker)
+            "/usr/share/pixmaps/ericWeb.png")
         copyDesktopFile(
             os.path.join(sourceDir, "linux", "eric6_browser.desktop.in"),
-            "/usr/share/applications/eric6_browser" + marker +
-            ".desktop",
-            marker)
+            "/usr/share/applications/eric6_browser.desktop")
     elif os.getuid() >= 1000:
         # it is assumed, that user ids start at 1000
         localPath = os.path.join(os.path.expanduser("~"),
@@ -1097,36 +954,22 @@
         # now copy the files
         shutilCopy(
             os.path.join(eric6SourceDir, "icons", "default", "eric.png"),
-            os.path.join(localPath, "pixmaps", "eric" + marker + ".png"))
+            os.path.join(localPath, "pixmaps", "eric.png"))
         copyDesktopFile(
             os.path.join(sourceDir, "linux", "eric6.desktop.in"),
-            os.path.join(localPath, "applications",
-                         "eric6" + marker + ".desktop"),
-            marker)
-        copyAppStreamFile(
-            os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
-            os.path.join(localPath, "metainfo",
-                         "eric6" + marker + ".appdata.xml"),
-            marker)
+            os.path.join(localPath, "applications", "eric6.desktop"))
         copyAppStreamFile(
             os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
-            os.path.join(localPath, "appdata",
-                         "eric6" + marker + ".appdata.xml"),
-            marker)
+            os.path.join(localPath, "metainfo", "eric6.appdata.xml"))
+        copyAppStreamFile(
+            os.path.join(sourceDir, "linux", "eric6.appdata.xml.in"),
+            os.path.join(localPath, "appdata", "eric6.appdata.xml"))
         shutilCopy(
             os.path.join(eric6SourceDir, "icons", "default", "ericWeb48.png"),
-            os.path.join(localPath, "pixmaps",
-                         "ericWeb" + marker + ".png"))
-        copyDesktopFile(
-            os.path.join(sourceDir, "linux", "eric6_webbrowser.desktop.in"),
-            os.path.join(localPath, "applications",
-                         "eric6_webbrowser" + marker + ".desktop"),
-            marker)
+            os.path.join(localPath, "pixmaps", "ericWeb.png"))
         copyDesktopFile(
             os.path.join(sourceDir, "linux", "eric6_browser.desktop.in"),
-            os.path.join(localPath, "applications",
-                         "eric6_browser" + marker + ".desktop"),
-            marker)
+            os.path.join(localPath, "applications", "eric6_browser.desktop"))
 
 
 def createWindowsLinks():
@@ -1149,8 +992,6 @@
                 os.path.join(os.path.dirname(__file__),
                              "create_windows_links.py"),
             ]
-            if includePythonVariant:
-                args.append("-y")
             subprocess.call(args)
         else:
             print(
@@ -1196,7 +1037,7 @@
         eventually be installed
     @type str
     """
-    global cfg, macAppBundleName, macPythonExe, macAppBundlePath, pyqtVariant
+    global cfg, macAppBundleName, macPythonExe, macAppBundlePath
     
     directories = {
         "contents": "{0}/{1}/Contents/".format(
@@ -1221,10 +1062,7 @@
     # determine entry for DYLD_FRAMEWORK_PATH
     dyldLine = ""
     try:
-        if pyqtVariant == "PyQt4":
-            from PyQt4.QtCore import QLibraryInfo
-        else:
-            from PyQt5.QtCore import QLibraryInfo
+        from PyQt5.QtCore import QLibraryInfo
         qtLibraryDir = QLibraryInfo.location(QLibraryInfo.LibrariesPath)
     except ImportError:
         qtLibraryDir = ""
@@ -1434,10 +1272,7 @@
     ok = False
     print("{0}\n\nShall '{1}' be installed using pip? (Y/n)"
           .format(message, packageName), end=" ")
-    if sys.version_info[0] == 2:
-        answer = raw_input()        # __IGNORE_WARNING__
-    else:
-        answer = input()
+    answer = input()
     if answer in ("", "Y", "y"):
         exitCode = subprocess.call(
             [sys.executable, "-m", "pip", "install", packageName])
@@ -1454,15 +1289,11 @@
     
     # perform dependency checks
     print("Python Version: {0:d}.{1:d}.{2:d}".format(*sys.version_info[:3]))
-    if sys.version_info < (2, 7, 10):
-        print('Sorry, you must have Python 2.7.10 or higher or '
-              'Python 3.5.0 or higher.')
-        exit(5)
-    elif sys.version_info < (3, 5, 0) and sys.version_info[0] == 3:
+    if sys.version_info < (3, 5, 0):
         print('Sorry, you must have Python 3.5.0 or higher.')
         exit(5)
     if sys.version_info[0] > 3:
-        print('Sorry, eric6 requires Python 3 or Python 2 for running.')
+        print('Sorry, eric6 requires Python 3 for running.')
         exit(5)
     
     try:
@@ -1472,121 +1303,89 @@
         print('Please install it and try again.')
         exit(5)
     
-    if pyqtVariant == "PyQt4":
-        try:
-            from PyQt4.QtCore import qVersion
-        except ImportError as msg:
-            print('Sorry, please install PyQt4.')
-            print('Error: {0}'.format(msg))
-            exit(1)
-        print("Found PyQt4")
-    else:
-        try:
-            from PyQt5.QtCore import qVersion
-        except ImportError as msg:
-            if sys.version_info[0] == 2:
-                # no PyQt5 wheels available for Python 2
-                installed = False
-            else:
-                installed = pipInstall(
-                    "PyQt5",
-                    "PyQt5 could not be detected.\nError: {0}".format(msg)
-                )
-            if installed:
-                # try to import it again
-                try:
-                    from PyQt5.QtCore import qVersion
-                except ImportError as msg:
-                    print('Sorry, please install PyQt5.')
-                    print('Error: {0}'.format(msg))
-                    exit(1)
-            else:
+    try:
+        from PyQt5.QtCore import qVersion
+    except ImportError as msg:
+        installed = pipInstall(
+            "PyQt5",
+            "PyQt5 could not be detected.\nError: {0}".format(msg)
+        )
+        if installed:
+            # try to import it again
+            try:
+                from PyQt5.QtCore import qVersion
+            except ImportError as msg:
                 print('Sorry, please install PyQt5.')
                 print('Error: {0}'.format(msg))
                 exit(1)
-        print("Found PyQt5")
+        else:
+            print('Sorry, please install PyQt5.')
+            print('Error: {0}'.format(msg))
+            exit(1)
+    print("Found PyQt5")
     
     try:
-        if pyqtVariant == "PyQt4":
-            pyuic = "pyuic4"
-            from PyQt4 import uic      # __IGNORE_WARNING__
-        else:
-            pyuic = "pyuic5"
-            from PyQt5 import uic      # __IGNORE_WARNING__
+        pyuic = "pyuic5"
+        from PyQt5 import uic      # __IGNORE_WARNING__
     except ImportError as msg:
         print("Sorry, {0} is not installed.".format(pyuic))
         print('Error: {0}'.format(msg))
         exit(1)
     print("Found {0}".format(pyuic))
     
-    if pyqtVariant != "PyQt4":
-        try:
-            from PyQt5 import QtWebEngineWidgets    # __IGNORE_WARNING__
-        except ImportError as msg:
-            from PyQt5.QtCore import PYQT_VERSION
-            if PYQT_VERSION >= 0x50c00:
-                # PyQt 5.12 separated QtWebEngine into a separate wheel
-                installed = pipInstall(
-                    "PyQtWebEngine",
-                    "PyQtWebEngine could not be detected.\nError: {0}"
-                    .format(msg)
-                )
-        
-        try:
-            from PyQt5 import QtChart    # __IGNORE_WARNING__
-        except ImportError as msg:
+    try:
+        from PyQt5 import QtWebEngineWidgets    # __IGNORE_WARNING__
+    except ImportError as msg:
+        from PyQt5.QtCore import PYQT_VERSION
+        if PYQT_VERSION >= 0x50c00:
+            # PyQt 5.12 separated QtWebEngine into a separate wheel
             installed = pipInstall(
-                "PyQtChart",
-                "PyQtChart could not be detected.\nError: {0}"
+                "PyQtWebEngine",
+                "PyQtWebEngine could not be detected.\nError: {0}"
                 .format(msg)
             )
     
     try:
-        if pyqtVariant == "PyQt4":
-            from PyQt4 import Qsci      # __IGNORE_WARNING__
-        else:
-            from PyQt5 import Qsci      # __IGNORE_WARNING__
+        from PyQt5 import QtChart    # __IGNORE_WARNING__
+    except ImportError as msg:
+        installed = pipInstall(
+            "PyQtChart",
+            "PyQtChart could not be detected.\nError: {0}"
+            .format(msg)
+        )
+    
+    try:
+        from PyQt5 import Qsci      # __IGNORE_WARNING__
     except ImportError as msg:
-        if pyqtVariant == "PyQt4":
-            message = str(msg)
+        installed = pipInstall(
+            "QScintilla",
+            "QScintilla could not be detected.\nError: {0}".format(msg)
+        )
+        if installed:
+            # try to import it again
+            try:
+                from PyQt5 import Qsci      # __IGNORE_WARNING__
+                message = None
+            except ImportError as msg:
+                message = str(msg)
         else:
-            installed = pipInstall(
-                "QScintilla",
-                "QScintilla could not be detected.\nError: {0}".format(msg)
-            )
-            if installed:
-                # try to import it again
-                try:
-                    from PyQt5 import Qsci      # __IGNORE_WARNING__
-                    message = None
-                except ImportError as msg:
-                    message = str(msg)
-            else:
-                message = "QScintilla could not be installed."
+            message = "QScintilla could not be installed."
         if message:
             print("Sorry, please install QScintilla2 and")
-            print("its PyQt5/PyQt4 wrapper.")
+            print("its PyQt5 wrapper.")
             print('Error: {0}'.format(message))
             exit(1)
     print("Found QScintilla2")
     
-    if pyqtVariant == "PyQt4":
-        impModulesList = [
-            "PyQt4.QtGui", "PyQt4.QtNetwork", "PyQt4.QtSql",
-            "PyQt4.QtSvg", "PyQt4.QtWebKit",
-        ]
-        altModulesList = []
-    else:
-        impModulesList = [
-            "PyQt5.QtGui", "PyQt5.QtNetwork", "PyQt5.QtPrintSupport",
-            "PyQt5.QtSql", "PyQt5.QtSvg", "PyQt5.QtWidgets",
-        ]
-        altModulesList = [
-            # Tuple with alternatives, flag indicating it's ok to not be
-            # available (e.g. for 32-Bit Windows)
-            (("PyQt5.QtWebEngineWidgets", "PyQt5.QtWebKitWidgets"),
-             sys.maxsize <= 2**32),
-        ]
+    impModulesList = [
+        "PyQt5.QtGui", "PyQt5.QtNetwork", "PyQt5.QtPrintSupport",
+        "PyQt5.QtSql", "PyQt5.QtSvg", "PyQt5.QtWidgets",
+    ]
+    altModulesList = [
+        # Tuple with alternatives, flag indicating it's ok to not be
+        # available (e.g. for 32-Bit Windows)
+        (("PyQt5.QtWebEngineWidgets", ), sys.maxsize <= 2**32),
+    ]
     # check mandatory modules
     modulesOK = True
     for impModule in impModulesList:
@@ -1633,11 +1432,8 @@
     qtMajor = int(qVersion().split('.')[0])
     qtMinor = int(qVersion().split('.')[1])
     print("Qt Version: {0}".format(qVersion().strip()))
-    if qtMajor < 4 or \
-        (qtMajor == 4 and qtMinor < 8) or \
-            (qtMajor == 5 and qtMinor < 9):
-        print('Sorry, you must have Qt version 4.8.0 or better or')
-        print('5.9.0 or better.')
+    if qtMajor == 5 and qtMinor < 9:
+        print('Sorry, you must have Qt version 5.9.0 or better.')
         exit(2)
     
     # check version of sip
@@ -1673,10 +1469,7 @@
         pass
     
     # check version of PyQt
-    if pyqtVariant == "PyQt4":
-        from PyQt4.QtCore import PYQT_VERSION_STR
-    else:
-        from PyQt5.QtCore import PYQT_VERSION_STR
+    from PyQt5.QtCore import PYQT_VERSION_STR
     pyqtVersion = PYQT_VERSION_STR
     print("PyQt Version:", pyqtVersion.strip())
     # always assume, that snapshots or dev versions are new enough
@@ -1687,15 +1480,12 @@
         major = int(major)
         minor = int(minor)
         pat = int(pat)
-        if major < 4 or \
-            (major == 4 and minor < 10) or \
-                (major == 5 and minor < 9):
-            print('Sorry, you must have PyQt 4.10.0 or better or')
-            print('PyQt 5.9.0 or better or'
+        if major == 5 and minor < 9:
+            print('Sorry, you must have PyQt 5.9.0 or better or'
                   ' a recent snapshot release.')
             exit(4)
         # check for blacklisted versions
-        for vers in BlackLists[pyqtVariant] + PlatformBlackLists[pyqtVariant]:
+        for vers in BlackLists["PyQt5"] + PlatformBlackLists["PyQt5"]:
             if vers == pyqtVersion:
                 print('Sorry, PyQt version {0} is not compatible with eric6.'
                       .format(vers))
@@ -1703,10 +1493,7 @@
                 exit(4)
     
     # check version of QScintilla
-    if pyqtVariant == "PyQt4":
-        from PyQt4.Qsci import QSCINTILLA_VERSION_STR
-    else:
-        from PyQt5.Qsci import QSCINTILLA_VERSION_STR
+    from PyQt5.Qsci import QSCINTILLA_VERSION_STR
     scintillaVersion = QSCINTILLA_VERSION_STR
     print("QScintilla Version:", QSCINTILLA_VERSION_STR.strip())
     # always assume, that snapshots or dev versions are new enough
@@ -1751,10 +1538,7 @@
     """
     Compile the .ui files to Python sources.
     """
-    if pyqtVariant == "PyQt4":
-        from PyQt4.uic import compileUiDir
-    else:
-        from PyQt5.uic import compileUiDir
+    from PyQt5.uic import compileUiDir
     compileUiDir(eric6SourceDir, True, __pyName)
 
 
@@ -1773,18 +1557,14 @@
         pass
     try:
         hgOut = subprocess.check_output(["hg", "identify", "-i"])
-        if sys.version_info[0] == 3:
-            hgOut = hgOut.decode()
+        hgOut = hgOut.decode()
     except (OSError, subprocess.CalledProcessError):
         hgOut = ""
     if hgOut:
         hgOut = hgOut.strip()
         if hgOut.endswith("+"):
             hgOut = hgOut[:-1]
-        if sys.version_info[0] == 2:
-            f = codecs.open(fileName + ".orig", "r", "utf-8")
-        else:
-            f = open(fileName + ".orig", "r", encoding="utf-8")
+        f = open(fileName + ".orig", "r", encoding="utf-8")
         text = f.read()
         f.close()
         text = text.replace("@@REVISION@@", hgOut)\
@@ -1806,12 +1586,9 @@
     @rtype any
     """
     try:
-        import _winreg as winreg
+        import winreg
     except ImportError:
-        try:
-            import winreg
-        except ImportError:
-            return None
+        return None
     
     try:
         registryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0,
@@ -1867,31 +1644,17 @@
         the link target and the icon target
     @rtype list of tuples of (str, str, str)
     """
-    global cfg, includePythonVariant
-    
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-    else:
-        marker = ""
+    global cfg
     
     majorVersion, minorVersion = sys.version_info[:2]
     entriesTemplates = [
         ("eric6 (Python {0}.{1}).lnk",
-         os.path.join(cfg["bindir"], "eric6" + marker + ".cmd"),
+         os.path.join(cfg["bindir"], "eric6.cmd"),
          os.path.join(cfg["ericPixDir"], "eric6.ico")),
+        ("eric6 Browser (Python {0}.{1}).lnk",
+         os.path.join(cfg["bindir"], "eric6_browse.cmd"),
+         os.path.join(cfg["ericPixDir"], "ericWeb48.ico")),
     ]
-    if sys.version_info.major == 2:
-        entriesTemplates.append((
-            "eric6 Browser (Python {0}.{1}).lnk",
-            os.path.join(cfg["bindir"], "eric6_webbrowser" + marker + ".cmd"),
-            os.path.join(cfg["ericPixDir"], "ericWeb48.ico")
-        ))
-    else:
-        entriesTemplates.append((
-            "eric6 Browser (Python {0}.{1}).lnk",
-            os.path.join(cfg["bindir"], "eric6_browser" + marker + ".cmd"),
-            os.path.join(cfg["ericPixDir"], "ericWeb48.ico")
-        ))
     
     return [
         (e[0].format(majorVersion, minorVersion), e[1], e[2])
@@ -1906,8 +1669,7 @@
     @return name of the Start Menu top entry
     @rtype str
     """
-    majorVersion, minorVersion = sys.version_info[:2]
-    return "eric6 (Python {0}.{1})".format(majorVersion, minorVersion)
+    return "eric6"
 
 
 def main(argv):
@@ -1921,13 +1683,12 @@
 
     # Parse the command line.
     global progName, modDir, doCleanup, doCompile, distDir, cfg, apisDir
-    global sourceDir, eric6SourceDir, configName, includePythonVariant
+    global sourceDir, eric6SourceDir, configName
     global macAppBundlePath, macAppBundleName, macPythonExe
-    global pyqtVariant, pyqtOverride, installApis, doCleanDesktopLinks
+    global installApis, doCleanDesktopLinks
     
-    if sys.version_info < (2, 7, 0) or sys.version_info > (3, 9, 9):
-        print('Sorry, eric6 requires at least Python 2.7 or '
-              'Python 3 for running.')
+    if sys.version_info < (3, 5, 0) or sys.version_info > (3, 99, 99):
+        print('Sorry, eric6 requires at least Python 3.5 for running.')
         exit(5)
     
     progName = os.path.basename(argv[0])
@@ -1935,22 +1696,21 @@
     if os.path.dirname(argv[0]):
         os.chdir(os.path.dirname(argv[0]))
     
-    determinePyQtVariant()
     initGlobals()
 
     try:
         if sys.platform.startswith(("win", "cygwin")):
             optlist, args = getopt.getopt(
-                argv[1:], "chxyza:b:d:f:",
-                ["help", "pyqt=", "no-apis"])
+                argv[1:], "chxza:b:d:f:",
+                ["help", "no-apis"])
         elif sys.platform == "darwin":
             optlist, args = getopt.getopt(
-                argv[1:], "chxyza:b:d:f:i:m:n:p:",
-                ["help", "pyqt=", "no-apis"])
+                argv[1:], "chxza:b:d:f:i:m:n:p:",
+                ["help", "no-apis"])
         else:
             optlist, args = getopt.getopt(
-                argv[1:], "chxyza:b:d:f:i:",
-                ["help", "pyqt=", "no-apis"])
+                argv[1:], "chxza:b:d:f:i:",
+                ["help", "no-apis"])
     except getopt.GetoptError as err:
         print(err)
         usage()
@@ -1976,8 +1736,6 @@
             doCleanup = False
         elif opt == "-z":
             doCompile = False
-        elif opt == "-y":
-            includePythonVariant = True
         elif opt == "-f":
             try:
                 exec(compile(open(arg).read(), arg, 'exec'), globals())
@@ -1993,12 +1751,6 @@
             macAppBundlePath = arg
         elif opt == "-p":
             macPythonExe = arg
-        elif opt == "--pyqt":
-            if arg not in ["4", "5"]:
-                print("Invalid PyQt version given; should be 4 or 5. Aborting")
-                exit(6)
-            pyqtVariant = "PyQt{0}".format(arg)
-            pyqtOverride = True
         elif opt == "--no-apis":
             installApis = False
         elif opt == "--clean-desktop":
@@ -2069,7 +1821,6 @@
     
     if doCompile:
         print("\nCompiling source files ...")
-        # Hide compile errors (mainly because of Py2/Py3 differences)
         skipRe = re.compile(r"DebugClients[\\/]Python[\\/]")
         sys.stdout = io.StringIO()
         if distDir:
--- a/scripts/uninstall-debugclients.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/scripts/uninstall-debugclients.py	Sat Aug 31 12:58:11 2019 +0200
@@ -17,13 +17,6 @@
 import shutil
 import distutils.sysconfig
 
-if sys.version_info[0] == 2:
-    try:
-        from PyQt5 import sip
-    except ImportError:
-        import sip
-    sip.setapi('QString', 2)
-
 # Define the globals.
 progName = None
 currDir = os.getcwd()
@@ -41,7 +34,6 @@
     global currDir
     
     if sys.platform.startswith("win"):
-        # different meaning of input between Py2 and Py3
         try:
             input("Press enter to continue...")
         except (EOFError, SyntaxError):
--- a/scripts/uninstall.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/scripts/uninstall.py	Sat Aug 31 12:58:11 2019 +0200
@@ -18,15 +18,6 @@
 import glob
 import distutils.sysconfig
 
-if sys.version_info[0] == 2:
-    try:
-        from PyQt5 import sip
-    except ImportError:
-        import sip
-    sip.setapi('QString', 2)
-else:
-    raw_input = input
-
 # get a local eric6config.py out of the way
 if os.path.exists("eric6config.py"):
     os.rename("eric6config.py", "eric6config.py.orig")
@@ -37,18 +28,11 @@
 currDir = os.getcwd()
 pyModDir = None
 progLanguages = ["Python", "Ruby", "QSS"]
-includePythonVariant = False
 defaultMacAppBundleName = "eric6.app"
 defaultMacAppBundlePath = "/Applications"
 settingsNameOrganization = "Eric6"
 settingsNameGlobal = "eric6"
 
-# Define file name markers for Python variants
-PythonMarkers = {
-    2: "_py2",
-    3: "_py3",
-}
-
 
 def exit(rcode=0):
     """
@@ -65,7 +49,6 @@
         os.rename("eric6config.py.orig", "eric6config.py")
     
     if sys.platform.startswith(("win", "cygwin")):
-        # different meaning of input between Py2 and Py3
         try:
             input("Press enter to continue...")
         except (EOFError, SyntaxError):
@@ -88,7 +71,6 @@
     print("    {0} [-h]".format(progName))
     print("where:")
     print("    -h             display this help message")
-    print("    -y             remove executables with Python variant in name")
 
     exit(rcode)
 
@@ -143,13 +125,9 @@
         "eric6_tray", "eric6_editor",
         "eric6_plugininstall", "eric6_pluginuninstall",
         "eric6_pluginrepository", "eric6_sqlbrowser",
-        "eric6_webbrowser", "eric6_iconeditor",
-        "eric6_snap", "eric6_hexeditor", "eric6_browser",
-        "eric6_shell",
+        "eric6_iconeditor", "eric6_snap", "eric6_hexeditor",
+        "eric6_browser", "eric6_shell",
     ]
-    if includePythonVariant:
-        marker = PythonMarkers[sys.version_info.major]
-        rem_wnames = [n + marker for n in rem_wnames]
     
     try:
         for rem_wname in rem_wnames:
@@ -265,20 +243,13 @@
                      "/usr/share/pixmaps/ericWeb.png"]:
             if os.path.exists(name):
                 os.remove(name)
-        if includePythonVariant:
-            marker = PythonMarkers[sys.version_info.major]
-        else:
-            marker = ""
         for name in [
-            "/usr/share/applications/eric6" + marker + ".desktop",
-            "/usr/share/appdata/eric6" + marker + ".appdata.xml",
-            "/usr/share/metainfo/eric6" + marker + ".appdata.xml",
-            "/usr/share/applications/eric6_webbrowser" + marker +
-            ".desktop",
-            "/usr/share/applications/eric6_browser" + marker +
-            ".desktop",
-            "/usr/share/pixmaps/eric" + marker + ".png",
-            "/usr/share/pixmaps/ericWeb" + marker + ".png",
+            "/usr/share/applications/eric6.desktop",
+            "/usr/share/appdata/eric6.appdata.xml",
+            "/usr/share/metainfo/eric6.appdata.xml",
+            "/usr/share/applications/eric6_browser.desktop",
+            "/usr/share/pixmaps/eric.png",
+            "/usr/share/pixmaps/ericWeb.png",
         ]:
             if os.path.exists(name):
                 os.remove(name)
@@ -289,20 +260,13 @@
             path = os.path.expanduser(name)
             if os.path.exists(path):
                 os.remove(path)
-        if includePythonVariant:
-            marker = PythonMarkers[sys.version_info.major]
-        else:
-            marker = ""
         for name in [
-            "~/.local/share/applications/eric6" + marker + ".desktop",
-            "~/.local/share/appdata/eric6" + marker + ".appdata.xml",
-            "~/.local/share/metainfo/eric6" + marker + ".appdata.xml",
-            "~/.local/share/applications/eric6_webbrowser" + marker +
-            ".desktop",
-            "~/.local/share/applications/eric6_browser" + marker +
-            ".desktop",
-            "~/.local/share/pixmaps/eric" + marker + ".png",
-            "~/.local/share/pixmaps/ericWeb" + marker + ".png",
+            "~/.local/share/applications/eric6.desktop",
+            "~/.local/share/appdata/eric6.appdata.xml",
+            "~/.local/share/metainfo/eric6.appdata.xml",
+            "~/.local/share/applications/eric6_browser.desktop",
+            "~/.local/share/pixmaps/eric.png",
+            "~/.local/share/pixmaps/ericWeb.png",
         ]:
             path = os.path.expanduser(name)
             if os.path.exists(path):
@@ -350,8 +314,7 @@
             print("  - {0}".format(path))
         answer = "c"
         while answer not in ["y", "Y", "n", "N", ""]:
-            answer = raw_input(
-                "Shall these directories be removed (y/N)? ")
+            answer = input("Shall these directories be removed (y/N)? ")
         if answer in ["y", "Y"]:
             for path in pathsToRemove:
                 shutil.rmtree(path)
@@ -367,8 +330,7 @@
         print("  - {0}".format(cfg))
         answer = "c"
         while answer not in ["y", "Y", "n", "N", ""]:
-            answer = raw_input(
-                "Shall this directory be removed (y/N)? ")
+            answer = input("Shall this directory be removed (y/N)? ")
         if answer in ["y", "Y"]:
             shutil.rmtree(cfg)
 
@@ -380,12 +342,9 @@
     try:
         from PyQt5.QtCore import QSettings
     except ImportError:
-        try:
-            from PyQt4.QtCore import QSettings
-        except ImportError:
-            print("No PyQt variant installed. The configuration directory")
-            print("cannot be determined. You have to remove it manually.\n")
-            return
+        print("No PyQt variant installed. The configuration directory")
+        print("cannot be determined. You have to remove it manually.\n")
+        return
     
     settings = QSettings(QSettings.IniFormat, QSettings.UserScope,
                          settingsNameOrganization, settingsNameGlobal)
@@ -395,8 +354,7 @@
         print("  - {0}".format(settingsDir))
         answer = "c"
         while answer not in ["y", "Y", "n", "N", ""]:
-            answer = raw_input(
-                "Shall this directory be removed (y/N)? ")
+            answer = input("Shall this directory be removed (y/N)? ")
         if answer in ["y", "Y"]:
             shutil.rmtree(settingsDir)
 
@@ -469,8 +427,6 @@
     """
     import getopt
 
-    global includePythonVariant
-    
     initGlobals()
 
     # Parse the command line.
@@ -487,8 +443,6 @@
     for opt, _arg in optlist:
         if opt == "-h":
             usage(0)
-        if opt == "-y":
-            includePythonVariant = True
     
     print("\nUninstalling eric6 ...")
     uninstallEric()
--- a/setup.py	Sat Aug 31 12:29:57 2019 +0200
+++ b/setup.py	Sat Aug 31 12:58:11 2019 +0200
@@ -137,8 +137,7 @@
         pass
     try:
         hgOut = subprocess.check_output(["hg", "identify", "-i"])
-        if sys.version_info[0] == 3:
-            hgOut = hgOut.decode()
+        hgOut = hgOut.decode()
     except (OSError, subprocess.CalledProcessError):
         hgOut = ""
     if hgOut:

eric ide

mercurial