mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-03-31 21:07:14 +08:00
解决不更新
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/__pycache__/batch_export_dialog.cpython-39.pyc
Normal file
BIN
app/__pycache__/batch_export_dialog.cpython-39.pyc
Normal file
Binary file not shown.
BIN
app/__pycache__/category_management_dialog.cpython-39.pyc
Normal file
BIN
app/__pycache__/category_management_dialog.cpython-39.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/__pycache__/finance_interface.cpython-39.pyc
Normal file
BIN
app/__pycache__/finance_interface.cpython-39.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -263,14 +263,24 @@ class DataInterface(QWidget):
|
||||
|
||||
def update_user_template(self):
|
||||
from app.tools.update_code import update_code
|
||||
from app.tools.code_generator import CodeGenerator
|
||||
|
||||
def info_callback(parent):
|
||||
# 清除 CodeGenerator 的缓存,强制重新读取更新后的文件
|
||||
CodeGenerator._assets_dir_cache = None
|
||||
CodeGenerator._assets_dir_initialized = False
|
||||
CodeGenerator._template_dir_logged = False
|
||||
|
||||
InfoBar.success(
|
||||
title="更新成功",
|
||||
content="用户模板已更新到最新版本!",
|
||||
parent=parent,
|
||||
duration=2000
|
||||
)
|
||||
|
||||
# 如果当前在代码生成页面,刷新文件列表
|
||||
if self.stacked_layout.currentWidget() == self.codegen_page:
|
||||
self.show_user_code_files()
|
||||
|
||||
def error_callback(parent, msg):
|
||||
InfoBar.error(
|
||||
@@ -287,6 +297,10 @@ class DataInterface(QWidget):
|
||||
file_tree = self.codegen_page.file_tree
|
||||
file_tree.clear()
|
||||
base_dir = CodeGenerator.get_assets_dir("User_code")
|
||||
print(f"显示用户代码文件:base_dir = {base_dir}")
|
||||
print(f"目录是否存在: {os.path.exists(base_dir)}")
|
||||
if os.path.exists(base_dir):
|
||||
print(f"目录内容: {os.listdir(base_dir)}")
|
||||
user_dir = os.path.join(self.project_path, "User")
|
||||
sub_dirs = ["bsp", "component", "device", "module"]
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/tools/__pycache__/finance_manager.cpython-39.pyc
Normal file
BIN
app/tools/__pycache__/finance_manager.cpython-39.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -100,26 +100,41 @@ class CodeGenerator:
|
||||
# 打包后的环境
|
||||
print("检测到打包环境")
|
||||
|
||||
# 优先使用sys._MEIPASS(PyInstaller的临时解包目录)
|
||||
if hasattr(sys, '_MEIPASS'):
|
||||
# 优先使用可执行文件所在目录(支持更新后的文件)
|
||||
exe_dir = os.path.dirname(sys.executable)
|
||||
exe_assets = os.path.join(exe_dir, "assets")
|
||||
|
||||
# 如果exe目录下不存在assets,但_MEIPASS中有,则首次复制过去
|
||||
if not os.path.exists(exe_assets) and hasattr(sys, '_MEIPASS'):
|
||||
base_path = getattr(sys, '_MEIPASS')
|
||||
meipass_assets = os.path.join(base_path, "assets")
|
||||
if os.path.exists(meipass_assets):
|
||||
try:
|
||||
import shutil
|
||||
print(f"首次运行:从 {meipass_assets} 复制到 {exe_assets}")
|
||||
shutil.copytree(meipass_assets, exe_assets)
|
||||
print("初始资源复制成功")
|
||||
except Exception as e:
|
||||
print(f"复制初始资源失败: {e}")
|
||||
|
||||
# 优先使用exe目录下的assets(这样可以读取更新后的文件)
|
||||
if os.path.exists(exe_assets):
|
||||
assets_dir = exe_assets
|
||||
print(f"使用可执行文件目录: {assets_dir}")
|
||||
# 后备方案:使用PyInstaller的临时解包目录
|
||||
elif hasattr(sys, '_MEIPASS'):
|
||||
base_path = getattr(sys, '_MEIPASS')
|
||||
assets_dir = os.path.join(base_path, "assets")
|
||||
print(f"使用PyInstaller临时目录: {assets_dir}")
|
||||
print(f"后备:使用PyInstaller临时目录: {assets_dir}")
|
||||
# 最后尝试工作目录
|
||||
else:
|
||||
# 后备方案:使用可执行文件所在目录
|
||||
exe_dir = os.path.dirname(sys.executable)
|
||||
assets_dir = os.path.join(exe_dir, "assets")
|
||||
print(f"使用可执行文件目录: {assets_dir}")
|
||||
|
||||
# 如果都不存在,尝试其他可能的位置
|
||||
if not os.path.exists(assets_dir):
|
||||
# 尝试从当前工作目录查找
|
||||
cwd_assets = os.path.join(os.getcwd(), "assets")
|
||||
if os.path.exists(cwd_assets):
|
||||
assets_dir = cwd_assets
|
||||
print(f"从工作目录找到assets: {assets_dir}")
|
||||
else:
|
||||
print(f"警告:无法找到assets目录,使用默认路径: {assets_dir}")
|
||||
assets_dir = exe_assets # 即使不存在也使用exe目录,后续会创建
|
||||
print(f"使用默认路径(将创建): {assets_dir}")
|
||||
else:
|
||||
# 开发环境
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
@@ -10,21 +10,45 @@ import time
|
||||
def update_code(parent=None, info_callback=None, error_callback=None):
|
||||
url = "http://gitea.qutrobot.top/robofish/MRobot/archive/User_code.zip"
|
||||
|
||||
# 使用与CodeGenerator.get_assets_dir相同的逻辑确定assets目录
|
||||
if getattr(sys, 'frozen', False):
|
||||
# 打包后的环境 - 使用可执行文件所在目录
|
||||
exe_dir = os.path.dirname(sys.executable)
|
||||
assets_dir = os.path.join(exe_dir, "assets")
|
||||
print(f"更新代码:打包环境,使用路径: {assets_dir}")
|
||||
|
||||
# 如果exe_dir/assets不存在,尝试使用相对路径作为后备
|
||||
if not os.path.exists(assets_dir):
|
||||
assets_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets")
|
||||
print(f"更新代码:后备路径: {assets_dir}")
|
||||
else:
|
||||
# 开发环境
|
||||
assets_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets")
|
||||
print(f"更新代码:开发环境,使用路径: {assets_dir}")
|
||||
# 导入 CodeGenerator 以使用统一的路径获取逻辑
|
||||
try:
|
||||
from app.tools.code_generator import CodeGenerator
|
||||
# 直接使用 CodeGenerator 的路径获取方法,确保路径一致
|
||||
assets_dir = CodeGenerator.get_assets_dir("")
|
||||
print(f"更新代码:使用 CodeGenerator 路径: {assets_dir}")
|
||||
except Exception as e:
|
||||
print(f"无法导入 CodeGenerator,使用后备路径逻辑: {e}")
|
||||
# 后备方案:使用与CodeGenerator.get_assets_dir相同的逻辑确定assets目录
|
||||
if getattr(sys, 'frozen', False):
|
||||
# 打包后的环境
|
||||
if hasattr(sys, '_MEIPASS'):
|
||||
base_path = getattr(sys, '_MEIPASS')
|
||||
assets_dir = os.path.join(base_path, "assets")
|
||||
print(f"更新代码:使用PyInstaller临时目录: {assets_dir}")
|
||||
else:
|
||||
# 使用可执行文件所在目录
|
||||
exe_dir = os.path.dirname(sys.executable)
|
||||
assets_dir = os.path.join(exe_dir, "assets")
|
||||
print(f"更新代码:打包环境,使用路径: {assets_dir}")
|
||||
|
||||
# 如果不存在,尝试工作目录
|
||||
if not os.path.exists(assets_dir):
|
||||
cwd_assets = os.path.join(os.getcwd(), "assets")
|
||||
if os.path.exists(cwd_assets):
|
||||
assets_dir = cwd_assets
|
||||
print(f"更新代码:使用工作目录: {assets_dir}")
|
||||
else:
|
||||
# 开发环境
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
while current_dir != os.path.dirname(current_dir):
|
||||
if os.path.basename(current_dir) == 'MRobot':
|
||||
break
|
||||
parent_dir = os.path.dirname(current_dir)
|
||||
if parent_dir == current_dir:
|
||||
break
|
||||
current_dir = parent_dir
|
||||
assets_dir = os.path.join(current_dir, "assets")
|
||||
print(f"更新代码:开发环境,使用路径: {assets_dir}")
|
||||
|
||||
local_dir = os.path.join(assets_dir, "User_code")
|
||||
print(f"更新代码:最终目标目录: {local_dir}")
|
||||
@@ -93,6 +117,16 @@ def update_code(parent=None, info_callback=None, error_callback=None):
|
||||
if backup_dir and os.path.exists(backup_dir):
|
||||
shutil.rmtree(backup_dir, ignore_errors=True)
|
||||
|
||||
# 清除 CodeGenerator 的缓存,确保后续读取更新后的文件
|
||||
try:
|
||||
from app.tools.code_generator import CodeGenerator
|
||||
CodeGenerator._assets_dir_cache = None
|
||||
CodeGenerator._assets_dir_initialized = False
|
||||
CodeGenerator._template_dir_logged = False
|
||||
print("已清除 CodeGenerator 缓存")
|
||||
except Exception as e:
|
||||
print(f"清除缓存失败(可忽略): {e}")
|
||||
|
||||
if info_callback:
|
||||
info_callback(parent)
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user