Files
Chrome-Manager/build.py
T
2025-02-15 22:31:21 +08:00

134 lines
3.6 KiB
Python

import os
import sys
import shutil
import subprocess
from typing import List
def check_and_install_packages(packages: List[str]):
"""检查并安装所需的包"""
print("检查并安装必要的包...")
for package in packages:
try:
__import__(package)
print(f"✓ {package} 已安装")
except ImportError:
print(f"正在安装 {package}...")
subprocess.run([sys.executable, "-m", "pip", "install", package], check=True)
print(f"✓ {package} 安装成功")
def install_requirements():
"""安装所需的依赖包"""
required_packages = [
"pyinstaller", # 用于打包
"sv_ttk", # 用于主题
"keyboard", # 用于键盘监听
"mouse", # 用于鼠标监听
"pywin32", # 用于Windows API
"typing-extensions" # 用于类型提示
]
for package in required_packages:
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
except subprocess.CalledProcessError as e:
print(f"安装 {package} 失败: {str(e)}")
return False
return True
def build():
"""打包程序"""
# 需要的包列表
required_packages = [
"pyinstaller",
"sv_ttk",
"keyboard",
"mouse",
"pywin32"
]
# 检查并安装必要的包
check_and_install_packages(required_packages)
# 导入需要的模块(在安装后导入)
import sv_ttk
print("\n开始打包程序...")
# 清理旧的构建文件
if os.path.exists('build'):
shutil.rmtree('build')
if os.path.exists('dist'):
shutil.rmtree('dist')
# 获取 sv_ttk 路径
sv_ttk_path = os.path.dirname(sv_ttk.__file__)
# 创建 spec 文件内容
spec_content = f'''# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['chrome_manager.py'],
pathex=[],
binaries=[],
datas=[
('app.ico', '.'),
(r'{sv_ttk_path}', 'sv_ttk')
],
hiddenimports=[],
hookspath=[],
hooksconfig={{}},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[('app.manifest', 'app.manifest', 'DATA')],
name='chrome_manager',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
icon=['app.ico'],
manifest="app.manifest"
)
'''
# 写入 spec 文件
with open('chrome_manager.spec', 'w', encoding='utf-8') as f:
f.write(spec_content)
# 创建app.manifest文件
with open('app.manifest', 'w') as f:
f.write('''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>''')
# 运行 PyInstaller
subprocess.run(['pyinstaller', 'chrome_manager.spec'])
print("\n打包完成!程序文件在 dist 文件夹中。")
if __name__ == "__main__":
try:
build()
except Exception as e:
print(f"\n错误: {str(e)}")
input("\n按回车键退出...")