1.更新ubuntu虚拟路径启动方式

This commit is contained in:
陈横 2025-10-11 12:33:46 +08:00
parent ee7a5db41c
commit 76a6ac691d
9 changed files with 98 additions and 85 deletions

View File

@ -120,6 +120,39 @@ class PlatformUtils:
else:
return venv_path / 'bin' / 'python'
@staticmethod
def find_venv_path(project_path: Path) -> Optional[Path]:
"""
查找项目中的虚拟环境路径
根据平台规定虚拟环境目录名称
- Windows: .venv
- Ubuntu/Linux: venv
- macOS: venv
"""
system = PlatformUtils.get_system_type()
# 根据平台确定虚拟环境目录名
if system == 'windows':
venv_name = '.venv'
else: # Linux, macOS等
venv_name = 'venv'
venv_path = project_path / venv_name
# 检查虚拟环境是否存在
if venv_path.exists() and venv_path.is_dir():
# 验证是否是有效的虚拟环境目录
python_exec = PlatformUtils.get_python_executable(venv_path)
if python_exec.exists():
print(f"找到虚拟环境: {venv_path}")
return venv_path
else:
print(f"虚拟环境目录存在但无效缺少Python解释器: {venv_path}")
return None
else:
print(f"虚拟环境不存在: {venv_path} (平台: {system})")
return None
@staticmethod
def get_pycharm_paths() -> List[Path]:
"""获取各平台PyCharm可能的安装路径"""
@ -874,19 +907,28 @@ if __name__ == "__main__":
# 构建命令
cmd = [str(python_executable), str(script_path_obj)]
if args:
print("参数:", args)
cmd.extend(args)
# 将所有参数转换为字符串,处理 Path 对象
str_args = [str(arg) for arg in args]
print("参数:", str_args)
cmd.extend(str_args)
# 设置环境变量
env = os.environ.copy()
env['VIRTUAL_ENV'] = str(venv_path_obj)
# 强制子进程使用 UTF-8 编码,避免 emoji 和特殊字符编码错误
env['PYTHONIOENCODING'] = 'utf-8'
system = PlatformUtils.get_system_type()
if system == 'windows':
env['PATH'] = str(venv_path_obj / 'Scripts') + os.pathsep + env['PATH']
else:
env['PATH'] = str(venv_path_obj / 'bin') + os.pathsep + env['PATH']
# 根据平台确定编码
# 注意:子进程会使用 UTF-8通过 PYTHONIOENCODING这里用于读取子进程输出
encoding = 'utf-8' # 统一使用 UTF-8
# 执行命令
process = subprocess.Popen(
cmd,
@ -894,7 +936,8 @@ if __name__ == "__main__":
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding='utf-8',
encoding=encoding,
errors='replace', # 遇到无法解码的字符时用替换字符代替,避免崩溃
env=env
)
@ -914,16 +957,18 @@ if __name__ == "__main__":
print(f"No entry point found for project: {project_path_obj}")
return False
venv_path = project_path_obj / ".venv"
# 使用跨平台的虚拟环境查找方法
venv_path = PlatformUtils.find_venv_path(project_path_obj)
if not venv_path:
print(f"错误: 未找到虚拟环境")
return False
print(f"虚拟环境路径: {venv_path}")
print(f"脚本路径: {entry_point}")
if not venv_path.exists():
print(f"错误: 虚拟环境路径不存在: {venv_path}")
if not entry_point.exists():
print(f"错误: 脚本文件不存在: {entry_point}")
return False
print(f'target_project_path:{target_project_path}')
process, stdout, stderr = self.run_python_in_venv(str(venv_path), str(entry_point), [target_project_path])
@ -1175,10 +1220,15 @@ if __name__ == "__main__":
def check_pycharm_responsive(self):
"""检查PyCharm是否响应命令"""
try:
system = PlatformUtils.get_system_type()
encoding = 'gbk' if system == 'windows' else 'utf-8'
result = subprocess.run(
["pycharm", "--version"],
capture_output=True,
text=True,
encoding=encoding,
errors='replace',
timeout=5
)
if result.returncode == 0:
@ -1236,7 +1286,10 @@ if __name__ == "__main__":
try:
result = subprocess.run(
['osascript', '-e', 'tell application "System Events" to count windows of process "PyCharm"'],
capture_output=True, text=True
capture_output=True,
text=True,
encoding='utf-8',
errors='replace'
)
if result.returncode == 0 and result.stdout.strip().isdigit():
window_count = int(result.stdout.strip())
@ -1250,7 +1303,10 @@ if __name__ == "__main__":
try:
result = subprocess.run(
['xdotool', 'search', '--name', 'PyCharm'],
capture_output=True, text=True
capture_output=True,
text=True,
encoding='utf-8',
errors='replace'
)
if result.returncode == 0 and result.stdout.strip():
return True

View File

