skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
641 stars 75 forks source link

fix #38 #39

Closed myd7349 closed 1 year ago

myd7349 commented 1 year ago

在重定向 stdout & stderr 失败的时候,尝试将它们重定向至 devnull。这样,即使用户代码里有诸如:

stdout.write(...)

这样的代码,程序依然能正常运行下去。

参考:Redirecting stdout to "nothing" in python

myd7349 commented 1 year ago

或者,重定向至一个文本(日志)文件,如:PyStand.log。

skywind3000 commented 1 year ago

有没有办法写个 ci 啊?有新代码就自动编译出 win32/win64 + GUI/Console 的包来?

myd7349 commented 1 year ago

有没有办法写个 ci 啊?有新代码就自动编译出 win32/win64 + GUI/Console 的包来?

这个可以有。我试试。

myd7349 commented 1 year ago

@skywind3000 初步增加了一个 build.yml:

效果预览:

值得讨论的地方:

skywind3000 commented 1 year ago

帅,对了,是 static 连接的吧?(在没有 vc 的机器上也能运行) 我觉得第三方包不需要了 vs2022 能否支持兼容 win7 ? 桌面环境千差万别,特别做行业开发的时候,希望至少保持 win7 可以运行。

myd7349 commented 1 year ago

帅,对了,是 static 连接的吧?(在没有 vc 的机器上也能运行) 我觉得第三方包不需要了 vs2022 能否支持兼容 win7 ? 桌面环境千差万别,特别做行业开发的时候,希望至少保持 win7 可以运行。

是静态链接的。因为 CMakeLists.txt 有这几行:

https://github.com/skywind3000/PyStand/blob/master/CMakeLists.txt#L23-L28

至于 Win7 支持,目前可能还不确定。我手边没有 Win7 的机器,无法实测。高版本机子+编译器编译的在低版本上可能存在兼容性问题,甚至无法运行。

我最初想选一个低版本的 Windows 镜像,结果发现 GitHub Actions 的 Windows 镜像好像只支持:

https://github.com/actions/runner-images#available-images

而且,在这些镜像上,一些低版本的 Visual Studio 是未安装的:

https://github.com/actions/runner-images/issues/1858#issuecomment-712688003

我稍后尝试一下看能不能通过 choco 安装 VS2010。

skywind3000 commented 1 year ago

我自己之前试过,mingw 可以兼容 win7,但是不太清楚 ci 环境的 mingw 能不能既输出 win32 有输出 win64

myd7349 commented 1 year ago

我刚刚试了一下 VS2010。

先是这个包:https://community.chocolatey.org/packages/VCExpress2010 ,安装失败。

网上也有提到 VS2019 搭配 Windows SDK 7.1 的,不过配置有些复杂,可能不容易用脚本实现:

https://allenkuo.medium.com/visual-studio-2019-2017-works-with-win-sdk-7-1-7a41443e425b

https://github.com/allenk/WinSDK71_VisualStudio2019

choco 里倒是有 Windows SDK 7.1 的包:https://community.chocolatey.org/packages/windows-sdk-7.1

我试试 MinGW 或 MSYS。

myd7349 commented 1 year ago

@skywind3000 完工了。

效果预览:

打 Tag 后推送:

写 build.yml 的过程参考了 simdjsonClipboardf3dopencv-mobile 等项目的配置文件。

目前,GCC 支持是通过 WinLibs 实现的,GCC 版本是 7.5.0(为了支持 Win7,我特意找了 WinLibs 所支持的最旧的 GCC 版本。不过编译生成的文件能否在 Win7 运行,尚需测试)。

其实,我最开始是想用 https://github.com/msys2/setup-msys2 的,但过程中遇到了一些问题,暂时没有解决,因此放弃(感兴趣的话,可以看 https://github.com/myd7349/PyStand/tree/ci 的提交历史)。

还有一个比较坑的问题是,windows-latest 镜像 C 盘已经预装了一个 GCC 12。因此,要想使用 GCC 7.5.0,必须先 CheckoutSetup MinGW-w64(这两步调换一下顺序就不行了),并修改 PATH 环境变量。经过一番折腾,也算是初步解决了。

myd7349 commented 1 year ago

测的过程中还遇到一个问题:CI 自动编译、上传的某些版本的 PyStand.exe 会被 Win10 杀毒软件误报。

skywind3000 commented 1 year ago

幸苦,我明天测试下。

myd7349 commented 1 year ago

图片

图片

图片

图片

用 DIE 验证了一下自动编译的 PyStand.exe 的位数和子系统,都是对的。

myd7349 commented 1 year ago

想了一下,把 CI support 挪到一个新的 PR 了:https://github.com/skywind3000/PyStand/pull/40

skywind3000 commented 1 year ago

多谢