chore: import R0nY3n/LTE_manager main snapshot

This commit is contained in:
2026-07-20 16:35:15 +00:00
commit b8438bba61
48 changed files with 15676 additions and 0 deletions
+226
View File
@@ -0,0 +1,226 @@
import os
import sys
import subprocess
import shutil
import glob
import time
from PIL import Image, ImageDraw
def build_executable():
"""Build executable with PyInstaller"""
print("Building LTE Manager executable...")
# 尝试终止可能正在运行的LTE_Manager.exe进程
try:
print("尝试终止可能正在运行的LTE_Manager.exe进程...")
subprocess.call("taskkill /F /IM LTE_Manager.exe", shell=True)
# 等待进程完全终止
time.sleep(2)
except Exception as e:
print(f"终止进程时出错 (这可能是正常的,如果进程不存在): {str(e)}")
# 保存数据库文件
db_backup_dir = "_db_backup_temp"
db_files = []
# 查找用户主目录下的数据库文件
user_home = os.path.expanduser('~')
lte_db_dir = os.path.join(user_home, '.LTE')
user_db_path = os.path.join(lte_db_dir, 'lte_data.db')
if os.path.exists("dist") or os.path.exists(user_db_path):
print("备份数据库文件...")
# 创建临时备份目录
if not os.path.exists(db_backup_dir):
os.makedirs(db_backup_dir)
# 查找所有SQLite数据库文件
dist_db_files = glob.glob("dist/*.db") if os.path.exists("dist") else []
# 备份找到的dist目录中的文件
for db_file in dist_db_files:
db_filename = os.path.basename(db_file)
backup_path = os.path.join(db_backup_dir, db_filename)
print(f"备份数据库 (旧版位置): {db_filename}")
shutil.copy2(db_file, backup_path)
# 备份用户主目录中的数据库
if os.path.exists(user_db_path):
backup_path = os.path.join(db_backup_dir, 'lte_data.db')
print(f"备份数据库 (用户目录): {user_db_path}")
shutil.copy2(user_db_path, backup_path)
# Check if PyInstaller is installed
try:
import PyInstaller
except ImportError:
print("PyInstaller not found. Installing...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
# Create spec file
spec_content = """
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[
('default.png', '.'),
('running.png', '.'),
('error.png', '.'),
('README.md', '.'),
('incoming_call.py', '.'),
('audio.py', '.')
],
hiddenimports=['PyQt5.sip', 'sounddevice', 'numpy'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='LTE_Manager',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='default.png',
)
"""
with open("lte_manager.spec", "w") as f:
f.write(spec_content)
# Run PyInstaller
print("Running PyInstaller...")
try:
# 等待一秒确保所有进程都释放了文件
time.sleep(1)
# 先检查目标EXE文件是否存在并可以被删除
target_exe = os.path.join("dist", "LTE_Manager.exe")
if os.path.exists(target_exe):
try:
# 尝试先重命名文件,这是检查文件是否被锁定的一种方法
temp_name = os.path.join("dist", f"LTE_Manager_old_{int(time.time())}.exe")
os.rename(target_exe, temp_name)
# 然后删除重命名后的文件
os.remove(temp_name)
print("成功删除旧的可执行文件")
except Exception as rename_error:
print(f"无法删除旧的可执行文件: {str(rename_error)}")
print("尝试使用Python 3.10来构建...")
# 尝试使用Python 3.10,如果可用
python310_path = r"G:\Python310\python.exe"
if os.path.exists(python310_path):
subprocess.check_call([
python310_path,
"-m",
"PyInstaller",
"lte_manager.spec",
"--clean"
])
print("使用Python 3.10构建完成")
build_success = True
return
# 运行PyInstaller
subprocess.check_call([
sys.executable,
"-m",
"PyInstaller",
"lte_manager.spec",
"--clean"
])
print("PyInstaller执行完成")
build_success = True
except Exception as e:
print(f"构建过程中出错: {str(e)}")
build_success = False
# 恢复数据库文件
if os.path.exists(db_backup_dir):
print("恢复数据库文件...")
backups = glob.glob(os.path.join(db_backup_dir, "*.db"))
for backup_file in backups:
db_filename = os.path.basename(backup_file)
# 确保用户目录存在
if not os.path.exists(lte_db_dir):
os.makedirs(lte_db_dir)
# 恢复到用户主目录
user_db_path = os.path.join(lte_db_dir, db_filename)
print(f"恢复数据库到用户目录: {user_db_path}")
shutil.copy2(backup_file, user_db_path)
# 为了向后兼容,也恢复到dist目录
if os.path.exists("dist"):
dist_path = os.path.join("dist", db_filename)
print(f"恢复数据库到dist目录: {dist_path}")
shutil.copy2(backup_file, dist_path)
# 删除临时备份目录
shutil.rmtree(db_backup_dir)
# Create a simple README file (if it doesn't exist)
if not os.path.exists("README.md"):
with open("README.md", "w") as f:
f.write("""# LTE Manager
一个用于管理LTE模块的应用程序,支持电话和短信功能。
## 功能
- 电话呼叫管理(拨打/接听电话)
- 短信管理(发送/接收/解码短信,包括中文)
- 模块配置和状态监控
- 串口配置
- 来电接听对话框
- PCM音频通话支持
## 使用方法
1. 连接LTE模块到计算机
2. 在设置选项卡中配置串口设置
3. 连接到模块
4. 使用电话和短信功能
## 系统托盘
应用程序可以最小化到系统托盘。双击托盘图标可以显示/隐藏主窗口。
""")
if build_success:
print("Executable built successfully!")
print("You can find it in the 'dist' folder.")
else:
print("构建过程未完成,请检查错误信息。")
if __name__ == "__main__":
build_executable()