131 lines
3.5 KiB
Python
131 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
服务器端快速修复脚本
|
||
修复PyInstaller打包时的database目录缺失问题
|
||
"""
|
||
|
||
import os
|
||
from pathlib import Path
|
||
|
||
def fix_build_spec():
|
||
"""修复build.spec文件,处理可选数据文件"""
|
||
spec_file = Path('build.spec')
|
||
|
||
if not spec_file.exists():
|
||
print("错误: build.spec 文件不存在")
|
||
return False
|
||
|
||
# 读取原文件内容
|
||
with open(spec_file, 'r', encoding='utf-8') as f:
|
||
content = f.read()
|
||
|
||
# 查找并替换datas部分
|
||
old_datas = '''# 需要包含的数据文件
|
||
datas = [
|
||
(str(ROOT_DIR / 'app'), 'app'), # 包含整个app目录
|
||
('.env.example', '.'), # 包含环境配置示例文件
|
||
('database', 'database'), # 包含数据库相关文件
|
||
]'''
|
||
|
||
new_datas = '''# 需要包含的数据文件
|
||
datas = [
|
||
(str(ROOT_DIR / 'app'), 'app'), # 包含整个app目录
|
||
('.env.example', '.'), # 包含环境配置示例文件
|
||
]
|
||
|
||
# 可选数据文件(如果存在才包含)
|
||
optional_files = [
|
||
('database', 'database'), # 包含数据库相关文件
|
||
]
|
||
|
||
# 添加可选数据文件
|
||
for src, dst in optional_files:
|
||
src_path = ROOT_DIR / src
|
||
if src_path.exists():
|
||
datas.append((src, dst))
|
||
print(f"包含可选数据文件: {src}")
|
||
else:
|
||
print(f"跳过可选数据文件: {src} (不存在)")'''
|
||
|
||
if old_datas in content:
|
||
content = content.replace(old_datas, new_datas)
|
||
|
||
# 写回文件
|
||
with open(spec_file, 'w', encoding='utf-8') as f:
|
||
f.write(content)
|
||
|
||
print("✓ 已修复 build.spec 文件")
|
||
return True
|
||
else:
|
||
print("build.spec 文件已经包含修复或格式不匹配")
|
||
return False
|
||
|
||
def create_database_dir():
|
||
"""创建database目录(如果不存在)"""
|
||
db_dir = Path('database')
|
||
|
||
if not db_dir.exists():
|
||
db_dir.mkdir(exist_ok=True)
|
||
|
||
# 创建一个空的初始化文件
|
||
init_file = db_dir / 'init' / '.gitkeep'
|
||
init_file.parent.mkdir(exist_ok=True)
|
||
init_file.touch()
|
||
|
||
# 创建一个说明文件
|
||
readme_file = db_dir / 'README.md'
|
||
with open(readme_file, 'w', encoding='utf-8') as f:
|
||
f.write("""# Database目录
|
||
|
||
此目录包含数据库相关的初始化脚本和配置文件。
|
||
|
||
## 文件说明
|
||
|
||
- `init/`: 数据库初始化脚本目录
|
||
- `create_files_table.py`: 创建文件表的脚本
|
||
|
||
## 注意
|
||
|
||
如果此目录为空,不会影响应用的正常运行。应用会自动创建所需的数据库表。
|
||
""")
|
||
|
||
print("✓ 已创建 database 目录")
|
||
return True
|
||
else:
|
||
print("✓ database 目录已存在")
|
||
return True
|
||
|
||
def main():
|
||
"""主函数"""
|
||
print("=== 服务器端快速修复脚本 ===")
|
||
|
||
# 修复build.spec文件
|
||
print("1. 修复 build.spec 文件...")
|
||
fix_build_spec()
|
||
|
||
# 创建database目录
|
||
print("\n2. 检查 database 目录...")
|
||
create_database_dir()
|
||
|
||
print("\n=== 修复完成 ===")
|
||
print("现在可以重新运行打包:")
|
||
print("python build_linux.py")
|
||
|
||
# 验证修复结果
|
||
print("\n=== 验证修复结果 ===")
|
||
|
||
if Path('build.spec').exists():
|
||
print("✓ build.spec 文件存在")
|
||
else:
|
||
print("✗ build.spec 文件不存在")
|
||
|
||
if Path('database').exists():
|
||
print("✓ database 目录存在")
|
||
files = list(Path('database').rglob('*'))
|
||
print(f" 包含 {len(files)} 个文件/目录")
|
||
else:
|
||
print("✗ database 目录不存在")
|
||
|
||
if __name__ == '__main__':
|
||
main() |