├── .idea ├── .gitignore ├── AutoNuitka.iml ├── codeStyles │ └── codeStyleConfig.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── EasyNuitka.py ├── README.MD ├── exe └── EasyNuitka.exe ├── icon ├── Nuitka.ico └── Nuitka.png ├── mainui.py ├── mainui.ui ├── pic ├── EasyNuitka.png └── Nuitka.png └── src ├── EasyNuitka.py ├── mainui.py └── mainui.ui /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/AutoNuitka.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /EasyNuitka.py: -------------------------------------------------------------------------------- 1 | # This is a sample Python script. 2 | import os 3 | import sys 4 | import threading 5 | from PyQt5.QtCore import Qt 6 | from PyQt5 import QtWidgets,QtGui 7 | from PyQt5.QtGui import QIcon 8 | from PyQt5.QtWidgets import QApplication, QStyleFactory 9 | import nuitka 10 | import mainui 11 | import subprocess 12 | import shutil 13 | 14 | 15 | class MainGui(mainui.Ui_MainWindow, QtWidgets.QMainWindow): 16 | def __init__(self,parent=None): 17 | super(MainGui, self).__init__(parent) 18 | self.setupUi(self) 19 | self.setWindowTitle( "EasyNuitka") 20 | self.setWindowIcon(QIcon("./icon/Nuitka.png")) 21 | self.pushButton.clicked.connect(self.choose_main_py) 22 | self.pushButton_2.clicked.connect(self.set_output_path) 23 | self.pushButton_7.clicked.connect(self.Multithreading_command) 24 | self.pushButton_4.clicked.connect(self.follow_import_to) 25 | self.pushButton_12.clicked.connect(self.follow_import_to_remove) 26 | self.pushButton_20.clicked.connect(self.set_icon) 27 | self.pushButton_19.clicked.connect(self.remove_icon) 28 | self.pushButton_9.clicked.connect(self.quit) 29 | self.pushButton_3.clicked.connect(self.nofollow_import_to) 30 | self.pushButton_10.clicked.connect(self.nofollow_import_to_remove) 31 | self.pushButton_17.clicked.connect(self.include_package_remove) 32 | self.chekbox_clicked_init() 33 | self.command_dict={} 34 | self.command_str=None 35 | self.main_name=None 36 | self.outputpath="./" 37 | self.follow_import_to_document_str="" 38 | self.nofollow_import_to_document_str="" 39 | self.iconname=None 40 | self.iconpath="" 41 | self.compile_module_path=None 42 | self.statusbar.showMessage("The software runs normally") 43 | def choose_main_py(self): 44 | try: 45 | if not self.checkBox_7.isChecked(): 46 | file = QtWidgets.QFileDialog.getOpenFileName(self, 47 | "choose main.py", "./", 48 | "All Files (*.py);;Text Files (*.py)") 49 | self.filenpath = file[0] 50 | self.lineEdit.setText(file[0]) 51 | self.main_name = self.lineEdit.setText(file[0]) 52 | self.filename = self.filenpath.split("/")[-1] 53 | self.filenpath = self.filenpath.replace(self.filename, "") 54 | self.dish = self.filenpath[0:2] 55 | self.statusbar.showMessage("File selected successfully") 56 | 57 | else : 58 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "choose compile module dir", "./") 59 | self.compile_module_path=directory 60 | self.lineEdit.setText(directory) 61 | self.lineEdit_9.setText(self.compile_module_path.split("/")[-1]) 62 | self.statusbar.showMessage("Output directory set successfully") 63 | 64 | 65 | except Exception as e: 66 | self.statusbar.showMessage("File selection failed") 67 | print(e) 68 | def set_output_path(self): 69 | try: 70 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "getExistingDirectory", "./") 71 | self.outputpath=directory 72 | self.lineEdit_2.setText(directory) 73 | self.statusbar.showMessage("Output directory set successfully") 74 | except Exception as e: 75 | self.statusbar.showMessage("Output directory setting failed") 76 | pass 77 | def get_package_method(self): 78 | #--follow-imports 79 | if self.checkBox.isChecked(): 80 | self.lineEdit_3.setEnabled(False) 81 | self.lineEdit_4.setEnabled(False) 82 | self.checkBox_8.setEnabled(False) 83 | 84 | self.command_dict[self.checkBox]="--follow-imports" 85 | #print(self.command_dict) 86 | elif not self.checkBox.isChecked(): 87 | self.lineEdit_3.setEnabled(True) 88 | self.lineEdit_4.setEnabled(True) 89 | self.checkBox_8.setEnabled(True) 90 | self.command_dict[self.checkBox] = "" 91 | #--nofollow-imports 92 | if self.checkBox_8.isChecked(): 93 | self.checkBox.setEnabled(False) 94 | self.command_dict[self.checkBox_8] = "--nofollow-imports" 95 | #print(self.command_dict) 96 | elif not self.checkBox_8.isChecked(): 97 | self.checkBox.setEnabled(True) 98 | self.command_dict[self.checkBox_8] = "" 99 | #--module 100 | if self.checkBox_7.isChecked(): 101 | self.checkBox.setEnabled(False) 102 | self.checkBox_8.setEnabled(False) 103 | self.checkBox_3.setEnabled(False) 104 | self.checkBox_4.setEnabled(False) 105 | self.lineEdit_3.setEnabled(False) 106 | self.lineEdit_4.setEnabled(False) 107 | self.lineEdit_5.setEnabled(False) 108 | self.lineEdit_8.setEnabled(False) 109 | self.lineEdit_6.setEnabled(False) 110 | self.lineEdit_9.setEnabled(True) 111 | self.radioButton.setEnabled(False) 112 | self.radioButton_2.setEnabled(False) 113 | self.command_dict[self.checkBox_7] = "--module" 114 | #print(self.command_dict) 115 | elif not self.checkBox_7.isChecked(): 116 | self.checkBox_3.setEnabled(True) 117 | self.checkBox_4.setEnabled(True) 118 | self.lineEdit_3.setEnabled(True) 119 | self.lineEdit_4.setEnabled(True) 120 | self.lineEdit_5.setEnabled(True) 121 | self.lineEdit_8.setEnabled(True) 122 | self.lineEdit_6.setEnabled(True) 123 | self.lineEdit_9.setEnabled(False) 124 | self.radioButton.setEnabled(True) 125 | self.radioButton_2.setEnabled(True) 126 | self.checkBox_3.setEnabled(True) 127 | self.checkBox_4.setEnabled(True) 128 | if self.checkBox.isChecked(): 129 | self.checkBox_8.setEnabled(False) 130 | if self.checkBox_8.isChecked(): 131 | self.checkBox.setEnabled(False) 132 | 133 | self.command_dict[self.checkBox_7] = "" 134 | #--standalone 135 | if self.checkBox_3.isChecked(): 136 | self.checkBox_4.setEnabled(False) 137 | self.checkBox_7.setEnabled(False) 138 | self.command_dict[self.checkBox_3] = "--standalone" 139 | elif not self.checkBox_3.isChecked() and not self.checkBox_7.isChecked(): 140 | self.checkBox_7.setEnabled(True) 141 | self.checkBox_4.setEnabled(True) 142 | self.command_dict[self.checkBox_3] = "" 143 | #--onefile 144 | if self.checkBox_4.isChecked(): 145 | self.checkBox_3.setEnabled(False) 146 | self.checkBox_7.setEnabled(False) 147 | self.command_dict[self.checkBox_4] = "--onefile" 148 | elif not self.checkBox_4.isChecked() and not self.checkBox_7.isChecked() : 149 | self.checkBox_3.setEnabled(True) 150 | if not self.checkBox_3.isChecked(): 151 | self.checkBox_7.setEnabled(True) 152 | self.command_dict[self.checkBox_4] = "" 153 | 154 | #--mingw64 155 | if self.checkBox_2.isChecked(): 156 | self.checkBox_10.setEnabled(False) 157 | self.command_dict[self.checkBox_2] = "--mingw64" 158 | else: 159 | self.checkBox_10.setEnabled(True) 160 | self.command_dict[self.checkBox_2] = "" 161 | #--show-memory 162 | if self.checkBox_5.isChecked(): 163 | self.command_dict[self.checkBox_5] = "--show-memory" 164 | else: 165 | self.command_dict[self.checkBox_5] = "" 166 | #--show-progress 167 | if self.checkBox_6.isChecked(): 168 | self.command_dict[self.checkBox_6] = "--show-progress" 169 | else: 170 | self.command_dict[self.checkBox_6] = "" 171 | #-msvc64 172 | if self.checkBox_10.isChecked(): 173 | self.checkBox_2.setEnabled(False) 174 | self.command_dict[self.checkBox_10] = "-msvc64" 175 | else: 176 | self.checkBox_2.setEnabled(True) 177 | self.command_dict[self.checkBox_10] = "" 178 | #--include-plugin-pyqt5 179 | if self.checkBox_9.isChecked(): 180 | self.command_dict[self.checkBox_9] = "--plugin-enable=pyqt5" 181 | else: 182 | self.command_dict[self.checkBox_9] = "" 183 | #--include-plugin-numpy 184 | if self.checkBox_17.isChecked(): 185 | self.command_dict[self.checkBox_17] = "--plugin-enable=numpy" 186 | else: 187 | self.command_dict[self.checkBox_17] = "" 188 | #--include-plugin-torch 189 | if self.checkBox_20.isChecked(): 190 | self.command_dict[self.checkBox_20] = "--plugin-enable=torch" 191 | else: 192 | self.command_dict[self.checkBox_20] = "" 193 | #--include-plugin-matplotlib 194 | if self.checkBox_11.isChecked(): 195 | self.command_dict[self.checkBox_11] = "--plugin-enable=matplotlib" 196 | else: 197 | self.command_dict[self.checkBox_11] = "" 198 | #--include-plugin-pyqt6 199 | if self.checkBox_13.isChecked(): 200 | self.command_dict[self.checkBox_13] = "--plugin-enable=pyqt6" 201 | else: 202 | self.command_dict[self.checkBox_13] = "" 203 | #--include-plugin-pyside2 204 | if self.checkBox_15.isChecked(): 205 | self.command_dict[self.checkBox_15] = "--plugin-enable=pyside2" 206 | else: 207 | self.command_dict[self.checkBox_15] = "" 208 | #--include-plugin-pyside6 209 | if self.checkBox_12.isChecked(): 210 | self.command_dict[self.checkBox_12] = "--plugin-enable=pyside6" 211 | else: 212 | self.command_dict[self.checkBox_12] = "" 213 | #--include-plugin-no-qt5 214 | if self.checkBox_18.isChecked(): 215 | self.command_dict[self.checkBox_18] = "--plugin-enable=no-qt5" 216 | else: 217 | self.command_dict[self.checkBox_18] = "" 218 | #--include-plugin-upx 219 | if self.checkBox_22.isChecked(): 220 | self.command_dict[self.checkBox_22] = "--plugin-enable=upx" 221 | else: 222 | self.command_dict[self.checkBox_22] = "" 223 | #--include-plugin-tensorflow 224 | if self.checkBox_19.isChecked(): 225 | self.command_dict[self.checkBox_19] = "--plugin-enable=tensorflow" 226 | else: 227 | self.command_dict[self.checkBox_19] = "" 228 | #--include-plugin-pywebview 229 | if self.checkBox_25.isChecked(): 230 | self.command_dict[self.checkBox_25] = "--plugin-enable=pywebview" 231 | else: 232 | self.command_dict[self.checkBox_25] = "" 233 | #--include-plugin-tk-inter 234 | if self.checkBox_24.isChecked(): 235 | self.command_dict[self.checkBox_24] = "--plugin-enable=tk-inter" 236 | else: 237 | self.command_dict[self.checkBox_24] = "" 238 | #--include-plugin-trio 239 | if self.checkBox_23.isChecked(): 240 | self.command_dict[self.checkBox_23] = "--plugin-enable=trio" 241 | else: 242 | self.command_dict[self.checkBox_23] = "" 243 | #--include-plugin-multiprocessing 244 | if self.checkBox_14.isChecked(): 245 | self.command_dict[self.checkBox_14] = "--plugin-enable=multiprocessing" 246 | else: 247 | self.command_dict[self.checkBox_14] = "" 248 | #--windows-disable-console 249 | if self.radioButton.isChecked(): 250 | self.command_dict[self.radioButton] = "--windows-disable-console" 251 | if self.radioButton_2.isChecked(): 252 | self.command_dict[self.radioButton_2] = "" 253 | #Default Enabled 254 | self.lineEdit_5.setEnabled(False) 255 | self.lineEdit_8.setEnabled(False) 256 | 257 | self.statusbar.showMessage("Selection succeeded") 258 | def Multithreading_command(self): 259 | t=threading.Thread(target=self.excute_command,args=()) 260 | t.start() 261 | self.statusbar.showMessage("packaging is finishing") 262 | def excute_command(self): 263 | try: 264 | self.command_str="python -m nuitka " 265 | for command in self.command_dict.keys(): 266 | if self.command_dict[command]=="": 267 | continue 268 | if self.command_dict[command]=="--module": 269 | self.command_dict[command]="--module "+self.compile_module_path.split("/")[-1]+" "+"--include-package="+\ 270 | self.lineEdit_9.text() 271 | self.command_str+=self.command_dict[command]+" " 272 | if self.follow_import_to_document_str!="": 273 | self.command_str += "--follow-import-to=" + self.follow_import_to_document_str[0:len(self.follow_import_to_document_str)-1] + " " 274 | if self.follow_import_to_document_str!="": 275 | self.command_str+="--nofollow-import-to="+self.follow_import_to_document_str+" " 276 | self.command_str+="--output-dir="+self.outputpath+" " 277 | if self.iconname!=None: 278 | self.command_str+="--windows-icon-from-ico="+self.iconname+" " 279 | if not self.checkBox_7.isChecked(): 280 | self.command_str+=self.filename 281 | 282 | print(self.command_str) 283 | if not self.checkBox_7.isChecked(): 284 | os.chdir(self.filenpath) 285 | else: 286 | os.chdir(self.compile_module_path) 287 | os.chdir("../") 288 | os.system(self.command_str) 289 | self.statusbar.showMessage("Please wait to start packaging......") 290 | except Exception as e: 291 | self.statusbar.showMessage(e) 292 | #print(e) 293 | 294 | def chekbox_clicked_init(self): 295 | self.package_method=[] 296 | self.checkBox_dict = {self.checkBox: "--follow-imports", self.checkBox_8: "--nofollow-imports", 297 | self.checkBox_7: "--module", 298 | self.checkBox_3: "--standalone", self.checkBox_4: "--onefile", 299 | self.checkBox_2: "--mingw64", self.checkBox_5: "--show-memory", 300 | self.checkBox_6: "--show-progress", self.checkBox_10: "-msvc64", 301 | self.checkBox_9: "--include-plugin-pyqt5", 302 | self.checkBox_17: "--include-plugin-numpy",self.checkBox_20:"--include-plugin-torch", 303 | self.checkBox_11:"--include-plugin-matplotlib",self.checkBox_13:"--include-plugin-pyqt6", 304 | self.checkBox_15:"--include-plugin-pyside2",self.checkBox_12:"--include-plugin-pyside6", 305 | self.checkBox_18:"--include-plugin-no-qt5",self.checkBox_22:"--include-plugin-upx", 306 | self.checkBox_19:"--include-plugin-tensorflow",self.checkBox_25:"--include-plugin-pywebview", 307 | self.checkBox_24:"--include-plugin-tk-inter",self.checkBox_23:"--include-plugin-trio", 308 | self.checkBox_14:"--include-plugin-multiprocessing",self.radioButton:"--windows-disable-console", 309 | self.radioButton_2:""} 310 | for check in self.checkBox_dict.keys(): 311 | try: 312 | check.clicked.connect(self.get_package_method) 313 | except: 314 | pass 315 | self.lineEdit_9.setEnabled(False) 316 | def nofollow_import_to(self): 317 | self.follow_import_to_document_str=self.lineEdit_3.text() 318 | self.statusbar.showMessage("add module to nofollow_import_to ") 319 | def nofollow_import_to_remove(self): 320 | self.lineEdit_3.setText("Enter module/package ;Separate them with commas") 321 | self.follow_import_to_document_str="" 322 | self.statusbar.showMessage("Removed") 323 | def follow_import_to(self): 324 | try: 325 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "getExistingDirectory", "./") 326 | self.follow_import_to_document = directory.split("/")[-1] 327 | self.follow_import_to_document_str+=self.follow_import_to_document+"," 328 | self.lineEdit_4.setText(self.follow_import_to_document_str) 329 | except Exception as e: 330 | print(e) 331 | pass 332 | def follow_import_to_remove(self): 333 | try: 334 | self.lineEdit_4.setText("Select the folder you want to compile") 335 | except Exception as e: 336 | self.statusbar.showMessage("Removed") 337 | pass 338 | def include_data_files(self): 339 | pass 340 | def set_icon(self): 341 | try: 342 | if not self.checkBox_7.isChecked(): 343 | file = QtWidgets.QFileDialog.getOpenFileName(self, 344 | "getOpenFileName", "./", 345 | "All Files (*);;Text Files (*)") 346 | self.iconpath = file[0] 347 | self.lineEdit_6.setText(self.iconpath) 348 | src = self.iconpath 349 | dist = self.filenpath + src.split("/")[-1] 350 | if not os.path.exists(dist): 351 | shutil.copyfile(src, dist) 352 | self.iconname = src.split("/")[-1] 353 | 354 | except Exception as e: 355 | print(e) 356 | def remove_icon(self): 357 | self.lineEdit_6.setText("Select icon") 358 | self.statusbar.showMessage("Removed") 359 | 360 | def include_data_files(self): 361 | try: 362 | file = QtWidgets.QFileDialog.getOpenFileName(self, 363 | "getOpenFileName", "./", 364 | "All Files (*);;Text Files (*)") 365 | self.include_data_files=file[0] 366 | except Exception as e: 367 | pass 368 | 369 | def include_package_remove(self): 370 | self.lineEdit_9.setText("Default to the entire module") 371 | def quit(self): 372 | sys.exit() 373 | # Press the green button in the gutter to run the script. 374 | if __name__ == '__main__': 375 | QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) 376 | app = QtWidgets.QApplication(sys.argv) 377 | QApplication.setStyle(QStyleFactory.create('Fusion')) 378 | win = MainGui() 379 | win.show() 380 | sys.exit(app.exec_()) 381 | 382 | # See PyCharm help at https://www.jetbrains.com/help/pycharm/ 383 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | ********** 2 | EasyNuitka User Manual 3 | ********** 4 | 5 | ********** 6 | Overview 7 | ********** 8 | EasyNuitka is a Nuitka-based packaging tool with a graphical interface 9 | 10 | 11 | ![alt tag](http://cad-upyun.test.upcdn.net/EasyNuitka/EasyNuitka.png) 12 | ******* 13 | Usage 14 | ******* 15 | 16 | Requirements 17 | ============ 18 | 19 | - C Compiler: You need a compiler with support for C11 or alternatively 20 | for C++03 [#]_ 21 | 22 | Currently this means, you need to use one of these compilers: 23 | 24 | - The MinGW64 C11 compiler on Windows, must be based on gcc 11.2 or 25 | higher. It will be *automatically* downloaded if no usable C 26 | compiler is found, which is the recommended way of installing it, 27 | as Nuitka will also upgrade it for you. 28 | 29 | - Visual Studio 2022 or higher on Windows [#]_, older versions will 30 | work but only supported for commercial users. Configure to use the 31 | English language pack for best results (Nuitka filters away 32 | garbage outputs, but only for English language). It will be used 33 | by default if installed. 34 | 35 | - On all other platforms, the ``gcc`` compiler of at least version 36 | 5.1, and below that the ``g++`` compiler of at least version 4.4 37 | as an alternative. 38 | 39 | - The ``clang`` compiler on macOS X and most FreeBSD architectures. 40 | 41 | - On Windows the ``clang-cl`` compiler on Windows can be used if 42 | provided by the Visual Studio installer. 43 | 44 | - Python: Version 2.6, 2.7 or 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 45 | 46 | .. important:: 47 | 48 | For Python 3.3/3.4 and *only* those, we need other Python version 49 | as a *compile time* dependency. 50 | 51 | Nuitka itself is fully compatible with all listed versions, but 52 | Scons as an internally used tool is not. 53 | 54 | For these versions, you *need* a Python2 or Python 3.5 or higher 55 | installed as well, but only during the compile time only. That is 56 | for use with Scons (which orchestrates the C compilation), which 57 | does not support the same Python versions as Nuitka. 58 | 59 | In addition, on Windows, Python2 cannot be used because 60 | ``clcache`` does not work with it, there a Python 3.5 or higher 61 | needs to be installed. 62 | 63 | Nuitka finds these needed Python versions (e.g. on Windows via 64 | registry) and you shouldn't notice it as long as they are 65 | installed. 66 | 67 | Increasingly, other functionality is available when another Python 68 | has a certain package installed. For example, onefile compression 69 | will work for a Python 2.x when another Python is found that has 70 | the ``zstandard`` package installed. 71 | 72 | .. admonition:: Moving binaries to other machines 73 | 74 | The created binaries can be made executable independent of the 75 | Python installation, with ``--standalone`` and ``--onefile`` 76 | options. 77 | 78 | .. admonition:: Binary filename suffix 79 | 80 | The created binaries have an ``.exe`` suffix on Windows. On other 81 | platforms they have no suffix for standalone mode, or ``.bin`` 82 | suffix, that you are free to remove or change, or specify with the 83 | ``-o`` option. 84 | 85 | The suffix for acceleration mode is added just to be sure that the 86 | original script name and the binary name do not ever collide, so 87 | we can safely do an overwrite without destroying the original 88 | source file. 89 | 90 | .. admonition:: It **has to** be CPython, Anaconda Python. 91 | 92 | You need the standard Python implementation, called "CPython", to 93 | execute Nuitka, because it is closely tied to implementation 94 | details of it. 95 | 96 | .. admonition:: It **cannot be** from Windows app store 97 | 98 | It is known that Windows app store Python definitely does not 99 | work, it's checked against. And on macOS "pyenv" likely does 100 | **not** work. 101 | 102 | - Operating System: Linux, FreeBSD, NetBSD, macOS X, and Windows (32/64 103 | bits). 104 | 105 | Others may work as well. The portability is expected to be generally 106 | good, but the e.g. Scons usage may have to be adapted. Make sure to 107 | match Windows Python and C compiler architecture, or else you will 108 | get cryptic error messages. 109 | 110 | - Architectures: x86, x86_64 (amd64), and arm, likely many more 111 | 112 | Other architectures are expected to also work, out of the box, as 113 | Nuitka is generally not using any hardware specifics. These are just 114 | the ones tested and known to be good. Feedback is welcome. Generally, 115 | the architectures that Debian supports can be considered good and 116 | tested too. 117 | 118 | .. [#] 119 | 120 | Support for this C11 is a given with gcc 5.x or higher or any clang 121 | version. 122 | 123 | The MSVC compiler doesn't do it yet. But as a workaround, as the C++03 124 | language standard is very overlapping with C11, it is then used instead 125 | where the C compiler is too old. Nuitka used to require a C++ compiler 126 | in the past, but it changed. 127 | 128 | .. [#] 129 | 130 | Download for free from 131 | https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx 132 | (the community editions work just fine). 133 | 134 | The latest version is recommended but not required. On the other hand, 135 | there is no need to except pre-Windows 10 support, and they might work 136 | for you, but support of these configurations is only available to 137 | commercial users. 138 | 139 | 140 | Installation 141 | ============ 142 | 143 | For most systems, there will be packages on the `download page 144 | `__ of Nuitka. But you can also 145 | install it from source code as described above, but also like any other 146 | Python program it can be installed via the normal ``python setup.py 147 | install`` routine. 148 | 149 | License 150 | ======= 151 | 152 | Nuitka is licensed under the Apache License, Version 2.0; you may not 153 | use it except in compliance with the License. 154 | 155 | You may obtain a copy of the License at 156 | http://www.apache.org/licenses/LICENSE-2.0 157 | 158 | Unless required by applicable law or agreed to in writing, software 159 | distributed under the License is distributed on an "AS IS" BASIS, 160 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 161 | See the License for the specific language governing permissions and 162 | limitations under the License. 163 | 164 | ************************************* 165 | Tutorial Setup and build on Windows 166 | ************************************* 167 | 168 | This is basic steps if you have nothing installed, of course if you have 169 | any of the parts, just skip it. 170 | 171 | Setup 172 | ===== 173 | 174 | Install Python 175 | -------------- 176 | 177 | - Download and install Python from 178 | https://www.python.org/downloads/windows 179 | 180 | - Select one of ``Windows x86-64 web-based installer`` (64 bits Python, 181 | recommended) or ``x86 executable`` (32 bits Python) installer. 182 | 183 | - Verify it's working using command ``python --version``. 184 | 185 | Install Nuitka 186 | -------------- 187 | 188 | - ``python -m pip install nuitka`` 189 | 190 | - Verify using command ``python -m nuitka --version`` 191 | 192 | Install EasyNuitka 193 | -------------- 194 | - ``python -m pip install EasyNuitka`` 195 | 196 | Run EasyNuitka 197 | -------------- 198 | - ``python -m EasyNuitka`` 199 | 200 | 201 | Help 202 | -------------- 203 | You will find the current version at: 204 | https://nuitka.net/doc/user-manual.html 205 | -------------------------------------------------------------------------------- /exe/EasyNuitka.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qunat/EasyNuitka/87917f261c40e4be65a30a448bc6d4e64d0fd1f2/exe/EasyNuitka.exe -------------------------------------------------------------------------------- /icon/Nuitka.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qunat/EasyNuitka/87917f261c40e4be65a30a448bc6d4e64d0fd1f2/icon/Nuitka.ico -------------------------------------------------------------------------------- /icon/Nuitka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qunat/EasyNuitka/87917f261c40e4be65a30a448bc6d4e64d0fd1f2/icon/Nuitka.png -------------------------------------------------------------------------------- /mainui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'mainui.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.15.4 6 | # 7 | # WARNING: Any manual changes made to this file will be lost when pyuic5 is 8 | # run again. Do not edit this file unless you know what you are doing. 9 | 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | 14 | class Ui_MainWindow(object): 15 | def setupUi(self, MainWindow): 16 | MainWindow.setObjectName("MainWindow") 17 | MainWindow.resize(774, 774) 18 | font = QtGui.QFont() 19 | font.setFamily("微软雅黑") 20 | font.setPointSize(12) 21 | MainWindow.setFont(font) 22 | self.centralwidget = QtWidgets.QWidget(MainWindow) 23 | self.centralwidget.setObjectName("centralwidget") 24 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 25 | self.groupBox.setGeometry(QtCore.QRect(20, 90, 731, 141)) 26 | self.groupBox.setObjectName("groupBox") 27 | self.checkBox = QtWidgets.QCheckBox(self.groupBox) 28 | self.checkBox.setGeometry(QtCore.QRect(20, 40, 151, 17)) 29 | self.checkBox.setObjectName("checkBox") 30 | self.checkBox_2 = QtWidgets.QCheckBox(self.groupBox) 31 | self.checkBox_2.setGeometry(QtCore.QRect(200, 100, 111, 21)) 32 | self.checkBox_2.setObjectName("checkBox_2") 33 | self.checkBox_3 = QtWidgets.QCheckBox(self.groupBox) 34 | self.checkBox_3.setGeometry(QtCore.QRect(200, 40, 141, 17)) 35 | self.checkBox_3.setObjectName("checkBox_3") 36 | self.checkBox_4 = QtWidgets.QCheckBox(self.groupBox) 37 | self.checkBox_4.setGeometry(QtCore.QRect(200, 70, 141, 17)) 38 | self.checkBox_4.setObjectName("checkBox_4") 39 | self.checkBox_5 = QtWidgets.QCheckBox(self.groupBox) 40 | self.checkBox_5.setGeometry(QtCore.QRect(330, 40, 151, 21)) 41 | self.checkBox_5.setObjectName("checkBox_5") 42 | self.checkBox_6 = QtWidgets.QCheckBox(self.groupBox) 43 | self.checkBox_6.setGeometry(QtCore.QRect(330, 70, 151, 17)) 44 | self.checkBox_6.setObjectName("checkBox_6") 45 | self.checkBox_7 = QtWidgets.QCheckBox(self.groupBox) 46 | self.checkBox_7.setGeometry(QtCore.QRect(20, 100, 91, 17)) 47 | self.checkBox_7.setObjectName("checkBox_7") 48 | self.checkBox_8 = QtWidgets.QCheckBox(self.groupBox) 49 | self.checkBox_8.setGeometry(QtCore.QRect(20, 70, 171, 17)) 50 | self.checkBox_8.setObjectName("checkBox_8") 51 | self.checkBox_10 = QtWidgets.QCheckBox(self.groupBox) 52 | self.checkBox_10.setGeometry(QtCore.QRect(330, 100, 101, 21)) 53 | self.checkBox_10.setObjectName("checkBox_10") 54 | self.checkBox_9 = QtWidgets.QCheckBox(self.groupBox) 55 | self.checkBox_9.setGeometry(QtCore.QRect(500, 40, 221, 21)) 56 | self.checkBox_9.setObjectName("checkBox_9") 57 | self.checkBox_17 = QtWidgets.QCheckBox(self.groupBox) 58 | self.checkBox_17.setGeometry(QtCore.QRect(500, 70, 211, 17)) 59 | self.checkBox_17.setObjectName("checkBox_17") 60 | self.checkBox_20 = QtWidgets.QCheckBox(self.groupBox) 61 | self.checkBox_20.setGeometry(QtCore.QRect(500, 100, 211, 17)) 62 | self.checkBox_20.setObjectName("checkBox_20") 63 | self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget) 64 | self.groupBox_2.setGeometry(QtCore.QRect(20, 410, 731, 241)) 65 | self.groupBox_2.setObjectName("groupBox_2") 66 | self.label_3 = QtWidgets.QLabel(self.groupBox_2) 67 | self.label_3.setGeometry(QtCore.QRect(20, 30, 171, 21)) 68 | self.label_3.setObjectName("label_3") 69 | self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_2) 70 | self.lineEdit_3.setGeometry(QtCore.QRect(200, 30, 331, 21)) 71 | font = QtGui.QFont() 72 | font.setFamily("微软雅黑") 73 | font.setPointSize(9) 74 | self.lineEdit_3.setFont(font) 75 | self.lineEdit_3.setObjectName("lineEdit_3") 76 | self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2) 77 | self.pushButton_3.setGeometry(QtCore.QRect(550, 30, 75, 23)) 78 | self.pushButton_3.setObjectName("pushButton_3") 79 | self.pushButton_10 = QtWidgets.QPushButton(self.groupBox_2) 80 | self.pushButton_10.setGeometry(QtCore.QRect(640, 30, 75, 23)) 81 | self.pushButton_10.setObjectName("pushButton_10") 82 | self.label_5 = QtWidgets.QLabel(self.groupBox_2) 83 | self.label_5.setGeometry(QtCore.QRect(20, 150, 271, 21)) 84 | self.label_5.setObjectName("label_5") 85 | self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox_2) 86 | self.lineEdit_4.setGeometry(QtCore.QRect(200, 60, 331, 21)) 87 | font = QtGui.QFont() 88 | font.setFamily("微软雅黑") 89 | font.setPointSize(9) 90 | self.lineEdit_4.setFont(font) 91 | self.lineEdit_4.setObjectName("lineEdit_4") 92 | self.pushButton_4 = QtWidgets.QPushButton(self.groupBox_2) 93 | self.pushButton_4.setGeometry(QtCore.QRect(550, 60, 75, 23)) 94 | self.pushButton_4.setObjectName("pushButton_4") 95 | self.pushButton_12 = QtWidgets.QPushButton(self.groupBox_2) 96 | self.pushButton_12.setGeometry(QtCore.QRect(640, 60, 75, 23)) 97 | self.pushButton_12.setObjectName("pushButton_12") 98 | self.label_6 = QtWidgets.QLabel(self.groupBox_2) 99 | self.label_6.setGeometry(QtCore.QRect(20, 90, 271, 21)) 100 | self.label_6.setObjectName("label_6") 101 | self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox_2) 102 | self.lineEdit_5.setEnabled(False) 103 | self.lineEdit_5.setGeometry(QtCore.QRect(200, 90, 331, 21)) 104 | font = QtGui.QFont() 105 | font.setFamily("微软雅黑") 106 | font.setPointSize(9) 107 | self.lineEdit_5.setFont(font) 108 | self.lineEdit_5.setObjectName("lineEdit_5") 109 | self.pushButton_5 = QtWidgets.QPushButton(self.groupBox_2) 110 | self.pushButton_5.setGeometry(QtCore.QRect(550, 90, 75, 23)) 111 | self.pushButton_5.setObjectName("pushButton_5") 112 | self.pushButton_14 = QtWidgets.QPushButton(self.groupBox_2) 113 | self.pushButton_14.setGeometry(QtCore.QRect(640, 90, 75, 23)) 114 | self.pushButton_14.setObjectName("pushButton_14") 115 | self.label_7 = QtWidgets.QLabel(self.groupBox_2) 116 | self.label_7.setGeometry(QtCore.QRect(20, 120, 151, 21)) 117 | self.label_7.setObjectName("label_7") 118 | self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox_2) 119 | self.lineEdit_8.setEnabled(False) 120 | self.lineEdit_8.setGeometry(QtCore.QRect(200, 120, 331, 21)) 121 | font = QtGui.QFont() 122 | font.setFamily("微软雅黑") 123 | font.setPointSize(9) 124 | self.lineEdit_8.setFont(font) 125 | self.lineEdit_8.setObjectName("lineEdit_8") 126 | self.pushButton_15 = QtWidgets.QPushButton(self.groupBox_2) 127 | self.pushButton_15.setGeometry(QtCore.QRect(550, 120, 75, 23)) 128 | self.pushButton_15.setObjectName("pushButton_15") 129 | self.pushButton_16 = QtWidgets.QPushButton(self.groupBox_2) 130 | self.pushButton_16.setGeometry(QtCore.QRect(640, 120, 75, 23)) 131 | self.pushButton_16.setObjectName("pushButton_16") 132 | self.label_8 = QtWidgets.QLabel(self.groupBox_2) 133 | self.label_8.setGeometry(QtCore.QRect(20, 60, 171, 21)) 134 | self.label_8.setObjectName("label_8") 135 | self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox_2) 136 | self.lineEdit_9.setGeometry(QtCore.QRect(200, 150, 331, 21)) 137 | font = QtGui.QFont() 138 | font.setFamily("微软雅黑") 139 | font.setPointSize(9) 140 | self.lineEdit_9.setFont(font) 141 | self.lineEdit_9.setObjectName("lineEdit_9") 142 | self.pushButton_17 = QtWidgets.QPushButton(self.groupBox_2) 143 | self.pushButton_17.setGeometry(QtCore.QRect(640, 150, 75, 23)) 144 | self.pushButton_17.setObjectName("pushButton_17") 145 | self.pushButton_18 = QtWidgets.QPushButton(self.groupBox_2) 146 | self.pushButton_18.setGeometry(QtCore.QRect(550, 150, 75, 23)) 147 | self.pushButton_18.setObjectName("pushButton_18") 148 | self.label_4 = QtWidgets.QLabel(self.groupBox_2) 149 | self.label_4.setGeometry(QtCore.QRect(20, 180, 61, 21)) 150 | self.label_4.setObjectName("label_4") 151 | self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox_2) 152 | self.lineEdit_6.setGeometry(QtCore.QRect(200, 180, 331, 21)) 153 | font = QtGui.QFont() 154 | font.setFamily("微软雅黑") 155 | font.setPointSize(9) 156 | self.lineEdit_6.setFont(font) 157 | self.lineEdit_6.setObjectName("lineEdit_6") 158 | self.pushButton_19 = QtWidgets.QPushButton(self.groupBox_2) 159 | self.pushButton_19.setGeometry(QtCore.QRect(640, 180, 75, 23)) 160 | self.pushButton_19.setObjectName("pushButton_19") 161 | self.pushButton_20 = QtWidgets.QPushButton(self.groupBox_2) 162 | self.pushButton_20.setGeometry(QtCore.QRect(550, 180, 75, 23)) 163 | self.pushButton_20.setObjectName("pushButton_20") 164 | self.radioButton = QtWidgets.QRadioButton(self.groupBox_2) 165 | self.radioButton.setGeometry(QtCore.QRect(200, 210, 89, 17)) 166 | self.radioButton.setObjectName("radioButton") 167 | self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_2) 168 | self.radioButton_2.setGeometry(QtCore.QRect(360, 210, 101, 17)) 169 | self.radioButton_2.setObjectName("radioButton_2") 170 | self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget) 171 | self.pushButton_7.setGeometry(QtCore.QRect(140, 680, 131, 31)) 172 | self.pushButton_7.setObjectName("pushButton_7") 173 | self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget) 174 | self.pushButton_8.setGeometry(QtCore.QRect(340, 680, 101, 31)) 175 | self.pushButton_8.setObjectName("pushButton_8") 176 | self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget) 177 | self.pushButton_9.setGeometry(QtCore.QRect(500, 680, 101, 31)) 178 | self.pushButton_9.setObjectName("pushButton_9") 179 | self.layoutWidget = QtWidgets.QWidget(self.centralwidget) 180 | self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 721, 33)) 181 | self.layoutWidget.setObjectName("layoutWidget") 182 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) 183 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 184 | self.horizontalLayout.setObjectName("horizontalLayout") 185 | self.label = QtWidgets.QLabel(self.layoutWidget) 186 | self.label.setObjectName("label") 187 | self.horizontalLayout.addWidget(self.label) 188 | self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget) 189 | self.lineEdit.setObjectName("lineEdit") 190 | self.horizontalLayout.addWidget(self.lineEdit) 191 | self.pushButton = QtWidgets.QPushButton(self.layoutWidget) 192 | self.pushButton.setObjectName("pushButton") 193 | self.horizontalLayout.addWidget(self.pushButton) 194 | self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget) 195 | self.layoutWidget1.setGeometry(QtCore.QRect(21, 50, 721, 33)) 196 | self.layoutWidget1.setObjectName("layoutWidget1") 197 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget1) 198 | self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) 199 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 200 | self.label_2 = QtWidgets.QLabel(self.layoutWidget1) 201 | self.label_2.setObjectName("label_2") 202 | self.horizontalLayout_2.addWidget(self.label_2) 203 | self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget1) 204 | self.lineEdit_2.setObjectName("lineEdit_2") 205 | self.horizontalLayout_2.addWidget(self.lineEdit_2) 206 | self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget1) 207 | self.pushButton_2.setObjectName("pushButton_2") 208 | self.horizontalLayout_2.addWidget(self.pushButton_2) 209 | self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget) 210 | self.groupBox_3.setGeometry(QtCore.QRect(20, 240, 731, 161)) 211 | self.groupBox_3.setObjectName("groupBox_3") 212 | self.checkBox_11 = QtWidgets.QCheckBox(self.groupBox_3) 213 | self.checkBox_11.setGeometry(QtCore.QRect(20, 30, 231, 21)) 214 | self.checkBox_11.setObjectName("checkBox_11") 215 | self.checkBox_13 = QtWidgets.QCheckBox(self.groupBox_3) 216 | self.checkBox_13.setGeometry(QtCore.QRect(260, 30, 201, 21)) 217 | self.checkBox_13.setObjectName("checkBox_13") 218 | self.checkBox_15 = QtWidgets.QCheckBox(self.groupBox_3) 219 | self.checkBox_15.setGeometry(QtCore.QRect(500, 30, 211, 21)) 220 | self.checkBox_15.setObjectName("checkBox_15") 221 | self.checkBox_12 = QtWidgets.QCheckBox(self.groupBox_3) 222 | self.checkBox_12.setGeometry(QtCore.QRect(20, 60, 221, 21)) 223 | self.checkBox_12.setObjectName("checkBox_12") 224 | self.checkBox_18 = QtWidgets.QCheckBox(self.groupBox_3) 225 | self.checkBox_18.setGeometry(QtCore.QRect(260, 60, 201, 21)) 226 | self.checkBox_18.setObjectName("checkBox_18") 227 | self.checkBox_19 = QtWidgets.QCheckBox(self.groupBox_3) 228 | self.checkBox_19.setGeometry(QtCore.QRect(20, 90, 231, 21)) 229 | self.checkBox_19.setObjectName("checkBox_19") 230 | self.checkBox_22 = QtWidgets.QCheckBox(self.groupBox_3) 231 | self.checkBox_22.setGeometry(QtCore.QRect(500, 60, 201, 21)) 232 | self.checkBox_22.setObjectName("checkBox_22") 233 | self.checkBox_23 = QtWidgets.QCheckBox(self.groupBox_3) 234 | self.checkBox_23.setGeometry(QtCore.QRect(20, 120, 201, 21)) 235 | self.checkBox_23.setObjectName("checkBox_23") 236 | self.checkBox_24 = QtWidgets.QCheckBox(self.groupBox_3) 237 | self.checkBox_24.setGeometry(QtCore.QRect(500, 90, 211, 21)) 238 | self.checkBox_24.setObjectName("checkBox_24") 239 | self.checkBox_25 = QtWidgets.QCheckBox(self.groupBox_3) 240 | self.checkBox_25.setGeometry(QtCore.QRect(260, 90, 241, 21)) 241 | self.checkBox_25.setObjectName("checkBox_25") 242 | self.checkBox_14 = QtWidgets.QCheckBox(self.groupBox_3) 243 | self.checkBox_14.setGeometry(QtCore.QRect(260, 120, 281, 21)) 244 | self.checkBox_14.setObjectName("checkBox_14") 245 | MainWindow.setCentralWidget(self.centralwidget) 246 | self.menubar = QtWidgets.QMenuBar(MainWindow) 247 | self.menubar.setGeometry(QtCore.QRect(0, 0, 774, 26)) 248 | self.menubar.setObjectName("menubar") 249 | self.menu = QtWidgets.QMenu(self.menubar) 250 | self.menu.setObjectName("menu") 251 | self.menu_2 = QtWidgets.QMenu(self.menubar) 252 | self.menu_2.setObjectName("menu_2") 253 | self.menu_3 = QtWidgets.QMenu(self.menubar) 254 | self.menu_3.setObjectName("menu_3") 255 | self.menu_4 = QtWidgets.QMenu(self.menubar) 256 | self.menu_4.setObjectName("menu_4") 257 | MainWindow.setMenuBar(self.menubar) 258 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 259 | font = QtGui.QFont() 260 | font.setFamily("微软雅黑") 261 | font.setPointSize(8) 262 | self.statusbar.setFont(font) 263 | self.statusbar.setObjectName("statusbar") 264 | MainWindow.setStatusBar(self.statusbar) 265 | self.menubar.addAction(self.menu.menuAction()) 266 | self.menubar.addAction(self.menu_2.menuAction()) 267 | self.menubar.addAction(self.menu_3.menuAction()) 268 | self.menubar.addAction(self.menu_4.menuAction()) 269 | 270 | self.retranslateUi(MainWindow) 271 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 272 | 273 | def retranslateUi(self, MainWindow): 274 | _translate = QtCore.QCoreApplication.translate 275 | MainWindow.setWindowTitle(_translate("MainWindow", "AutoNuitka")) 276 | self.groupBox.setTitle(_translate("MainWindow", "package method")) 277 | self.checkBox.setText(_translate("MainWindow", "--follow-imports")) 278 | self.checkBox_2.setText(_translate("MainWindow", "--mingw64")) 279 | self.checkBox_3.setText(_translate("MainWindow", "--standalone")) 280 | self.checkBox_4.setText(_translate("MainWindow", "--onefile")) 281 | self.checkBox_5.setText(_translate("MainWindow", "--show-memory")) 282 | self.checkBox_6.setText(_translate("MainWindow", "--show-progress")) 283 | self.checkBox_7.setText(_translate("MainWindow", "--module ")) 284 | self.checkBox_8.setText(_translate("MainWindow", "--nofollow-imports")) 285 | self.checkBox_10.setText(_translate("MainWindow", "--msvc64")) 286 | self.checkBox_9.setText(_translate("MainWindow", "--include-plugin-pyqt5")) 287 | self.checkBox_17.setText(_translate("MainWindow", "--include-plugin-numpy")) 288 | self.checkBox_20.setText(_translate("MainWindow", "--include-plugin-torch")) 289 | self.groupBox_2.setTitle(_translate("MainWindow", "Parameter Setting")) 290 | self.label_3.setText(_translate("MainWindow", "--nofollow-import-to")) 291 | self.lineEdit_3.setText(_translate("MainWindow", "Enter module/package ;Separate them with commas")) 292 | self.pushButton_3.setText(_translate("MainWindow", "Add")) 293 | self.pushButton_10.setText(_translate("MainWindow", "Remove")) 294 | self.label_5.setText(_translate("MainWindow", "--include-package")) 295 | self.lineEdit_4.setText(_translate("MainWindow", "Select the folder you want to compile")) 296 | self.pushButton_4.setText(_translate("MainWindow", "Add")) 297 | self.pushButton_12.setText(_translate("MainWindow", "Remove")) 298 | self.label_6.setText(_translate("MainWindow", "--include-data-files")) 299 | self.pushButton_5.setText(_translate("MainWindow", "Add")) 300 | self.pushButton_14.setText(_translate("MainWindow", "Remove")) 301 | self.label_7.setText(_translate("MainWindow", "--include-data-dir")) 302 | self.pushButton_15.setText(_translate("MainWindow", "Add")) 303 | self.pushButton_16.setText(_translate("MainWindow", "Remove")) 304 | self.label_8.setText(_translate("MainWindow", "--follow-import-to")) 305 | self.lineEdit_9.setText(_translate("MainWindow", "Default to the entire module")) 306 | self.pushButton_17.setText(_translate("MainWindow", "Remove")) 307 | self.pushButton_18.setText(_translate("MainWindow", "Add")) 308 | self.label_4.setText(_translate("MainWindow", " Icons")) 309 | self.lineEdit_6.setText(_translate("MainWindow", "Select icon")) 310 | self.pushButton_19.setText(_translate("MainWindow", "Remove")) 311 | self.pushButton_20.setText(_translate("MainWindow", "Add")) 312 | self.radioButton.setText(_translate("MainWindow", "windows")) 313 | self.radioButton_2.setText(_translate("MainWindow", "console")) 314 | self.pushButton_7.setText(_translate("MainWindow", "Start package")) 315 | self.pushButton_8.setText(_translate("MainWindow", "stop")) 316 | self.pushButton_9.setText(_translate("MainWindow", "Quite")) 317 | self.label.setText(_translate("MainWindow", "Manin File/Module")) 318 | self.pushButton.setText(_translate("MainWindow", "choose")) 319 | self.label_2.setText(_translate("MainWindow", "OutPut Path ")) 320 | self.pushButton_2.setText(_translate("MainWindow", "choose")) 321 | self.groupBox_3.setTitle(_translate("MainWindow", "other plugin")) 322 | self.checkBox_11.setText(_translate("MainWindow", "--include-plugin-matplotlib")) 323 | self.checkBox_13.setText(_translate("MainWindow", "--include-plugin-pyqt6")) 324 | self.checkBox_15.setText(_translate("MainWindow", "--include-plugin-pyside2")) 325 | self.checkBox_12.setText(_translate("MainWindow", "--include-plugin-pyside6")) 326 | self.checkBox_18.setText(_translate("MainWindow", "--include-plugin-no-qt5")) 327 | self.checkBox_19.setText(_translate("MainWindow", "--include-plugin-tensorflow")) 328 | self.checkBox_22.setText(_translate("MainWindow", "--include-plugin-upx")) 329 | self.checkBox_23.setText(_translate("MainWindow", "--include-plugin-trio")) 330 | self.checkBox_24.setText(_translate("MainWindow", "--include-plugin-tk-inter")) 331 | self.checkBox_25.setText(_translate("MainWindow", "--include-plugin-pywebview")) 332 | self.checkBox_14.setText(_translate("MainWindow", "--include-plugin-multiprocessing")) 333 | self.menu.setTitle(_translate("MainWindow", "File")) 334 | self.menu_2.setTitle(_translate("MainWindow", "Edit")) 335 | self.menu_3.setTitle(_translate("MainWindow", "Setting")) 336 | self.menu_4.setTitle(_translate("MainWindow", "Help")) 337 | -------------------------------------------------------------------------------- /mainui.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 774 10 | 774 11 | 12 | 13 | 14 | 15 | 微软雅黑 16 | 12 17 | 18 | 19 | 20 | AutoNuitka 21 | 22 | 23 | 24 | 25 | 26 | 20 27 | 90 28 | 731 29 | 141 30 | 31 | 32 | 33 | package method 34 | 35 | 36 | 37 | 38 | 20 39 | 40 40 | 151 41 | 17 42 | 43 | 44 | 45 | --follow-imports 46 | 47 | 48 | 49 | 50 | 51 | 200 52 | 100 53 | 111 54 | 21 55 | 56 | 57 | 58 | --mingw64 59 | 60 | 61 | 62 | 63 | 64 | 200 65 | 40 66 | 141 67 | 17 68 | 69 | 70 | 71 | --standalone 72 | 73 | 74 | 75 | 76 | 77 | 200 78 | 70 79 | 141 80 | 17 81 | 82 | 83 | 84 | --onefile 85 | 86 | 87 | 88 | 89 | 90 | 330 91 | 40 92 | 151 93 | 21 94 | 95 | 96 | 97 | --show-memory 98 | 99 | 100 | 101 | 102 | 103 | 330 104 | 70 105 | 151 106 | 17 107 | 108 | 109 | 110 | --show-progress 111 | 112 | 113 | 114 | 115 | 116 | 20 117 | 100 118 | 91 119 | 17 120 | 121 | 122 | 123 | --module 124 | 125 | 126 | 127 | 128 | 129 | 20 130 | 70 131 | 171 132 | 17 133 | 134 | 135 | 136 | --nofollow-imports 137 | 138 | 139 | 140 | 141 | 142 | 330 143 | 100 144 | 101 145 | 21 146 | 147 | 148 | 149 | --msvc64 150 | 151 | 152 | 153 | 154 | 155 | 500 156 | 40 157 | 221 158 | 21 159 | 160 | 161 | 162 | --include-plugin-pyqt5 163 | 164 | 165 | 166 | 167 | 168 | 500 169 | 70 170 | 211 171 | 17 172 | 173 | 174 | 175 | --include-plugin-numpy 176 | 177 | 178 | 179 | 180 | 181 | 500 182 | 100 183 | 211 184 | 17 185 | 186 | 187 | 188 | --include-plugin-torch 189 | 190 | 191 | 192 | 193 | 194 | 195 | 20 196 | 410 197 | 731 198 | 241 199 | 200 | 201 | 202 | Parameter Setting 203 | 204 | 205 | 206 | 207 | 20 208 | 30 209 | 171 210 | 21 211 | 212 | 213 | 214 | --nofollow-import-to 215 | 216 | 217 | 218 | 219 | 220 | 200 221 | 30 222 | 331 223 | 21 224 | 225 | 226 | 227 | 228 | 微软雅黑 229 | 9 230 | 231 | 232 | 233 | Enter module/package ;Separate them with commas 234 | 235 | 236 | 237 | 238 | 239 | 550 240 | 30 241 | 75 242 | 23 243 | 244 | 245 | 246 | Add 247 | 248 | 249 | 250 | 251 | 252 | 640 253 | 30 254 | 75 255 | 23 256 | 257 | 258 | 259 | Remove 260 | 261 | 262 | 263 | 264 | 265 | 20 266 | 150 267 | 271 268 | 21 269 | 270 | 271 | 272 | --include-package 273 | 274 | 275 | 276 | 277 | 278 | 200 279 | 60 280 | 331 281 | 21 282 | 283 | 284 | 285 | 286 | 微软雅黑 287 | 9 288 | 289 | 290 | 291 | Select the folder you want to compile 292 | 293 | 294 | 295 | 296 | 297 | 550 298 | 60 299 | 75 300 | 23 301 | 302 | 303 | 304 | Add 305 | 306 | 307 | 308 | 309 | 310 | 640 311 | 60 312 | 75 313 | 23 314 | 315 | 316 | 317 | Remove 318 | 319 | 320 | 321 | 322 | 323 | 20 324 | 90 325 | 271 326 | 21 327 | 328 | 329 | 330 | --include-data-files 331 | 332 | 333 | 334 | 335 | false 336 | 337 | 338 | 339 | 200 340 | 90 341 | 331 342 | 21 343 | 344 | 345 | 346 | 347 | 微软雅黑 348 | 9 349 | 350 | 351 | 352 | 353 | 354 | 355 | 550 356 | 90 357 | 75 358 | 23 359 | 360 | 361 | 362 | Add 363 | 364 | 365 | 366 | 367 | 368 | 640 369 | 90 370 | 75 371 | 23 372 | 373 | 374 | 375 | Remove 376 | 377 | 378 | 379 | 380 | 381 | 20 382 | 120 383 | 151 384 | 21 385 | 386 | 387 | 388 | --include-data-dir 389 | 390 | 391 | 392 | 393 | false 394 | 395 | 396 | 397 | 200 398 | 120 399 | 331 400 | 21 401 | 402 | 403 | 404 | 405 | 微软雅黑 406 | 9 407 | 408 | 409 | 410 | 411 | 412 | 413 | 550 414 | 120 415 | 75 416 | 23 417 | 418 | 419 | 420 | Add 421 | 422 | 423 | 424 | 425 | 426 | 640 427 | 120 428 | 75 429 | 23 430 | 431 | 432 | 433 | Remove 434 | 435 | 436 | 437 | 438 | 439 | 20 440 | 60 441 | 171 442 | 21 443 | 444 | 445 | 446 | --follow-import-to 447 | 448 | 449 | 450 | 451 | 452 | 200 453 | 150 454 | 331 455 | 21 456 | 457 | 458 | 459 | 460 | 微软雅黑 461 | 9 462 | 463 | 464 | 465 | Default to the entire module 466 | 467 | 468 | 469 | 470 | 471 | 640 472 | 150 473 | 75 474 | 23 475 | 476 | 477 | 478 | Remove 479 | 480 | 481 | 482 | 483 | 484 | 550 485 | 150 486 | 75 487 | 23 488 | 489 | 490 | 491 | Add 492 | 493 | 494 | 495 | 496 | 497 | 20 498 | 180 499 | 61 500 | 21 501 | 502 | 503 | 504 | Icons 505 | 506 | 507 | 508 | 509 | 510 | 200 511 | 180 512 | 331 513 | 21 514 | 515 | 516 | 517 | 518 | 微软雅黑 519 | 9 520 | 521 | 522 | 523 | Select icon 524 | 525 | 526 | 527 | 528 | 529 | 640 530 | 180 531 | 75 532 | 23 533 | 534 | 535 | 536 | Remove 537 | 538 | 539 | 540 | 541 | 542 | 550 543 | 180 544 | 75 545 | 23 546 | 547 | 548 | 549 | Add 550 | 551 | 552 | 553 | 554 | 555 | 200 556 | 210 557 | 89 558 | 17 559 | 560 | 561 | 562 | windows 563 | 564 | 565 | 566 | 567 | 568 | 360 569 | 210 570 | 101 571 | 17 572 | 573 | 574 | 575 | console 576 | 577 | 578 | 579 | 580 | 581 | 582 | 140 583 | 680 584 | 131 585 | 31 586 | 587 | 588 | 589 | Start package 590 | 591 | 592 | 593 | 594 | 595 | 340 596 | 680 597 | 101 598 | 31 599 | 600 | 601 | 602 | stop 603 | 604 | 605 | 606 | 607 | 608 | 500 609 | 680 610 | 101 611 | 31 612 | 613 | 614 | 615 | Quite 616 | 617 | 618 | 619 | 620 | 621 | 20 622 | 10 623 | 721 624 | 33 625 | 626 | 627 | 628 | 629 | 630 | 631 | Manin File/Module 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | choose 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 21 651 | 50 652 | 721 653 | 33 654 | 655 | 656 | 657 | 658 | 659 | 660 | OutPut Path 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | choose 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 20 680 | 240 681 | 731 682 | 161 683 | 684 | 685 | 686 | other plugin 687 | 688 | 689 | 690 | 691 | 20 692 | 30 693 | 231 694 | 21 695 | 696 | 697 | 698 | --include-plugin-matplotlib 699 | 700 | 701 | 702 | 703 | 704 | 260 705 | 30 706 | 201 707 | 21 708 | 709 | 710 | 711 | --include-plugin-pyqt6 712 | 713 | 714 | 715 | 716 | 717 | 500 718 | 30 719 | 211 720 | 21 721 | 722 | 723 | 724 | --include-plugin-pyside2 725 | 726 | 727 | 728 | 729 | 730 | 20 731 | 60 732 | 221 733 | 21 734 | 735 | 736 | 737 | --include-plugin-pyside6 738 | 739 | 740 | 741 | 742 | 743 | 260 744 | 60 745 | 201 746 | 21 747 | 748 | 749 | 750 | --include-plugin-no-qt5 751 | 752 | 753 | 754 | 755 | 756 | 20 757 | 90 758 | 231 759 | 21 760 | 761 | 762 | 763 | --include-plugin-tensorflow 764 | 765 | 766 | 767 | 768 | 769 | 500 770 | 60 771 | 201 772 | 21 773 | 774 | 775 | 776 | --include-plugin-upx 777 | 778 | 779 | 780 | 781 | 782 | 20 783 | 120 784 | 201 785 | 21 786 | 787 | 788 | 789 | --include-plugin-trio 790 | 791 | 792 | 793 | 794 | 795 | 500 796 | 90 797 | 211 798 | 21 799 | 800 | 801 | 802 | --include-plugin-tk-inter 803 | 804 | 805 | 806 | 807 | 808 | 260 809 | 90 810 | 241 811 | 21 812 | 813 | 814 | 815 | --include-plugin-pywebview 816 | 817 | 818 | 819 | 820 | 821 | 260 822 | 120 823 | 281 824 | 21 825 | 826 | 827 | 828 | --include-plugin-multiprocessing 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 0 837 | 0 838 | 774 839 | 26 840 | 841 | 842 | 843 | 844 | File 845 | 846 | 847 | 848 | 849 | Edit 850 | 851 | 852 | 853 | 854 | Setting 855 | 856 | 857 | 858 | 859 | Help 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 微软雅黑 871 | 8 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | -------------------------------------------------------------------------------- /pic/EasyNuitka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qunat/EasyNuitka/87917f261c40e4be65a30a448bc6d4e64d0fd1f2/pic/EasyNuitka.png -------------------------------------------------------------------------------- /pic/Nuitka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qunat/EasyNuitka/87917f261c40e4be65a30a448bc6d4e64d0fd1f2/pic/Nuitka.png -------------------------------------------------------------------------------- /src/EasyNuitka.py: -------------------------------------------------------------------------------- 1 | # This is a sample Python script. 2 | import os 3 | import sys 4 | import threading 5 | from PyQt5.QtCore import Qt 6 | from PyQt5 import QtWidgets,QtGui 7 | from PyQt5.QtGui import QIcon 8 | from PyQt5.QtWidgets import QApplication, QStyleFactory 9 | import nuitka 10 | import mainui 11 | import subprocess 12 | import shutil 13 | 14 | 15 | class MainGui(mainui.Ui_MainWindow, QtWidgets.QMainWindow): 16 | def __init__(self,parent=None): 17 | super(MainGui, self).__init__(parent) 18 | self.setupUi(self) 19 | self.setWindowTitle( "EasyNuitka") 20 | self.setWindowIcon(QIcon("./icon/Nuitka.png")) 21 | self.pushButton.clicked.connect(self.choose_main_py) 22 | self.pushButton_2.clicked.connect(self.set_output_path) 23 | self.pushButton_7.clicked.connect(self.Multithreading_command) 24 | self.pushButton_4.clicked.connect(self.follow_import_to) 25 | self.pushButton_12.clicked.connect(self.follow_import_to_remove) 26 | self.pushButton_20.clicked.connect(self.set_icon) 27 | self.pushButton_19.clicked.connect(self.remove_icon) 28 | self.pushButton_9.clicked.connect(self.quit) 29 | self.pushButton_3.clicked.connect(self.nofollow_import_to) 30 | self.pushButton_10.clicked.connect(self.nofollow_import_to_remove) 31 | self.pushButton_17.clicked.connect(self.include_package_remove) 32 | self.chekbox_clicked_init() 33 | self.command_dict={} 34 | self.command_str=None 35 | self.main_name=None 36 | self.outputpath="./" 37 | self.follow_import_to_document_str="" 38 | self.nofollow_import_to_document_str="" 39 | self.iconname=None 40 | self.iconpath="" 41 | self.compile_module_path=None 42 | self.statusbar.showMessage("The software runs normally") 43 | def choose_main_py(self): 44 | try: 45 | if not self.checkBox_7.isChecked(): 46 | file = QtWidgets.QFileDialog.getOpenFileName(self, 47 | "choose main.py", "./", 48 | "All Files (*.py);;Text Files (*.py)") 49 | self.filenpath = file[0] 50 | self.lineEdit.setText(file[0]) 51 | self.main_name = self.lineEdit.setText(file[0]) 52 | self.filename = self.filenpath.split("/")[-1] 53 | self.filenpath = self.filenpath.replace(self.filename, "") 54 | self.dish = self.filenpath[0:2] 55 | self.statusbar.showMessage("File selected successfully") 56 | 57 | else : 58 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "choose compile module dir", "./") 59 | self.compile_module_path=directory 60 | self.lineEdit.setText(directory) 61 | self.lineEdit_9.setText(self.compile_module_path.split("/")[-1]) 62 | self.statusbar.showMessage("Output directory set successfully") 63 | 64 | 65 | except Exception as e: 66 | self.statusbar.showMessage("File selection failed") 67 | print(e) 68 | def set_output_path(self): 69 | try: 70 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "getExistingDirectory", "./") 71 | self.outputpath=directory 72 | self.lineEdit_2.setText(directory) 73 | self.statusbar.showMessage("Output directory set successfully") 74 | except Exception as e: 75 | self.statusbar.showMessage("Output directory setting failed") 76 | pass 77 | def get_package_method(self): 78 | #--follow-imports 79 | if self.checkBox.isChecked(): 80 | self.lineEdit_3.setEnabled(False) 81 | self.lineEdit_4.setEnabled(False) 82 | self.checkBox_8.setEnabled(False) 83 | 84 | self.command_dict[self.checkBox]="--follow-imports" 85 | #print(self.command_dict) 86 | elif not self.checkBox.isChecked(): 87 | self.lineEdit_3.setEnabled(True) 88 | self.lineEdit_4.setEnabled(True) 89 | self.checkBox_8.setEnabled(True) 90 | self.command_dict[self.checkBox] = "" 91 | #--nofollow-imports 92 | if self.checkBox_8.isChecked(): 93 | self.checkBox.setEnabled(False) 94 | self.command_dict[self.checkBox_8] = "--nofollow-imports" 95 | #print(self.command_dict) 96 | elif not self.checkBox_8.isChecked(): 97 | self.checkBox.setEnabled(True) 98 | self.command_dict[self.checkBox_8] = "" 99 | #--module 100 | if self.checkBox_7.isChecked(): 101 | self.checkBox.setEnabled(False) 102 | self.checkBox_8.setEnabled(False) 103 | self.checkBox_3.setEnabled(False) 104 | self.checkBox_4.setEnabled(False) 105 | self.lineEdit_3.setEnabled(False) 106 | self.lineEdit_4.setEnabled(False) 107 | self.lineEdit_5.setEnabled(False) 108 | self.lineEdit_8.setEnabled(False) 109 | self.lineEdit_6.setEnabled(False) 110 | self.lineEdit_9.setEnabled(True) 111 | self.radioButton.setEnabled(False) 112 | self.radioButton_2.setEnabled(False) 113 | self.command_dict[self.checkBox_7] = "--module" 114 | #print(self.command_dict) 115 | elif not self.checkBox_7.isChecked(): 116 | self.checkBox_3.setEnabled(True) 117 | self.checkBox_4.setEnabled(True) 118 | self.lineEdit_3.setEnabled(True) 119 | self.lineEdit_4.setEnabled(True) 120 | self.lineEdit_5.setEnabled(True) 121 | self.lineEdit_8.setEnabled(True) 122 | self.lineEdit_6.setEnabled(True) 123 | self.lineEdit_9.setEnabled(False) 124 | self.radioButton.setEnabled(True) 125 | self.radioButton_2.setEnabled(True) 126 | self.checkBox_3.setEnabled(True) 127 | self.checkBox_4.setEnabled(True) 128 | if self.checkBox.isChecked(): 129 | self.checkBox_8.setEnabled(False) 130 | if self.checkBox_8.isChecked(): 131 | self.checkBox.setEnabled(False) 132 | 133 | self.command_dict[self.checkBox_7] = "" 134 | #--standalone 135 | if self.checkBox_3.isChecked(): 136 | self.checkBox_4.setEnabled(False) 137 | self.checkBox_7.setEnabled(False) 138 | self.command_dict[self.checkBox_3] = "--standalone" 139 | elif not self.checkBox_3.isChecked() and not self.checkBox_7.isChecked(): 140 | self.checkBox_7.setEnabled(True) 141 | self.checkBox_4.setEnabled(True) 142 | self.command_dict[self.checkBox_3] = "" 143 | #--onefile 144 | if self.checkBox_4.isChecked(): 145 | self.checkBox_3.setEnabled(False) 146 | self.checkBox_7.setEnabled(False) 147 | self.command_dict[self.checkBox_4] = "--onefile" 148 | elif not self.checkBox_4.isChecked() and not self.checkBox_7.isChecked() : 149 | self.checkBox_3.setEnabled(True) 150 | if not self.checkBox_3.isChecked(): 151 | self.checkBox_7.setEnabled(True) 152 | self.command_dict[self.checkBox_4] = "" 153 | 154 | #--mingw64 155 | if self.checkBox_2.isChecked(): 156 | self.checkBox_10.setEnabled(False) 157 | self.command_dict[self.checkBox_2] = "--mingw64" 158 | else: 159 | self.checkBox_10.setEnabled(True) 160 | self.command_dict[self.checkBox_2] = "" 161 | #--show-memory 162 | if self.checkBox_5.isChecked(): 163 | self.command_dict[self.checkBox_5] = "--show-memory" 164 | else: 165 | self.command_dict[self.checkBox_5] = "" 166 | #--show-progress 167 | if self.checkBox_6.isChecked(): 168 | self.command_dict[self.checkBox_6] = "--show-progress" 169 | else: 170 | self.command_dict[self.checkBox_6] = "" 171 | #-msvc64 172 | if self.checkBox_10.isChecked(): 173 | self.checkBox_2.setEnabled(False) 174 | self.command_dict[self.checkBox_10] = "-msvc64" 175 | else: 176 | self.checkBox_2.setEnabled(True) 177 | self.command_dict[self.checkBox_10] = "" 178 | #--include-plugin-pyqt5 179 | if self.checkBox_9.isChecked(): 180 | self.command_dict[self.checkBox_9] = "--plugin-enable=pyqt5" 181 | else: 182 | self.command_dict[self.checkBox_9] = "" 183 | #--include-plugin-numpy 184 | if self.checkBox_17.isChecked(): 185 | self.command_dict[self.checkBox_17] = "--plugin-enable=numpy" 186 | else: 187 | self.command_dict[self.checkBox_17] = "" 188 | #--include-plugin-torch 189 | if self.checkBox_20.isChecked(): 190 | self.command_dict[self.checkBox_20] = "--plugin-enable=torch" 191 | else: 192 | self.command_dict[self.checkBox_20] = "" 193 | #--include-plugin-matplotlib 194 | if self.checkBox_11.isChecked(): 195 | self.command_dict[self.checkBox_11] = "--plugin-enable=matplotlib" 196 | else: 197 | self.command_dict[self.checkBox_11] = "" 198 | #--include-plugin-pyqt6 199 | if self.checkBox_13.isChecked(): 200 | self.command_dict[self.checkBox_13] = "--plugin-enable=pyqt6" 201 | else: 202 | self.command_dict[self.checkBox_13] = "" 203 | #--include-plugin-pyside2 204 | if self.checkBox_15.isChecked(): 205 | self.command_dict[self.checkBox_15] = "--plugin-enable=pyside2" 206 | else: 207 | self.command_dict[self.checkBox_15] = "" 208 | #--include-plugin-pyside6 209 | if self.checkBox_12.isChecked(): 210 | self.command_dict[self.checkBox_12] = "--plugin-enable=pyside6" 211 | else: 212 | self.command_dict[self.checkBox_12] = "" 213 | #--include-plugin-no-qt5 214 | if self.checkBox_18.isChecked(): 215 | self.command_dict[self.checkBox_18] = "--plugin-enable=no-qt5" 216 | else: 217 | self.command_dict[self.checkBox_18] = "" 218 | #--include-plugin-upx 219 | if self.checkBox_22.isChecked(): 220 | self.command_dict[self.checkBox_22] = "--plugin-enable=upx" 221 | else: 222 | self.command_dict[self.checkBox_22] = "" 223 | #--include-plugin-tensorflow 224 | if self.checkBox_19.isChecked(): 225 | self.command_dict[self.checkBox_19] = "--plugin-enable=tensorflow" 226 | else: 227 | self.command_dict[self.checkBox_19] = "" 228 | #--include-plugin-pywebview 229 | if self.checkBox_25.isChecked(): 230 | self.command_dict[self.checkBox_25] = "--plugin-enable=pywebview" 231 | else: 232 | self.command_dict[self.checkBox_25] = "" 233 | #--include-plugin-tk-inter 234 | if self.checkBox_24.isChecked(): 235 | self.command_dict[self.checkBox_24] = "--plugin-enable=tk-inter" 236 | else: 237 | self.command_dict[self.checkBox_24] = "" 238 | #--include-plugin-trio 239 | if self.checkBox_23.isChecked(): 240 | self.command_dict[self.checkBox_23] = "--plugin-enable=trio" 241 | else: 242 | self.command_dict[self.checkBox_23] = "" 243 | #--include-plugin-multiprocessing 244 | if self.checkBox_14.isChecked(): 245 | self.command_dict[self.checkBox_14] = "--plugin-enable=multiprocessing" 246 | else: 247 | self.command_dict[self.checkBox_14] = "" 248 | #--windows-disable-console 249 | if self.radioButton.isChecked(): 250 | self.command_dict[self.radioButton] = "--windows-disable-console" 251 | if self.radioButton_2.isChecked(): 252 | self.command_dict[self.radioButton_2] = "" 253 | self.statusbar.showMessage("Selection succeeded") 254 | def Multithreading_command(self): 255 | t=threading.Thread(target=self.excute_command,args=()) 256 | t.start() 257 | t.join() 258 | self.statusbar.showMessage("packaging is finishing") 259 | def excute_command(self): 260 | try: 261 | self.command_str="python -m nuitka " 262 | for command in self.command_dict.keys(): 263 | if self.command_dict[command]=="": 264 | continue 265 | if self.command_dict[command]=="--module": 266 | self.command_dict[command]="--module "+self.compile_module_path.split("/")[-1]+" "+"--include-package="+\ 267 | self.lineEdit_9.text() 268 | self.command_str+=self.command_dict[command]+" " 269 | if self.follow_import_to_document_str!="": 270 | self.command_str += "--follow-import-to=" + self.follow_import_to_document_str[0:len(self.follow_import_to_document_str)-1] + " " 271 | if self.follow_import_to_document_str!="": 272 | self.command_str+="--nofollow-import-to="+self.follow_import_to_document_str+" " 273 | self.command_str+="--output-dir="+self.outputpath+" " 274 | if self.iconname!=None: 275 | self.command_str+="--windows-icon-from-ico="+self.iconname+" " 276 | if not self.checkBox_7.isChecked(): 277 | self.command_str+=self.filename 278 | 279 | print(self.command_str) 280 | if not self.checkBox_7.isChecked(): 281 | os.chdir(self.filenpath) 282 | else: 283 | os.chdir(self.compile_module_path) 284 | os.chdir("../") 285 | os.system(self.command_str) 286 | self.statusbar.showMessage("Please wait to start packaging......") 287 | except Exception as e: 288 | self.statusbar.showMessage(e) 289 | #print(e) 290 | 291 | def chekbox_clicked_init(self): 292 | self.package_method=[] 293 | self.checkBox_dict = {self.checkBox: "--follow-imports", self.checkBox_8: "--nofollow-imports", 294 | self.checkBox_7: "--module", 295 | self.checkBox_3: "--standalone", self.checkBox_4: "--onefile", 296 | self.checkBox_2: "--mingw64", self.checkBox_5: "--show-memory", 297 | self.checkBox_6: "--show-progress", self.checkBox_10: "-msvc64", 298 | self.checkBox_9: "--include-plugin-pyqt5", 299 | self.checkBox_17: "--include-plugin-numpy",self.checkBox_20:"--include-plugin-torch", 300 | self.checkBox_11:"--include-plugin-matplotlib",self.checkBox_13:"--include-plugin-pyqt6", 301 | self.checkBox_15:"--include-plugin-pyside2",self.checkBox_12:"--include-plugin-pyside6", 302 | self.checkBox_18:"--include-plugin-no-qt5",self.checkBox_22:"--include-plugin-upx", 303 | self.checkBox_19:"--include-plugin-tensorflow",self.checkBox_25:"--include-plugin-pywebview", 304 | self.checkBox_24:"--include-plugin-tk-inter",self.checkBox_23:"--include-plugin-trio", 305 | self.checkBox_14:"--include-plugin-multiprocessing",self.radioButton:"--windows-disable-console", 306 | self.radioButton_2:""} 307 | for check in self.checkBox_dict.keys(): 308 | try: 309 | check.clicked.connect(self.get_package_method) 310 | except: 311 | pass 312 | self.lineEdit_9.setEnabled(False) 313 | def nofollow_import_to(self): 314 | self.follow_import_to_document_str=self.lineEdit_3.text() 315 | self.statusbar.showMessage("add module to nofollow_import_to ") 316 | def nofollow_import_to_remove(self): 317 | self.lineEdit_3.setText("Enter module/package ;Separate them with commas") 318 | self.follow_import_to_document_str="" 319 | self.statusbar.showMessage("Removed") 320 | def follow_import_to(self): 321 | try: 322 | directory = QtWidgets.QFileDialog.getExistingDirectory(self, "getExistingDirectory", "./") 323 | self.follow_import_to_document = directory.split("/")[-1] 324 | self.follow_import_to_document_str+=self.follow_import_to_document+"," 325 | self.lineEdit_4.setText(self.follow_import_to_document_str) 326 | except Exception as e: 327 | print(e) 328 | pass 329 | def follow_import_to_remove(self): 330 | try: 331 | self.lineEdit_4.setText("Select the folder you want to compile") 332 | except Exception as e: 333 | self.statusbar.showMessage("Removed") 334 | pass 335 | def include_data_files(self): 336 | pass 337 | def set_icon(self): 338 | try: 339 | if not self.checkBox_7.isChecked(): 340 | file = QtWidgets.QFileDialog.getOpenFileName(self, 341 | "getOpenFileName", "./", 342 | "All Files (*);;Text Files (*)") 343 | self.iconpath = file[0] 344 | self.lineEdit_6.setText(self.iconpath) 345 | src = self.iconpath 346 | dist = self.filenpath + src.split("/")[-1] 347 | if not os.path.exists(dist): 348 | shutil.copyfile(src, dist) 349 | self.iconname = src.split("/")[-1] 350 | 351 | except Exception as e: 352 | print(e) 353 | def remove_icon(self): 354 | self.lineEdit_6.setText("Select icon") 355 | self.statusbar.showMessage("Removed") 356 | 357 | def include_data_files(self): 358 | try: 359 | file = QtWidgets.QFileDialog.getOpenFileName(self, 360 | "getOpenFileName", "./", 361 | "All Files (*);;Text Files (*)") 362 | self.include_data_files=file[0] 363 | except Exception as e: 364 | pass 365 | 366 | def include_package_remove(self): 367 | self.lineEdit_9.setText("Default to the entire module") 368 | def quit(self): 369 | sys.exit() 370 | # Press the green button in the gutter to run the script. 371 | if __name__ == '__main__': 372 | QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) 373 | app = QtWidgets.QApplication(sys.argv) 374 | QApplication.setStyle(QStyleFactory.create('Fusion')) 375 | win = MainGui() 376 | win.show() 377 | sys.exit(app.exec_()) 378 | 379 | # See PyCharm help at https://www.jetbrains.com/help/pycharm/ 380 | -------------------------------------------------------------------------------- /src/mainui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'mainui.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.15.4 6 | # 7 | # WARNING: Any manual changes made to this file will be lost when pyuic5 is 8 | # run again. Do not edit this file unless you know what you are doing. 9 | 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | 14 | class Ui_MainWindow(object): 15 | def setupUi(self, MainWindow): 16 | MainWindow.setObjectName("MainWindow") 17 | MainWindow.resize(774, 774) 18 | font = QtGui.QFont() 19 | font.setFamily("微软雅黑") 20 | font.setPointSize(12) 21 | MainWindow.setFont(font) 22 | self.centralwidget = QtWidgets.QWidget(MainWindow) 23 | self.centralwidget.setObjectName("centralwidget") 24 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 25 | self.groupBox.setGeometry(QtCore.QRect(20, 90, 731, 141)) 26 | self.groupBox.setObjectName("groupBox") 27 | self.checkBox = QtWidgets.QCheckBox(self.groupBox) 28 | self.checkBox.setGeometry(QtCore.QRect(20, 40, 151, 17)) 29 | self.checkBox.setObjectName("checkBox") 30 | self.checkBox_2 = QtWidgets.QCheckBox(self.groupBox) 31 | self.checkBox_2.setGeometry(QtCore.QRect(200, 100, 111, 21)) 32 | self.checkBox_2.setObjectName("checkBox_2") 33 | self.checkBox_3 = QtWidgets.QCheckBox(self.groupBox) 34 | self.checkBox_3.setGeometry(QtCore.QRect(200, 40, 141, 17)) 35 | self.checkBox_3.setObjectName("checkBox_3") 36 | self.checkBox_4 = QtWidgets.QCheckBox(self.groupBox) 37 | self.checkBox_4.setGeometry(QtCore.QRect(200, 70, 141, 17)) 38 | self.checkBox_4.setObjectName("checkBox_4") 39 | self.checkBox_5 = QtWidgets.QCheckBox(self.groupBox) 40 | self.checkBox_5.setGeometry(QtCore.QRect(330, 40, 151, 21)) 41 | self.checkBox_5.setObjectName("checkBox_5") 42 | self.checkBox_6 = QtWidgets.QCheckBox(self.groupBox) 43 | self.checkBox_6.setGeometry(QtCore.QRect(330, 70, 151, 17)) 44 | self.checkBox_6.setObjectName("checkBox_6") 45 | self.checkBox_7 = QtWidgets.QCheckBox(self.groupBox) 46 | self.checkBox_7.setGeometry(QtCore.QRect(20, 100, 91, 17)) 47 | self.checkBox_7.setObjectName("checkBox_7") 48 | self.checkBox_8 = QtWidgets.QCheckBox(self.groupBox) 49 | self.checkBox_8.setGeometry(QtCore.QRect(20, 70, 171, 17)) 50 | self.checkBox_8.setObjectName("checkBox_8") 51 | self.checkBox_10 = QtWidgets.QCheckBox(self.groupBox) 52 | self.checkBox_10.setGeometry(QtCore.QRect(330, 100, 101, 21)) 53 | self.checkBox_10.setObjectName("checkBox_10") 54 | self.checkBox_9 = QtWidgets.QCheckBox(self.groupBox) 55 | self.checkBox_9.setGeometry(QtCore.QRect(500, 40, 221, 21)) 56 | self.checkBox_9.setObjectName("checkBox_9") 57 | self.checkBox_17 = QtWidgets.QCheckBox(self.groupBox) 58 | self.checkBox_17.setGeometry(QtCore.QRect(500, 70, 211, 17)) 59 | self.checkBox_17.setObjectName("checkBox_17") 60 | self.checkBox_20 = QtWidgets.QCheckBox(self.groupBox) 61 | self.checkBox_20.setGeometry(QtCore.QRect(500, 100, 211, 17)) 62 | self.checkBox_20.setObjectName("checkBox_20") 63 | self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget) 64 | self.groupBox_2.setGeometry(QtCore.QRect(20, 410, 731, 241)) 65 | self.groupBox_2.setObjectName("groupBox_2") 66 | self.label_3 = QtWidgets.QLabel(self.groupBox_2) 67 | self.label_3.setGeometry(QtCore.QRect(20, 30, 171, 21)) 68 | self.label_3.setObjectName("label_3") 69 | self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_2) 70 | self.lineEdit_3.setGeometry(QtCore.QRect(200, 30, 331, 21)) 71 | font = QtGui.QFont() 72 | font.setFamily("微软雅黑") 73 | font.setPointSize(9) 74 | self.lineEdit_3.setFont(font) 75 | self.lineEdit_3.setObjectName("lineEdit_3") 76 | self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2) 77 | self.pushButton_3.setGeometry(QtCore.QRect(550, 30, 75, 23)) 78 | self.pushButton_3.setObjectName("pushButton_3") 79 | self.pushButton_10 = QtWidgets.QPushButton(self.groupBox_2) 80 | self.pushButton_10.setGeometry(QtCore.QRect(640, 30, 75, 23)) 81 | self.pushButton_10.setObjectName("pushButton_10") 82 | self.label_5 = QtWidgets.QLabel(self.groupBox_2) 83 | self.label_5.setGeometry(QtCore.QRect(20, 150, 271, 21)) 84 | self.label_5.setObjectName("label_5") 85 | self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox_2) 86 | self.lineEdit_4.setGeometry(QtCore.QRect(200, 60, 331, 21)) 87 | font = QtGui.QFont() 88 | font.setFamily("微软雅黑") 89 | font.setPointSize(9) 90 | self.lineEdit_4.setFont(font) 91 | self.lineEdit_4.setObjectName("lineEdit_4") 92 | self.pushButton_4 = QtWidgets.QPushButton(self.groupBox_2) 93 | self.pushButton_4.setGeometry(QtCore.QRect(550, 60, 75, 23)) 94 | self.pushButton_4.setObjectName("pushButton_4") 95 | self.pushButton_12 = QtWidgets.QPushButton(self.groupBox_2) 96 | self.pushButton_12.setGeometry(QtCore.QRect(640, 60, 75, 23)) 97 | self.pushButton_12.setObjectName("pushButton_12") 98 | self.label_6 = QtWidgets.QLabel(self.groupBox_2) 99 | self.label_6.setGeometry(QtCore.QRect(20, 90, 271, 21)) 100 | self.label_6.setObjectName("label_6") 101 | self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox_2) 102 | self.lineEdit_5.setGeometry(QtCore.QRect(200, 90, 331, 21)) 103 | font = QtGui.QFont() 104 | font.setFamily("微软雅黑") 105 | font.setPointSize(9) 106 | self.lineEdit_5.setFont(font) 107 | self.lineEdit_5.setObjectName("lineEdit_5") 108 | self.pushButton_5 = QtWidgets.QPushButton(self.groupBox_2) 109 | self.pushButton_5.setGeometry(QtCore.QRect(550, 90, 75, 23)) 110 | self.pushButton_5.setObjectName("pushButton_5") 111 | self.pushButton_14 = QtWidgets.QPushButton(self.groupBox_2) 112 | self.pushButton_14.setGeometry(QtCore.QRect(640, 90, 75, 23)) 113 | self.pushButton_14.setObjectName("pushButton_14") 114 | self.label_7 = QtWidgets.QLabel(self.groupBox_2) 115 | self.label_7.setGeometry(QtCore.QRect(20, 120, 151, 21)) 116 | self.label_7.setObjectName("label_7") 117 | self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox_2) 118 | self.lineEdit_8.setGeometry(QtCore.QRect(200, 120, 331, 21)) 119 | font = QtGui.QFont() 120 | font.setFamily("微软雅黑") 121 | font.setPointSize(9) 122 | self.lineEdit_8.setFont(font) 123 | self.lineEdit_8.setObjectName("lineEdit_8") 124 | self.pushButton_15 = QtWidgets.QPushButton(self.groupBox_2) 125 | self.pushButton_15.setGeometry(QtCore.QRect(550, 120, 75, 23)) 126 | self.pushButton_15.setObjectName("pushButton_15") 127 | self.pushButton_16 = QtWidgets.QPushButton(self.groupBox_2) 128 | self.pushButton_16.setGeometry(QtCore.QRect(640, 120, 75, 23)) 129 | self.pushButton_16.setObjectName("pushButton_16") 130 | self.label_8 = QtWidgets.QLabel(self.groupBox_2) 131 | self.label_8.setGeometry(QtCore.QRect(20, 60, 171, 21)) 132 | self.label_8.setObjectName("label_8") 133 | self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox_2) 134 | self.lineEdit_9.setGeometry(QtCore.QRect(200, 150, 331, 21)) 135 | font = QtGui.QFont() 136 | font.setFamily("微软雅黑") 137 | font.setPointSize(9) 138 | self.lineEdit_9.setFont(font) 139 | self.lineEdit_9.setObjectName("lineEdit_9") 140 | self.pushButton_17 = QtWidgets.QPushButton(self.groupBox_2) 141 | self.pushButton_17.setGeometry(QtCore.QRect(640, 150, 75, 23)) 142 | self.pushButton_17.setObjectName("pushButton_17") 143 | self.pushButton_18 = QtWidgets.QPushButton(self.groupBox_2) 144 | self.pushButton_18.setGeometry(QtCore.QRect(550, 150, 75, 23)) 145 | self.pushButton_18.setObjectName("pushButton_18") 146 | self.label_4 = QtWidgets.QLabel(self.groupBox_2) 147 | self.label_4.setGeometry(QtCore.QRect(20, 180, 61, 21)) 148 | self.label_4.setObjectName("label_4") 149 | self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox_2) 150 | self.lineEdit_6.setGeometry(QtCore.QRect(200, 180, 331, 21)) 151 | font = QtGui.QFont() 152 | font.setFamily("微软雅黑") 153 | font.setPointSize(9) 154 | self.lineEdit_6.setFont(font) 155 | self.lineEdit_6.setObjectName("lineEdit_6") 156 | self.pushButton_19 = QtWidgets.QPushButton(self.groupBox_2) 157 | self.pushButton_19.setGeometry(QtCore.QRect(640, 180, 75, 23)) 158 | self.pushButton_19.setObjectName("pushButton_19") 159 | self.pushButton_20 = QtWidgets.QPushButton(self.groupBox_2) 160 | self.pushButton_20.setGeometry(QtCore.QRect(550, 180, 75, 23)) 161 | self.pushButton_20.setObjectName("pushButton_20") 162 | self.radioButton = QtWidgets.QRadioButton(self.groupBox_2) 163 | self.radioButton.setGeometry(QtCore.QRect(200, 210, 89, 17)) 164 | self.radioButton.setObjectName("radioButton") 165 | self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_2) 166 | self.radioButton_2.setGeometry(QtCore.QRect(360, 210, 101, 17)) 167 | self.radioButton_2.setObjectName("radioButton_2") 168 | self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget) 169 | self.pushButton_7.setGeometry(QtCore.QRect(140, 680, 131, 31)) 170 | self.pushButton_7.setObjectName("pushButton_7") 171 | self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget) 172 | self.pushButton_8.setGeometry(QtCore.QRect(340, 680, 101, 31)) 173 | self.pushButton_8.setObjectName("pushButton_8") 174 | self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget) 175 | self.pushButton_9.setGeometry(QtCore.QRect(500, 680, 101, 31)) 176 | self.pushButton_9.setObjectName("pushButton_9") 177 | self.layoutWidget = QtWidgets.QWidget(self.centralwidget) 178 | self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 721, 33)) 179 | self.layoutWidget.setObjectName("layoutWidget") 180 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) 181 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 182 | self.horizontalLayout.setObjectName("horizontalLayout") 183 | self.label = QtWidgets.QLabel(self.layoutWidget) 184 | self.label.setObjectName("label") 185 | self.horizontalLayout.addWidget(self.label) 186 | self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget) 187 | self.lineEdit.setObjectName("lineEdit") 188 | self.horizontalLayout.addWidget(self.lineEdit) 189 | self.pushButton = QtWidgets.QPushButton(self.layoutWidget) 190 | self.pushButton.setObjectName("pushButton") 191 | self.horizontalLayout.addWidget(self.pushButton) 192 | self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget) 193 | self.layoutWidget1.setGeometry(QtCore.QRect(21, 50, 721, 33)) 194 | self.layoutWidget1.setObjectName("layoutWidget1") 195 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget1) 196 | self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) 197 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 198 | self.label_2 = QtWidgets.QLabel(self.layoutWidget1) 199 | self.label_2.setObjectName("label_2") 200 | self.horizontalLayout_2.addWidget(self.label_2) 201 | self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget1) 202 | self.lineEdit_2.setObjectName("lineEdit_2") 203 | self.horizontalLayout_2.addWidget(self.lineEdit_2) 204 | self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget1) 205 | self.pushButton_2.setObjectName("pushButton_2") 206 | self.horizontalLayout_2.addWidget(self.pushButton_2) 207 | self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget) 208 | self.groupBox_3.setGeometry(QtCore.QRect(20, 240, 731, 161)) 209 | self.groupBox_3.setObjectName("groupBox_3") 210 | self.checkBox_11 = QtWidgets.QCheckBox(self.groupBox_3) 211 | self.checkBox_11.setGeometry(QtCore.QRect(20, 30, 231, 21)) 212 | self.checkBox_11.setObjectName("checkBox_11") 213 | self.checkBox_13 = QtWidgets.QCheckBox(self.groupBox_3) 214 | self.checkBox_13.setGeometry(QtCore.QRect(260, 30, 201, 21)) 215 | self.checkBox_13.setObjectName("checkBox_13") 216 | self.checkBox_15 = QtWidgets.QCheckBox(self.groupBox_3) 217 | self.checkBox_15.setGeometry(QtCore.QRect(500, 30, 211, 21)) 218 | self.checkBox_15.setObjectName("checkBox_15") 219 | self.checkBox_12 = QtWidgets.QCheckBox(self.groupBox_3) 220 | self.checkBox_12.setGeometry(QtCore.QRect(20, 60, 221, 21)) 221 | self.checkBox_12.setObjectName("checkBox_12") 222 | self.checkBox_18 = QtWidgets.QCheckBox(self.groupBox_3) 223 | self.checkBox_18.setGeometry(QtCore.QRect(260, 60, 201, 21)) 224 | self.checkBox_18.setObjectName("checkBox_18") 225 | self.checkBox_19 = QtWidgets.QCheckBox(self.groupBox_3) 226 | self.checkBox_19.setGeometry(QtCore.QRect(20, 90, 231, 21)) 227 | self.checkBox_19.setObjectName("checkBox_19") 228 | self.checkBox_22 = QtWidgets.QCheckBox(self.groupBox_3) 229 | self.checkBox_22.setGeometry(QtCore.QRect(500, 60, 201, 21)) 230 | self.checkBox_22.setObjectName("checkBox_22") 231 | self.checkBox_23 = QtWidgets.QCheckBox(self.groupBox_3) 232 | self.checkBox_23.setGeometry(QtCore.QRect(20, 120, 201, 21)) 233 | self.checkBox_23.setObjectName("checkBox_23") 234 | self.checkBox_24 = QtWidgets.QCheckBox(self.groupBox_3) 235 | self.checkBox_24.setGeometry(QtCore.QRect(500, 90, 211, 21)) 236 | self.checkBox_24.setObjectName("checkBox_24") 237 | self.checkBox_25 = QtWidgets.QCheckBox(self.groupBox_3) 238 | self.checkBox_25.setGeometry(QtCore.QRect(260, 90, 241, 21)) 239 | self.checkBox_25.setObjectName("checkBox_25") 240 | self.checkBox_14 = QtWidgets.QCheckBox(self.groupBox_3) 241 | self.checkBox_14.setGeometry(QtCore.QRect(260, 120, 281, 21)) 242 | self.checkBox_14.setObjectName("checkBox_14") 243 | MainWindow.setCentralWidget(self.centralwidget) 244 | self.menubar = QtWidgets.QMenuBar(MainWindow) 245 | self.menubar.setGeometry(QtCore.QRect(0, 0, 774, 26)) 246 | self.menubar.setObjectName("menubar") 247 | self.menu = QtWidgets.QMenu(self.menubar) 248 | self.menu.setObjectName("menu") 249 | self.menu_2 = QtWidgets.QMenu(self.menubar) 250 | self.menu_2.setObjectName("menu_2") 251 | self.menu_3 = QtWidgets.QMenu(self.menubar) 252 | self.menu_3.setObjectName("menu_3") 253 | self.menu_4 = QtWidgets.QMenu(self.menubar) 254 | self.menu_4.setObjectName("menu_4") 255 | MainWindow.setMenuBar(self.menubar) 256 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 257 | font = QtGui.QFont() 258 | font.setFamily("微软雅黑") 259 | font.setPointSize(8) 260 | self.statusbar.setFont(font) 261 | self.statusbar.setObjectName("statusbar") 262 | MainWindow.setStatusBar(self.statusbar) 263 | self.menubar.addAction(self.menu.menuAction()) 264 | self.menubar.addAction(self.menu_2.menuAction()) 265 | self.menubar.addAction(self.menu_3.menuAction()) 266 | self.menubar.addAction(self.menu_4.menuAction()) 267 | 268 | self.retranslateUi(MainWindow) 269 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 270 | 271 | def retranslateUi(self, MainWindow): 272 | _translate = QtCore.QCoreApplication.translate 273 | MainWindow.setWindowTitle(_translate("MainWindow", "AutoNuitka")) 274 | self.groupBox.setTitle(_translate("MainWindow", "package method")) 275 | self.checkBox.setText(_translate("MainWindow", "--follow-imports")) 276 | self.checkBox_2.setText(_translate("MainWindow", "--mingw64")) 277 | self.checkBox_3.setText(_translate("MainWindow", "--standalone")) 278 | self.checkBox_4.setText(_translate("MainWindow", "--onefile")) 279 | self.checkBox_5.setText(_translate("MainWindow", "--show-memory")) 280 | self.checkBox_6.setText(_translate("MainWindow", "--show-progress")) 281 | self.checkBox_7.setText(_translate("MainWindow", "--module ")) 282 | self.checkBox_8.setText(_translate("MainWindow", "--nofollow-imports")) 283 | self.checkBox_10.setText(_translate("MainWindow", "--msvc64")) 284 | self.checkBox_9.setText(_translate("MainWindow", "--include-plugin-pyqt5")) 285 | self.checkBox_17.setText(_translate("MainWindow", "--include-plugin-numpy")) 286 | self.checkBox_20.setText(_translate("MainWindow", "--include-plugin-torch")) 287 | self.groupBox_2.setTitle(_translate("MainWindow", "Parameter Setting")) 288 | self.label_3.setText(_translate("MainWindow", "--nofollow-import-to")) 289 | self.lineEdit_3.setText(_translate("MainWindow", "Enter module/package ;Separate them with commas")) 290 | self.pushButton_3.setText(_translate("MainWindow", "Add")) 291 | self.pushButton_10.setText(_translate("MainWindow", "Remove")) 292 | self.label_5.setText(_translate("MainWindow", "--include-package")) 293 | self.lineEdit_4.setText(_translate("MainWindow", "Select the folder you want to compile")) 294 | self.pushButton_4.setText(_translate("MainWindow", "Add")) 295 | self.pushButton_12.setText(_translate("MainWindow", "Remove")) 296 | self.label_6.setText(_translate("MainWindow", "--include-data-files")) 297 | self.pushButton_5.setText(_translate("MainWindow", "Add")) 298 | self.pushButton_14.setText(_translate("MainWindow", "Remove")) 299 | self.label_7.setText(_translate("MainWindow", "--include-data-dir")) 300 | self.pushButton_15.setText(_translate("MainWindow", "Add")) 301 | self.pushButton_16.setText(_translate("MainWindow", "Remove")) 302 | self.label_8.setText(_translate("MainWindow", "--follow-import-to")) 303 | self.lineEdit_9.setText(_translate("MainWindow", "Default to the entire module")) 304 | self.pushButton_17.setText(_translate("MainWindow", "Remove")) 305 | self.pushButton_18.setText(_translate("MainWindow", "Add")) 306 | self.label_4.setText(_translate("MainWindow", " Icons")) 307 | self.lineEdit_6.setText(_translate("MainWindow", "Select icon")) 308 | self.pushButton_19.setText(_translate("MainWindow", "Remove")) 309 | self.pushButton_20.setText(_translate("MainWindow", "Add")) 310 | self.radioButton.setText(_translate("MainWindow", "windows")) 311 | self.radioButton_2.setText(_translate("MainWindow", "console")) 312 | self.pushButton_7.setText(_translate("MainWindow", "Start package")) 313 | self.pushButton_8.setText(_translate("MainWindow", "stop")) 314 | self.pushButton_9.setText(_translate("MainWindow", "Quite")) 315 | self.label.setText(_translate("MainWindow", "Manin File/Module")) 316 | self.pushButton.setText(_translate("MainWindow", "choose")) 317 | self.label_2.setText(_translate("MainWindow", "OutPut Path ")) 318 | self.pushButton_2.setText(_translate("MainWindow", "choose")) 319 | self.groupBox_3.setTitle(_translate("MainWindow", "other plugin")) 320 | self.checkBox_11.setText(_translate("MainWindow", "--include-plugin-matplotlib")) 321 | self.checkBox_13.setText(_translate("MainWindow", "--include-plugin-pyqt6")) 322 | self.checkBox_15.setText(_translate("MainWindow", "--include-plugin-pyside2")) 323 | self.checkBox_12.setText(_translate("MainWindow", "--include-plugin-pyside6")) 324 | self.checkBox_18.setText(_translate("MainWindow", "--include-plugin-no-qt5")) 325 | self.checkBox_19.setText(_translate("MainWindow", "--include-plugin-tensorflow")) 326 | self.checkBox_22.setText(_translate("MainWindow", "--include-plugin-upx")) 327 | self.checkBox_23.setText(_translate("MainWindow", "--include-plugin-trio")) 328 | self.checkBox_24.setText(_translate("MainWindow", "--include-plugin-tk-inter")) 329 | self.checkBox_25.setText(_translate("MainWindow", "--include-plugin-pywebview")) 330 | self.checkBox_14.setText(_translate("MainWindow", "--include-plugin-multiprocessing")) 331 | self.menu.setTitle(_translate("MainWindow", "File")) 332 | self.menu_2.setTitle(_translate("MainWindow", "Edit")) 333 | self.menu_3.setTitle(_translate("MainWindow", "Setting")) 334 | self.menu_4.setTitle(_translate("MainWindow", "Help")) 335 | -------------------------------------------------------------------------------- /src/mainui.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 774 10 | 774 11 | 12 | 13 | 14 | 15 | 微软雅黑 16 | 12 17 | 18 | 19 | 20 | AutoNuitka 21 | 22 | 23 | 24 | 25 | 26 | 20 27 | 90 28 | 731 29 | 141 30 | 31 | 32 | 33 | package method 34 | 35 | 36 | 37 | 38 | 20 39 | 40 40 | 151 41 | 17 42 | 43 | 44 | 45 | --follow-imports 46 | 47 | 48 | 49 | 50 | 51 | 200 52 | 100 53 | 111 54 | 21 55 | 56 | 57 | 58 | --mingw64 59 | 60 | 61 | 62 | 63 | 64 | 200 65 | 40 66 | 141 67 | 17 68 | 69 | 70 | 71 | --standalone 72 | 73 | 74 | 75 | 76 | 77 | 200 78 | 70 79 | 141 80 | 17 81 | 82 | 83 | 84 | --onefile 85 | 86 | 87 | 88 | 89 | 90 | 330 91 | 40 92 | 151 93 | 21 94 | 95 | 96 | 97 | --show-memory 98 | 99 | 100 | 101 | 102 | 103 | 330 104 | 70 105 | 151 106 | 17 107 | 108 | 109 | 110 | --show-progress 111 | 112 | 113 | 114 | 115 | 116 | 20 117 | 100 118 | 91 119 | 17 120 | 121 | 122 | 123 | --module 124 | 125 | 126 | 127 | 128 | 129 | 20 130 | 70 131 | 171 132 | 17 133 | 134 | 135 | 136 | --nofollow-imports 137 | 138 | 139 | 140 | 141 | 142 | 330 143 | 100 144 | 101 145 | 21 146 | 147 | 148 | 149 | --msvc64 150 | 151 | 152 | 153 | 154 | 155 | 500 156 | 40 157 | 221 158 | 21 159 | 160 | 161 | 162 | --include-plugin-pyqt5 163 | 164 | 165 | 166 | 167 | 168 | 500 169 | 70 170 | 211 171 | 17 172 | 173 | 174 | 175 | --include-plugin-numpy 176 | 177 | 178 | 179 | 180 | 181 | 500 182 | 100 183 | 211 184 | 17 185 | 186 | 187 | 188 | --include-plugin-torch 189 | 190 | 191 | 192 | 193 | 194 | 195 | 20 196 | 410 197 | 731 198 | 241 199 | 200 | 201 | 202 | Parameter Setting 203 | 204 | 205 | 206 | 207 | 20 208 | 30 209 | 171 210 | 21 211 | 212 | 213 | 214 | --nofollow-import-to 215 | 216 | 217 | 218 | 219 | 220 | 200 221 | 30 222 | 331 223 | 21 224 | 225 | 226 | 227 | 228 | 微软雅黑 229 | 9 230 | 231 | 232 | 233 | Enter module/package ;Separate them with commas 234 | 235 | 236 | 237 | 238 | 239 | 550 240 | 30 241 | 75 242 | 23 243 | 244 | 245 | 246 | Add 247 | 248 | 249 | 250 | 251 | 252 | 640 253 | 30 254 | 75 255 | 23 256 | 257 | 258 | 259 | Remove 260 | 261 | 262 | 263 | 264 | 265 | 20 266 | 150 267 | 271 268 | 21 269 | 270 | 271 | 272 | --include-package 273 | 274 | 275 | 276 | 277 | 278 | 200 279 | 60 280 | 331 281 | 21 282 | 283 | 284 | 285 | 286 | 微软雅黑 287 | 9 288 | 289 | 290 | 291 | Select the folder you want to compile 292 | 293 | 294 | 295 | 296 | 297 | 550 298 | 60 299 | 75 300 | 23 301 | 302 | 303 | 304 | Add 305 | 306 | 307 | 308 | 309 | 310 | 640 311 | 60 312 | 75 313 | 23 314 | 315 | 316 | 317 | Remove 318 | 319 | 320 | 321 | 322 | 323 | 20 324 | 90 325 | 271 326 | 21 327 | 328 | 329 | 330 | --include-data-files 331 | 332 | 333 | 334 | 335 | false 336 | 337 | 338 | 339 | 200 340 | 90 341 | 331 342 | 21 343 | 344 | 345 | 346 | 347 | 微软雅黑 348 | 9 349 | 350 | 351 | 352 | 353 | 354 | 355 | 550 356 | 90 357 | 75 358 | 23 359 | 360 | 361 | 362 | Add 363 | 364 | 365 | 366 | 367 | 368 | 640 369 | 90 370 | 75 371 | 23 372 | 373 | 374 | 375 | Remove 376 | 377 | 378 | 379 | 380 | 381 | 20 382 | 120 383 | 151 384 | 21 385 | 386 | 387 | 388 | --include-data-dir 389 | 390 | 391 | 392 | 393 | false 394 | 395 | 396 | 397 | 200 398 | 120 399 | 331 400 | 21 401 | 402 | 403 | 404 | 405 | 微软雅黑 406 | 9 407 | 408 | 409 | 410 | 411 | 412 | 413 | 550 414 | 120 415 | 75 416 | 23 417 | 418 | 419 | 420 | Add 421 | 422 | 423 | 424 | 425 | 426 | 640 427 | 120 428 | 75 429 | 23 430 | 431 | 432 | 433 | Remove 434 | 435 | 436 | 437 | 438 | 439 | 20 440 | 60 441 | 171 442 | 21 443 | 444 | 445 | 446 | --follow-import-to 447 | 448 | 449 | 450 | 451 | 452 | 200 453 | 150 454 | 331 455 | 21 456 | 457 | 458 | 459 | 460 | 微软雅黑 461 | 9 462 | 463 | 464 | 465 | Default to the entire module 466 | 467 | 468 | 469 | 470 | 471 | 640 472 | 150 473 | 75 474 | 23 475 | 476 | 477 | 478 | Remove 479 | 480 | 481 | 482 | 483 | 484 | 550 485 | 150 486 | 75 487 | 23 488 | 489 | 490 | 491 | Add 492 | 493 | 494 | 495 | 496 | 497 | 20 498 | 180 499 | 61 500 | 21 501 | 502 | 503 | 504 | Icons 505 | 506 | 507 | 508 | 509 | 510 | 200 511 | 180 512 | 331 513 | 21 514 | 515 | 516 | 517 | 518 | 微软雅黑 519 | 9 520 | 521 | 522 | 523 | Select icon 524 | 525 | 526 | 527 | 528 | 529 | 640 530 | 180 531 | 75 532 | 23 533 | 534 | 535 | 536 | Remove 537 | 538 | 539 | 540 | 541 | 542 | 550 543 | 180 544 | 75 545 | 23 546 | 547 | 548 | 549 | Add 550 | 551 | 552 | 553 | 554 | 555 | 200 556 | 210 557 | 89 558 | 17 559 | 560 | 561 | 562 | windows 563 | 564 | 565 | 566 | 567 | 568 | 360 569 | 210 570 | 101 571 | 17 572 | 573 | 574 | 575 | console 576 | 577 | 578 | 579 | 580 | 581 | 582 | 140 583 | 680 584 | 131 585 | 31 586 | 587 | 588 | 589 | Start package 590 | 591 | 592 | 593 | 594 | 595 | 340 596 | 680 597 | 101 598 | 31 599 | 600 | 601 | 602 | stop 603 | 604 | 605 | 606 | 607 | 608 | 500 609 | 680 610 | 101 611 | 31 612 | 613 | 614 | 615 | Quite 616 | 617 | 618 | 619 | 620 | 621 | 20 622 | 10 623 | 721 624 | 33 625 | 626 | 627 | 628 | 629 | 630 | 631 | Manin File/Module 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | choose 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 21 651 | 50 652 | 721 653 | 33 654 | 655 | 656 | 657 | 658 | 659 | 660 | OutPut Path 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | choose 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 20 680 | 240 681 | 731 682 | 161 683 | 684 | 685 | 686 | other plugin 687 | 688 | 689 | 690 | 691 | 20 692 | 30 693 | 231 694 | 21 695 | 696 | 697 | 698 | --include-plugin-matplotlib 699 | 700 | 701 | 702 | 703 | 704 | 260 705 | 30 706 | 201 707 | 21 708 | 709 | 710 | 711 | --include-plugin-pyqt6 712 | 713 | 714 | 715 | 716 | 717 | 500 718 | 30 719 | 211 720 | 21 721 | 722 | 723 | 724 | --include-plugin-pyside2 725 | 726 | 727 | 728 | 729 | 730 | 20 731 | 60 732 | 221 733 | 21 734 | 735 | 736 | 737 | --include-plugin-pyside6 738 | 739 | 740 | 741 | 742 | 743 | 260 744 | 60 745 | 201 746 | 21 747 | 748 | 749 | 750 | --include-plugin-no-qt5 751 | 752 | 753 | 754 | 755 | 756 | 20 757 | 90 758 | 231 759 | 21 760 | 761 | 762 | 763 | --include-plugin-tensorflow 764 | 765 | 766 | 767 | 768 | 769 | 500 770 | 60 771 | 201 772 | 21 773 | 774 | 775 | 776 | --include-plugin-upx 777 | 778 | 779 | 780 | 781 | 782 | 20 783 | 120 784 | 201 785 | 21 786 | 787 | 788 | 789 | --include-plugin-trio 790 | 791 | 792 | 793 | 794 | 795 | 500 796 | 90 797 | 211 798 | 21 799 | 800 | 801 | 802 | --include-plugin-tk-inter 803 | 804 | 805 | 806 | 807 | 808 | 260 809 | 90 810 | 241 811 | 21 812 | 813 | 814 | 815 | --include-plugin-pywebview 816 | 817 | 818 | 819 | 820 | 821 | 260 822 | 120 823 | 281 824 | 21 825 | 826 | 827 | 828 | --include-plugin-multiprocessing 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 0 837 | 0 838 | 774 839 | 26 840 | 841 | 842 | 843 | 844 | File 845 | 846 | 847 | 848 | 849 | Edit 850 | 851 | 852 | 853 | 854 | Setting 855 | 856 | 857 | 858 | 859 | Help 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 微软雅黑 871 | 8 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | --------------------------------------------------------------------------------