diff --git a/build.py b/build.py new file mode 100644 index 0000000..e710239 --- /dev/null +++ b/build.py @@ -0,0 +1,182 @@ +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 + "/" + + # 解决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") + # 解决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") + # 解决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) \ No newline at end of file