@ -13,10 +13,10 @@ from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 导入自定义组件
from MetaCore.ui.main_window import MainWindow
from MetaCore.ui.styles import StyleSheet
from ui.main_window import MainWindow
from ui.styles import StyleSheet
from MetaCore.data.project_manager import ProjectManager
from data.project_manager import ProjectManager
class MetaCoreApp(QApplication):
"""MetaCore应用程序主类"""
@ -54,11 +54,12 @@ class MetaCoreApp(QApplication):
def main():
"""主函数"""
app = MetaCoreApp(sys.argv)
# 设置高DPI支持必须在创建 QApplication 之前设置)
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
# 设置高DPI支持
app.setAttribute(Qt.AA_EnableHighDpiScaling, True)
app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
# 创建应用程序
app = MetaCoreApp(sys.argv)
# 运行应用程序
sys.exit(app.exec_())

View File

@ -9,7 +9,7 @@ from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from MetaCore.data.project_manager import ProjectManager
from data.project_manager import ProjectManager
class CreateProjectDialog(QDialog):
"""创建项目对话框"""

View File

@ -9,7 +9,7 @@ from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from MetaCore.data.project_manager import ProjectManager
from data.project_manager import ProjectManager
class ImportProjectDialog(QDialog):
"""导入项目对话框"""

View File

@ -8,13 +8,13 @@ from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from MetaCore.ui.sidebar import Sidebar
from MetaCore.ui.project_area import ProjectArea
from MetaCore.ui.create_project_dialog import CreateProjectDialog
from MetaCore.ui.import_project_dialog import ImportProjectDialog
from MetaCore.ui.project_settings_page import ProjectSettingsPage
from MetaCore.data.project_manager import ProjectManager
from MetaCore.ui.icon_manager import IconManager
from ui.sidebar import Sidebar
from ui.project_area import ProjectArea
from ui.create_project_dialog import CreateProjectDialog
from ui.import_project_dialog import ImportProjectDialog
from ui.project_settings_page import ProjectSettingsPage
from data.project_manager import ProjectManager
from ui.icon_manager import IconManager
class MainWindow(QMainWindow):
"""主窗口类"""

View File

@ -9,9 +9,9 @@ from PyQt5.QtCore import *
from PyQt5.QtGui import *
from typing import List
from MetaCore.data.project_manager import ProjectManager, Project
from MetaCore.ui.icon_manager import IconManager
from MetaCore.ui.project_card import ProjectCard
from data.project_manager import ProjectManager, Project
from ui.icon_manager import IconManager
from ui.project_card import ProjectCard
class ProjectArea(QWidget):
"""项目区域组件"""

View File

@ -13,9 +13,9 @@ from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from MetaCore.data.project_manager import ProjectManager, Project
from MetaCore.ui.icon_manager import IconManager
from MetaCore.ui.project_settings_page import ProjectSettingsPage
from data.project_manager import ProjectManager, Project
from ui.icon_manager import IconManager
from ui.project_settings_page import ProjectSettingsPage
class ImageDisplayWidget(QWidget):
"""
一个专门用于显示带圆角图片的控件

View File

@ -8,8 +8,8 @@ from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from MetaCore.data.project_manager import ProjectManager
from MetaCore.ui.icon_manager import IconManager
from data.project_manager import ProjectManager
from ui.icon_manager import IconManager
class Sidebar(QWidget):
"""侧边栏组件"""

View File

@ -1,57 +1,13 @@
[
{
"id": 1,
"title": "智慧工厂",
"date": "2024-06-08 15:56:35",
"type": "industrial",
"image": "🏭",
"path": "",
"project_dir": "",
"description": "",
"status": "normal"
},
{
"id": 2,
"title": "智慧水务",
"date": "2023-01-10 12:09:04",
"type": "smart",
"image": "💧",
"path": "",
"project_dir": "",
"description": "",
"status": "normal"
},
{
"id": 3,
"title": "数字工厂",
"date": "2024-06-07 06:57:46",
"type": "industrial",
"image": "🏗️",
"path": "",
"project_dir": "",
"description": "",
"status": "normal"
},
{
"id": 4,
"title": "智慧监控",
"date": "2024-07-28 17:38:02",
"type": "smart",
"image": "📊",
"path": "",
"project_dir": "",
"description": "",
"status": "normal"
},
{
"id": 5,
"title": "工业设计平台",
"date": "2025-02-28 18:00:05",
"type": "design",
"image": "🎨",
"path": "",
"project_dir": "",
"description": "",
"id": 6,
"title": "XNWX",
"date": "2025-10-11 12:15:15",
"type": "imported",
"image": "C:\\Users\\29381\\Desktop\\XNWX\\XNWX.png",
"path": "C:\\Users\\29381\\Desktop",
"project_dir": "C:\\Users\\29381\\Desktop\\XNWX",
"description": "从文件夹 XNWX 导入",
"status": "normal"
}
]