-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
release下载的macos在m2 mac上双击图标闪退【已解决】 #39
Comments
不构建而是直接从源码运行的话也不能正常使用吗? 之前提供 macOS 下的使用建议的那位注销账号了,我也没什么头绪。 |
更新下,release中3月14日前的都可以正常打开,就2天前刚发布的无法打开 |
在那之后 macOS 的打包我一直没动过来着…… 3.14 的那个 release 对应的是 aa5479e 这个 commit,如果你有条件从源码运行的话可以在这个 commit 和最近的 commit 之间折半查找一下(不到 16 个),应该就能定位到是哪个 commit 可能有问题? |
直接运行源码发现可能问题所在:用python3.10虚拟环境,自带tk版本8.5,运行报错 建议readme里面写一下python版本 用pyinstaller打包成功,但双击闪退,也不知道是什么错误,怎么看错误信息呢 |
进入打包的appbundle,直接运行主程序,看到报错信息如下:
这个缺失的module是什么? |
Actions 运行的时候用的就是 Python 3.11,应该不会碰到 tk 的版本问题。 为了减少程序体积,打包的时候我会试着把 Python 自带的但是程序里没有调用的模块阉割掉,看样子在 macOS 打包的时候这个 把 spec 文件的 (Linux 下能不能运行我也很久没测试过了,明天起来有空试一下) |
把 spec 文件的 excludes 里面的 '_multiprocessing' 去掉再打包后,进入appbundle运行主程序的信息如下:
运行打包好的mac app可以正常打开了,问题确实出在excludes里面的 '_multiprocessing' |
这个输出是因为上游的 darkdetect 库的问题,import 的语句已经被包在 等我确认 Linux 下有没有类似问题之后就重新发 release。 更新:Linux 下也需要 |
忘了提了,spec要改成下面这样,不然pyinstaller打包会报错,原因是models里面的bin文件的mach-o无法解析
或者
上面这两种写法都可以打包成功,问题出在models不能放在binaries里面 |
下面是我改过的完整的
|
我本地源码打包过程如下 下载源码和Python虚拟环境git clone https://github.com/TransparentLC/realesrgan-gui.git 下载realesrgan-ncnn-vulkancurl -L "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-macos.zip" -o realesrgan-ncnn-vulkan-20220424-macos.zip 按照上面说的修改spec文件后打包appsudo pyinstaller realesrgan-gui-macOS-arm64.spec |
你都把改好的 spec 端上来了,那提个 PR 吧 ( ゚∀。) build.yml 或者 README.md 的 macOS 相关内容如果有需要补充的也可以改。 commit hash 可以不用写死。spec 文件其实也是 Python 代码,可以试试改成用 subprocess 调用 |
已经 merge 了,先试试 actions 里面最新的打包用起来有没有问题? |
action里面下载的macOS app bundle无法打开 |
但是完全按照readme里面 |
有一点不知道是不是和这个问题有关,actions 的 macOS 运行环境只有 x64 没有 arm,不过如果真的是因为这个的话我也没办法解决了…… |
if [ $RUNNER_OS == "macOS" ]; then
chmod +x Build-macOS-arm64.sh
sh Build-macOS-arm64.sh
chmod u+x "dist/Real-ESRGAN GUI.app/Contents/MacOS/realesrgan-gui"
chmod u+x "dist/Real-ESRGAN GUI.app/Contents/MacOS/realesrgan-ncnn-vulkan"
xattr -cr "dist/Real-ESRGAN GUI.app"
else
pyinstaller --clean --log-level WARN realesrgan-gui.spec
fi 按照这个修改了 build.yml 里打包相关的部分。 |
试了下action打包出来的还是无法启动,应该是只能在本地操作上面的权限,或者有其他方式在action中赋予权限 |
8月28日release里面的macos app,realesrgan-gui和realesrgan-ncnn-vulkan都有权限,但无法启动,原因是之前一样的multiprocessing模块缺失,所以我猜测只要把模块加上应该就能运行了; |
那应该没办法了,只能把这几个命令写在README里自己动手执行了( |
作者用回原来的workflow,用回原来的spec文件,把multiprocessing模块从排除清单删掉(包括win和mac,不做条件判断),是不是其实就可以了?因为原来的workflow好像没有可执行程序没有权限的问题 |
我没办法说可不可以啊(笑 同样是 Actions 里面 chmod 然后打包进 tar,Linux 的版本是解压后直接有 +x 权限的,我也不知道 macOS 为什么不行或者说为什么以前可以现在不行…… 因为我没有 macOS 设备也完全不了解相关机制,所以现在这种需要输命令之类的操作但是至少能跑起来已经是我能做到的上限了( |
9月3日macOS intel芯片版本已经解决无法启动的问题了,作者👍🏻 |
@TransparentLC 可能是pyinstaller新版本做了什么修改,重新打包项目后,除了主程序realesrgan-guiMacOS文件夹外,其余原先在MacOS文件夹的文件全部在Frameworks文件夹了,然后打包好的应用双击运行会提示找不到realesrgan-ncnn-vulkan,可否修复下这个issue,谢谢作者! |
下面这是原先的appbundle结构
下面这是新的结构
可以看到原先macOS文件夹的文件都跑frameworks里面去了,然后应用就找不到超分可执行程序了 |
PyInstaller 最近更新了 6.0,Changelog 里有一堆和 macOS 相关的更改。 我把 Actions 里安装 PyInstaller 的版本限制成了 5.*,看了一下现在 |
看了changelog,这个改动是为了符合签名要求,主程序引用的可执行程序都移动到frameworks了,如果要用pyinstaller 6,define里的路径需要修改下,我假期有空了研究下看看能不能解决,如果能解决就发pr |
define.py的RE_PATH修改为如下:
main.py的models路径修改为如下:
task.py的cmd部分参考了
上面这样修改完后用pyinstaller 6.0打包后得到的应用可以正常得到放大的图像 尝试了各种能想到的办法,依然没有解决,请作者帮忙看下问题出在哪里,谢谢! |
我不了解 macOS,所以也不知道这个 -192 是怎么回事(最多只能搜索到“Resource not found”的解释),也许你可以再尝试确定一下是哪一行弄出这个 -192 的。 不过这个修改有两个很明显的问题:
顺便一提,在 Markdown 里可以用语言为 foo
-bar
+baz
qux |
-APP_PATH = os.path.dirname(os.path.realpath(sys.executable if hasattr(sys, '_MEIPASS') else __file__))
+APP_PATH = os.path.realpath(sys._MEIPASS) if getattr(sys, 'frozen', False) else os.path.dirname(os.path.realpath(__file__)) 最新仓库其他都不改,只改了define里面的APP_PATH定义,再用pyinstaller 6.0打包,realesrgan_ncnn_vulkan依然在Frameworks文件夹,models依然在resources文件夹,但运行程序不会再提示找不到realesrgan_ncnn_vulkan,猜测原来APP_PATH的定义路径固化成realeargan_gui所在路径了,pyinstaller打包后,realesrgan_ncnn_vulkan和models都不在同一路径了,于是就无法找到了。 |
确实是这么设计的,假定 GUI 和程序放在同一个路径下。 如果按你测试的话直接进行 x4 放大不进行有损压缩和 downsample 的话放大流程是这个样子:原图 x2 放大到临时文件 A,临时文件 A 再 x2 放大到临时文件 B 然后 |
python刚自学入门,不知道怎么解决了,去问了AI,给出下面的回答我也看不懂到底对还是不对,按照这个回答感觉要修改的地方太多了,可能越改问题越多,超出我的能力了😭 从提供的main.py代码来看,退出时弹出OSStatus -192错误很可能是资源没有被正确释放导致的。 我注意到一些可能的问题:
建议尝试以下修改:
这些改进应该可以避免一些资源泄露问题,从而避免退出时出现错误。具体需要根据你的线程和资源使用情况调整。 好的,根据我们之前的分析,需要修改main.py中的以下代码:
# 新增
task_thread = None
# 第166行左右
task_thread = threading.Thread(
target=task.taskRunner,
args=(
...
)
)
task_thread.start()
# 在root.destroy()前
if task_thread and task_thread.is_alive():
task_thread.join()
# 第145行左右
def completeCallback(withError: bool):
...
if self.logFile:
self.logFile.close()
# 替换最后一句
root.destroy()
sys.exit(0) 具体需要将上面示意代码插入合适的位置,比如task_thread的声明需要放在启动线程之前。 这些改动可以让主线程等待任务线程结束,确保资源如文件被关闭,并正常退出程序。 让我知道如果这个改动建议能帮你解决问题! |
对于 tk 的程序来说退出主线程就是关闭程序,也就是按右上角的 X,如果要自定义关闭前做些什么的话(比如这里需要保存 config)就重写 Lines 496 to 499 in f8eb23b
但是显然也不是退出程序的时候才出现 -192。
Line 383 in f8eb23b
这个关闭文件写在 Lines 291 to 306 in f8eb23b
|
找不出原因,可能是pyinstaller6自己的问题,放弃了,还是老实用pyinstaller5好了 |
pyinstaller 6.x下好像是notificator的原因导致OSStatus Error -192报错,请问如何把notify模块从源码删除,我再打包试试看 |
其他系统还是要用提醒功能的,这怎么删(
↑我记错了,这个是深色模式相关的 |
pyinstaller 6.x 用2023年2月份的commit(加入notify前)之前的仓库打包试了,打包后运行正常了,实锤是notify模块的问题 能否改成windows有提醒功能,mac没有提醒功能?notify这个模块使用notify.app来实现的,之前pyinstaller 5.x的时候虽然没有报错OSStatus Error -192,但实际也并从未发挥过作用,(有一次发挥作用问我要权限,不给就没作用,给的话mac下权限控制比较严格,不建议用这种app里套app的方式)现在pyinstaller 6.x报错了,感觉这个模块在mac下有些鸡肋了,希望能用if的方式取消mac的notify 另外就是找不到realesrgan主程序和model的问题,define.py修改如下可以解决:
这样改算是返璞归真了,从源码运行和pyinstaller打包运行都可以,没出现新的问题,但这么改我是蒙的,不确定这样是否与项目原来的define的目的一致,windows上我没试过这样改了之后会否有问题 |
那就把那个 import 加到 一开始的设计是 |
mac用的.spec是pyinstaller -D -w方式打包的,如果Windows是pyinstaller -F -w方式打包的话确实会有问题,realesrgan会在临时文件夹里,这个项目用onefile效率比较差,因为realesrgan和模型体积较大,每次运行都要自解压先,-D方式效率会高些,几乎没延迟 我明天按上面的改下看看能不能解决问题 |
按照设计的话,这两个是放在 |
可能mac和windows下不太一样,mac下如果onefile会把realesrgan和models打包进main主程序,运行时需要先自解压到临时文件夹 |
如题,已经xattr -cr,但双击图标闪退,无法打开应用,按照readme本地构建,可以构建成功,但一样闪退
已经装了rosseta2,release里面虽然是x64版本的,但理论上应该可以兼容在m2 mac上跑才对
The text was updated successfully, but these errors were encountered: