import os import shutil import sys # 写python的安装根目录 Python_path = os.path.dirname(sys.executable) + '/' # 输出文件夹路径 Out = "install/build" # 图标 Ico = "logo.ico" # 程序入口py文件 main_py = "ECD.py" # 编译后文件夹位置(无需修改) dist_path = os.path.join(Out, main_py.split(".")[0] + ".dist") # print(dist_path) def __main(main : str): parameters = [ '--standalone', # 构建独立软件,也就是将于系统有关的运行库和Python运行时打包 '--show-progress', # 展示打包过程 '--show-memory', # 打印打包时的内存占用 '--nofollow-imports', # 不打包import语句导入的包(因为nuitka自动导入的库有问题,后面我们会手动导入,这样成功率更高) '--follow-import-to=common', # 需要编译成C/C++的py文件夹命名 '--plugin-enable=pylint-warnings', '--plugin-enable=pyqt5', '--plugin-enable=qt-plugins', '--include-package=qgis,skimage,torch,torchvision', '--include-qt-plugins=all', # '--plugin-enable=numpy', '--output-dir='+ Out, # 存放构建结果的文件夹 '--windows-icon-from-ico=' + Ico ] # param_str = " ".join(parameters) # command = "nuitka {} {}".format(param_str, main) command = ''' nuitka --standalone --show-progress --show-memory --include-package=qgis,skimage,torch,torchvision,rscder,urllib --plugin-enable=pylint-warnings --enable-plugin=pyqt5 --windows-icon-from-ico=logo.ico --enable-plugin=tk-inter --nofollow-import-to=mock,pywt,scipy,skimage,torch,torchvision,osgeo,Crypto,numpy,yaml,typing,sklearn,joblib,asyncio,*.test,rscder --include-qt-plugins=all --plugin-enable=numpy --noinclude-unittest-mode=nofollow --output-dir=install/build --include-data-dir=icons=icons --noinclude-dask-mode=nofollow --include-data-dir=test-data=test-data ECD.py ''' os.system(command) # 替换文件 def replace_image(path): shutil.copytree('icons', path) # 替换文件 def replace_openpyxl(path): shutil.copyfile("replace/_openpyxl.py", path) def package(dist_path): gen = dist_path + "/lib/" if os.path.exists(gen): shutil.rmtree(gen) if os.path.exists(gen + '../DLLs'): shutil.rmtree(gen + '../DLLs') os.makedirs(gen, exist_ok=True) shutil.copytree(Python_path + "DLLs", gen + "../DLLs") # 解决win32con模块丢失 shutil.copy(Python_path + "Lib/site-packages/win32/lib/win32con.py", gen + "win32con.py") # 解决pymysql模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pymysql", gen + "pymysql") # 解决redis模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/redis", gen + "redis") # 解决pandas模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pandas", gen + "pandas") # 解决numpy模块丢失 shutil.copytree(Python_path + "Lib/site-packages/numpy", gen + "numpy") # 解决pytz模块丢失 shutil.copytree(Python_path + "Lib/site-packages/pytz", gen + "pytz") # 解决dateutil模块丢失 shutil.copytree(Python_path + "Lib/site-packages/dateutil", gen + "dateutil") # 解决six模块丢失 shutil.copy(Python_path + "Lib/site-packages/six.py", gen + "six.py") # 解决pyautogui模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pyautogui", gen + "pyautogui") # 解决pyperclip模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pyperclip", gen + "pyperclip") # 解决paddleocr模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/paddleocr", gen + "paddleocr") # 解决cv2模块丢失 shutil.copytree(Python_path + "Lib/site-packages/cv2", gen + "cv2") # # 解决requests模块丢失 shutil.copytree(Python_path + "Lib/site-packages/requests", gen + "requests") # 解决urllib3模块丢失 shutil.copytree(Python_path + "Lib/site-packages/urllib3", gen + "urllib3") # 解决chardet模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/chardet", gen + "chardet") # 解决certifi模块丢失 shutil.copytree(Python_path + "Lib/site-packages/certifi", gen + "certifi") # 解决idna模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/idna", gen + "idna") # 解决tqdm模块丢失 shutil.copytree(Python_path + "Lib/site-packages/tqdm", gen + "tqdm") # 解决torch模块丢失 shutil.copytree(Python_path + "Lib/site-packages/torch", gen + "torch") shutil.copytree(Python_path + "Lib/site-packages/torchvision", gen + "torchvison") # 解决decorator模块丢失 shutil.copy(Python_path + "Lib/site-packages/decorator.py", gen + "decorator.py") # 解决google模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/google", gen + "google") # 解决PIL模块丢失 shutil.copytree(Python_path + "Lib/site-packages/PIL", gen + "PIL") shutil.copytree(Python_path + "Lib/urllib", gen + "urllib") # 解决setuptools模块丢失 shutil.copytree(Python_path + "Lib/site-packages/setuptools", gen + "setuptools") # 解决pkg_resources模块丢失 shutil.copytree(Python_path + "Lib/site-packages/pkg_resources", gen + "pkg_resources") # 解决gast模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/gast", gen + "gast") # 解决astor模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/astor", gen + "astor") # replace_image(gen + "icons") # 解决_openpyxl.py模块的问题 # replace_openpyxl(gen + "pandas/io/excel/_openpyxl.py") # 解决imgaug模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/imgaug", gen + "imgaug") # 解决imageio模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/imageio", gen + "imageio") # 解决skimage模块丢失 shutil.copytree(Python_path + "Lib/site-packages/skimage", gen + "skimage") # 解决scipy模块丢失 shutil.copytree(Python_path + "Lib/site-packages/scipy", gen + "scipy") # 解决pywt模块丢失 shutil.copytree(Python_path + "Lib/site-packages/pywt", gen + "pywt") shutil.copytree(Python_path + "Lib/site-packages/PyQtAds", gen + "PyQtAds") # 解决shapely模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/shapely", gen + "shapely") # 解决pyclipper模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pyclipper", gen + "pyclipper") # 解决websockets模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/websockets", gen + "websockets") # 解决paddlex模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/paddlex", gen + "paddlex") # 解决colorama模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/colorama", gen + "colorama") # 解决filelock.py模块丢失 # shutil.copy(Python_path + "Lib/site-packages/filelock.py", gen + "filelock.py") # 解决yaml模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/yaml", gen + "yaml") # 解决paddleslim模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/paddleslim", gen + "paddleslim") # 解决zmq模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/zmq", gen + "zmq") # 解决pyzmq.libs模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pyzmq.libs", gen + "pyzmq.libs") # 解决matplotlib模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/matplotlib", gen + "matplotlib") # 解决pyparsing.py模块丢失 # shutil.copy(Python_path + "Lib/site-packages/pyparsing.py", gen + "pyparsing.py") # 解决cycler.py模块丢失 # shutil.copy(Python_path + "Lib/site-packages/cycler.py", gen + "cycler.py") # 解决kiwisolver模块丢失 # shutil.copy(Python_path + "Lib/site-packages/kiwisolver.cp37-win_amd64.pyd", gen + "kiwisolver.cp37-win_amd64.pyd") # 解决mpl_toolkits模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/mpl_toolkits", gen + "mpl_toolkits") # 解决sklearn模块丢失 shutil.copytree(Python_path + "Lib/site-packages/sklearn", gen + "sklearn") # 解决joblib模块丢失 shutil.copytree(Python_path + "Lib/site-packages/joblib", gen + "joblib") # 解决pycocotools模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/pycocotools", gen + "pycocotools") # 解决lap模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/lap", gen + "lap") # 解决glob2模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/glob2", gen + "glob2") # 解决openpyxl模块丢失 shutil.copytree(Python_path + "Lib/site-packages/openpyxl", gen + "openpyxl") # 解决et_xmlfile模块丢失 shutil.copytree(Python_path + "Lib/site-packages/et_xmlfile", gen + "et_xmlfile") # # 解决psutil模块丢失 # shutil.copytree(Python_path + "Lib/site-packages/psutil", gen + "psutil") # 解决配置文件 # shutil.copy("config.ini", gen + "config.ini") # # 解决模型 # shutil.copytree("model_", gen + "model_") # 解决图片 shutil.copytree("icons", gen + "icons") # 创建log文件夹 # os.mkdir(gen+"log") # __main(main_py) package(dist_path)