1.更新ubuntu虚拟路径启动方式
This commit is contained in:
parent
ee7a5db41c
commit
76a6ac691d
@ -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
|
||||
|
||||
@ -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_())
|
||||
|
||||
@ -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):
|
||||
"""创建项目对话框"""
|
||||
|
||||
@ -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):
|
||||
"""导入项目对话框"""
|
||||
|
||||
@ -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):
|
||||
"""主窗口类"""
|
||||
|
||||
@ -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):
|
||||
"""项目区域组件"""
|
||||
|
||||
@ -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):
|
||||
"""
|
||||
一个专门用于显示带圆角图片的控件。
|
||||
|
||||
@ -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):
|
||||
"""侧边栏组件"""
|
||||
|
||||
@ -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"
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue
Block a user