v1.0.2: hide packaging console window, optimize subprocess execution and data compatibility
This commit is contained in:
1 parent
f2b4a20fa0
commit
8ab72669aa
2 files changed
+29
-10
No files matched your search
@@ -26,6 +26,9 @@ PyPack 是一个基于 PyQt5 开发的图形化 Python 脚本打包与构建辅
|
||||
---
|
||||
|
||||
# 更新日志 (Changelog)
|
||||
### [1.0.2] - 2026-06-3
|
||||
* **更新子进程处理机制,并改进数据处理以提升兼容性。
|
||||
* **隐藏打包过程中的命令窗口。
|
||||
|
||||
### [1.0.1] - 2026-05-31
|
||||
#### 新增
|
||||
|
||||
@@ -191,8 +191,9 @@ class PackingThread(QThread):
|
||||
if self.process:
|
||||
try:
|
||||
if os.name == "nt":
|
||||
# 在 Windows 下终止整个子进程树,防止编译器残留锁死文件
|
||||
subprocess.run(["taskkill", "/F", "/T", "/PID", str(self.process.pid)], capture_output=True)
|
||||
# 在 Windows 下终止整个子进程树,防止编译器残留锁死文件 (增加 creationflags 隐藏结束进程的黑框)
|
||||
subprocess.run(["taskkill", "/F", "/T", "/PID", str(self.process.pid)],
|
||||
capture_output=True, creationflags=subprocess.CREATE_NO_WINDOW)
|
||||
else:
|
||||
self.process.kill()
|
||||
except:
|
||||
@@ -201,10 +202,19 @@ class PackingThread(QThread):
|
||||
def run_cmd_realtime(self, cmd, cwd=None):
|
||||
if self._is_cancelled: return False
|
||||
try:
|
||||
self.process = subprocess.Popen(
|
||||
cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
text=True, encoding='utf-8', errors='replace', cwd=cwd
|
||||
)
|
||||
kwargs = {
|
||||
"stdout": subprocess.PIPE,
|
||||
"stderr": subprocess.STDOUT,
|
||||
"text": True,
|
||||
"encoding": 'utf-8',
|
||||
"errors": 'replace',
|
||||
"cwd": cwd
|
||||
}
|
||||
# Windows 系统下静默执行,隐藏 CMD 黑窗口
|
||||
if os.name == 'nt':
|
||||
kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW
|
||||
|
||||
self.process = subprocess.Popen(cmd, **kwargs)
|
||||
while True:
|
||||
line = self.process.stdout.readline()
|
||||
if not line and self.process.poll() is not None:
|
||||
@@ -230,7 +240,7 @@ class PackingThread(QThread):
|
||||
script_path = self.params['script_path']
|
||||
script_dir = Path(script_path).parent
|
||||
if "OneDrive" in str(script_path):
|
||||
self.progress.emit("[警告] 工程位于 OneDrive 同同步目录中,文件可能被锁定导致构建失败,建议将工程迁移至本地路径。")
|
||||
self.progress.emit("[警告] 工程位于 OneDrive 同步目录中,文件可能被锁定导致构建失败,建议将工程迁移至本地路径。")
|
||||
|
||||
# 虚拟环境
|
||||
if self.params['use_venv']:
|
||||
@@ -327,8 +337,13 @@ class PackingThread(QThread):
|
||||
if imp: cmd.extend(["--hidden-import", imp])
|
||||
for d in self.params.get('add_data', '').split(','):
|
||||
d = d.strip()
|
||||
if d: cmd.extend(["--add-data", d])
|
||||
|
||||
if d:
|
||||
# 兼容 PyPack 统一的 ':' 语法,自动转换为 Windows PyInstaller 所需的 ';'
|
||||
if os.name == 'nt' and ':' in d:
|
||||
parts = d.rsplit(':', 1) # 从右拆分,防止破坏 C:\ 盘符
|
||||
if len(parts) == 2:
|
||||
d = f"{parts[0]};{parts[1]}"
|
||||
cmd.extend(["--add-data", d])
|
||||
elif engine == "Nuitka":
|
||||
self.temp_out_dir = Path(tempfile.mkdtemp(prefix="nuitka_out_"))
|
||||
cmd = [python_exe, "-m", "nuitka", "--remove-output", "--assume-yes-for-downloads",
|
||||
@@ -357,7 +372,8 @@ class PackingThread(QThread):
|
||||
if d:
|
||||
parts = d.split(':', 1)
|
||||
if len(parts) == 2:
|
||||
cmd.extend(["--include-data-files", f"{parts[0]}={parts[1]}"])
|
||||
# 修复:Nuitka 要求 --include-data-files 参数必须是完整字符串(由 = 拼接),不可分离
|
||||
cmd.append(f"--include-data-files={parts[0]}={parts[1]}")
|
||||
else:
|
||||
self.progress.emit(f"[警告] 附加资源格式错误,应为 src:dest,忽略: {d}")
|
||||
|
||||
|
||||
Reference in new issue
Block a user