193 lines
9.3 KiB
Python
193 lines
9.3 KiB
Python
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")
|
||
# 解决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) |