PluginCxFreeze.py

changeset 125
13f16f4e355a
parent 123
dd6f7c9041a4
child 127
a76379d552f2
equal deleted inserted replaced
124:4e5ab3804362 125:13f16f4e355a
4 # 4 #
5 5
6 """ 6 """
7 Module implementing the CxFreeze plugin. 7 Module implementing the CxFreeze plugin.
8 """ 8 """
9
10 from __future__ import unicode_literals
11 try:
12 str = unicode
13 except NameError:
14 pass
15 9
16 import os 10 import os
17 import platform 11 import platform
18 12
19 from PyQt5.QtCore import QObject, QTranslator, QCoreApplication, QProcess 13 from PyQt5.QtCore import QObject, QTranslator, QCoreApplication, QProcess
28 # Start-of-Header 22 # Start-of-Header
29 name = "CxFreeze Plugin" 23 name = "CxFreeze Plugin"
30 author = "Detlev Offenbach <detlev@die-offenbachs.de>" 24 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
31 autoactivate = True 25 autoactivate = True
32 deactivateable = True 26 deactivateable = True
33 version = "6.1.0" 27 version = "7.0.0"
34 className = "CxFreezePlugin" 28 className = "CxFreezePlugin"
35 packageName = "CxFreeze" 29 packageName = "CxFreeze"
36 shortDescription = "Show the CxFreeze dialogs." 30 shortDescription = "Show the CxFreeze dialogs."
37 longDescription = ( 31 longDescription = (
38 """This plugin implements the CxFreeze dialogs.""" 32 """This plugin implements the CxFreeze dialogs."""
39 """ CxFreeze is used to generate a distribution package.""" 33 """ CxFreeze is used to generate a distribution package."""
40 ) 34 )
41 needsRestart = False 35 needsRestart = False
42 pyqtApi = 2 36 pyqtApi = 2
43 python2Compatible = True
44 # End-of-Header 37 # End-of-Header
45 38
46 error = "" 39 error = ""
47 40
48 exePy2 = []
49 exePy3 = [] 41 exePy3 = []
50 42
51 43
52 def exeDisplayDataList(): 44 def exeDisplayDataList():
53 """ 45 """
68 "version": "", 60 "version": "",
69 "versionCleanup": None, 61 "versionCleanup": None,
70 } 62 }
71 63
72 if _checkProgram(): 64 if _checkProgram():
73 for exePath in (exePy2 + exePy3): 65 for exePath in exePy3:
74 data["exe"] = exePath 66 data["exe"] = exePath
75 data["versionStartsWith"] = "cxfreeze" 67 data["versionStartsWith"] = "cxfreeze"
76 dataList.append(data.copy()) 68 dataList.append(data.copy())
77 else: 69 else:
78 dataList.append(data) 70 dataList.append(data)
87 @return names of the executable (list) 79 @return names of the executable (list)
88 """ 80 """
89 # Determine Python Version 81 # Determine Python Version
90 if majorVersion == 3: 82 if majorVersion == 3:
91 minorVersions = range(10) 83 minorVersions = range(10)
92 elif majorVersion == 2:
93 minorVersions = range(6, 8)
94 else: 84 else:
95 return [] 85 return []
96 86
97 executables = set() 87 executables = set()
98 if Utilities.isWindowsPlatform(): 88 if Utilities.isWindowsPlatform():
183 exe = os.path.join(directory, cxfreezeScript + suffix) 173 exe = os.path.join(directory, cxfreezeScript + suffix)
184 if os.access(exe, os.X_OK): 174 if os.access(exe, os.X_OK):
185 exes.append(exe) 175 exes.append(exe)
186 176
187 # step 2: determine the Python variant 177 # step 2: determine the Python variant
188 _exePy2 = set()
189 _exePy3 = set() 178 _exePy3 = set()
190 versionArgs = ["-c", "import sys; print(sys.version_info[0])"] 179 versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
191 for exe in exes: 180 for exe in exes:
192 try: 181 try:
193 f = open(exe, "r") 182 f = open(exe, "r")
199 # get a QByteArray of the output 188 # get a QByteArray of the output
200 versionBytes = process.readAllStandardOutput() 189 versionBytes = process.readAllStandardOutput()
201 versionStr = str(versionBytes, encoding='utf-8').strip() 190 versionStr = str(versionBytes, encoding='utf-8').strip()
202 if versionStr == "3": 191 if versionStr == "3":
203 _exePy3.add(exe) 192 _exePy3.add(exe)
204 elif versionStr == "2":
205 _exePy2.add(exe)
206 finally: 193 finally:
207 f.close() 194 f.close()
208 195
209 executables = _exePy3 if majorVersion == 3 else _exePy2 196 executables = _exePy3
210 197
211 # sort items, the probably newest topmost 198 # sort items, the probably newest topmost
212 executables = list(executables) 199 executables = list(executables)
213 executables.sort(reverse=True) 200 executables.sort(reverse=True)
214 return executables 201 return executables
218 """ 205 """
219 Restricted function to check the availability of cxfreeze. 206 Restricted function to check the availability of cxfreeze.
220 207
221 @return flag indicating availability (boolean) 208 @return flag indicating availability (boolean)
222 """ 209 """
223 global error, exePy2, exePy3 210 global error, exePy3
224 211
225 exePy2 = _findExecutable(2)
226 exePy3 = _findExecutable(3) 212 exePy3 = _findExecutable(3)
227 if (exePy2 + exePy3) == []: 213 if exePy3 == []:
228 if Utilities.isWindowsPlatform(): 214 if Utilities.isWindowsPlatform():
229 error = QCoreApplication.translate( 215 error = QCoreApplication.translate(
230 "CxFreezePlugin", 216 "CxFreezePlugin",
231 "The cxfreeze.bat executable could not be found." 217 "The cxfreeze.bat executable could not be found."
232 "Did you run the cxfreeze-postinstall script?") 218 "Did you run the cxfreeze-postinstall script?")
329 @param menu reference to the menu (QMenu) 315 @param menu reference to the menu (QMenu)
330 """ 316 """
331 if menuName == "Packagers": 317 if menuName == "Packagers":
332 if self.__projectAct is not None: 318 if self.__projectAct is not None:
333 self.__projectAct.setEnabled( 319 self.__projectAct.setEnabled(
334 e5App().getObject("Project").getProjectLanguage() in 320 e5App().getObject("Project").getProjectLanguage() ==
335 ["Python", "Python2", "Python3"]) 321 "Python3"
322 )
336 323
337 def __loadTranslator(self): 324 def __loadTranslator(self):
338 """ 325 """
339 Private method to load the translation file. 326 Private method to load the translation file.
340 """ 327 """
369 """ project."""), 356 """ project."""),
370 E5MessageBox.StandardButtons(E5MessageBox.Abort)) 357 E5MessageBox.StandardButtons(E5MessageBox.Abort))
371 return 358 return
372 359
373 majorVersionStr = project.getProjectLanguage() 360 majorVersionStr = project.getProjectLanguage()
374 exe = {"Python": exePy2, 361 exe = {"Python3": exePy3}.get(majorVersionStr)
375 "Python2": exePy2,
376 "Python3": exePy3}.get(majorVersionStr)
377 if exe == []: 362 if exe == []:
378 E5MessageBox.critical( 363 E5MessageBox.critical(
379 self.__ui, 364 self.__ui,
380 self.tr("cxfreeze"), 365 self.tr("cxfreeze"),
381 self.tr("""The cxfreeze executable could not be found.""")) 366 self.tr("""The cxfreeze executable could not be found."""))

eric ide

mercurial