skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
785 stars 87 forks source link

示例程序在win7上无法运行 #7

Closed alairack closed 2 years ago

alairack commented 2 years ago

我下载了示例程序(32位),在两台win7 x86 和 x64 实机运行Pystand.exe后,没有任何反应,命令行也没有任何输出。把pystand.int文件删除可以正常报错。

skywind3000 commented 2 years ago

我自己测试的结果是没问题的, 你可以到命令行下面去实际运行一下,看看什么报错吧?

alairack commented 2 years ago

image 命令行没有任何输出

alairack commented 2 years ago

win10可以正常运行

skywind3000 commented 2 years ago

会不会是 vc runtime files 的缺失?是最新版本的 PyStand 么?不应该啊。 真奇特,用 os.MessageBox 跟踪下 traceback ??

alairack commented 2 years ago

我尝试过1.04,1.03,1.02版本,都不行

skywind3000 commented 2 years ago

你先试试最原始的 PyStand:

https://github.com/skywind3000/PyStand/releases/download/1.0.4/PyStand-py38.7z

能否正常运行,确定到底是 PyStand 的问题,还是加上了 Qt 的问题。

alairack commented 2 years ago

好的

alairack commented 2 years ago

还是一样的

alairack commented 2 years ago

这两台win7机器都是service pack 1 ,可能缺少运行库

alairack commented 2 years ago

我把pystand.int的内容改为了print("hello world") 命令行并没有输出

skywind3000 commented 2 years ago

装一下 vcredist 2005-2022 试试。

alairack commented 2 years ago

装了,还是那样:no_mouth:

skywind3000 commented 2 years ago

我实在没你的环境,要不你自己编译调试下?

alairack commented 2 years ago

可以装个win7 sp1的虚拟机试试

skywind3000 commented 2 years ago

我就是虚拟机试的

myd7349 commented 2 years ago

我在干净的 Win7 SP1 简体中文版环境里试了一下,遇到一些问题。其中一个问题是 ctypes 无法被正确导入,导致 MessageBox 那里报错。经过搜索,我发现了这个 issue:official embedded Python fails to import certain modules

Python 文档里也有提到这一点: https://github.com/python/cpython/pull/23322/files

When running on Windows 7, Python 3.8 requires the KB2533623 update to be installed. The embeddable distribution does not detect this update, and may fail at runtime. Later versions of Windows include this update.

albertofwb commented 2 years ago

遇到了同样的问题,@skywind3000 我在本地将pystand改为 console 程序,在 win7 上调试发现示例程序跑步起来的原因是代码获取 PYSTAND_SCRIPT 环境变量报错。

我检查了 pystand.cpp ,分别在 161 行 285 行 设置了 PYSTAND_SCRIPT 其中,在 161 行设置的环境变量为空字符串 image 我将这一行注释后,解决了内嵌 Python 代码运行找不到 ‘PYSTAND_SCRIPT’ 的问题。继续运行 pystand.exe 在 pyqt5 的 init:44 报错: 找不到指定的程序(猜测是剪裁版 pyqt5所致),我将 pystand.int 内容改写为 print('hello') 后,运行正常

CC: @alairack

myd7349 commented 2 years ago

遇到了同样的问题,@skywind3000 我在本地将pystand改为 console 程序,在 win7 上调试发现示例程序跑步起来的原因是代码获取 PYSTAND_SCRIPT 环境变量报错。

我检查了 pystand.cpp ,分别在 161 行 285 行 设置了 PYSTAND_SCRIPT 其中,在 161 行设置的环境变量为空字符串 image 我将这一行注释后,解决了内嵌 Python 代码运行找不到 ‘PYSTAND_SCRIPT’ 的问题。继续运行 pystand.exe 在 pyqt5 的 init:44 报错: 找不到指定的程序(猜测是剪裁版 pyqt5所致),我将 pystand.int 内容改写为 print('hello') 后,运行正常

CC: @alairack

顶。我们的做法一致:https://github.com/myd7349/PyStand/commit/434a43d6f5da8a40260a9d1dd1050864033537c6

alairack commented 2 years ago

我使用 @albertofwb 修复后的程序,问题迎刃而解

遇到了同样的问题,@skywind3000 我在本地将pystand改为 console 程序,在 win7 上调试发现示例程序跑步起来的原因是代码获取 PYSTAND_SCRIPT 环境变量报错。

我检查了 pystand.cpp ,分别在 161 行 285 行 设置了 PYSTAND_SCRIPT 其中,在 161 行设置的环境变量为空字符串 image 我将这一行注释后,解决了内嵌 Python 代码运行找不到 ‘PYSTAND_SCRIPT’ 的问题。继续运行 pystand.exe 在 pyqt5 的 init:44 报错: 找不到指定的程序(猜测是剪裁版 pyqt5所致),我将 pystand.int 内容改写为 print('hello') 后,运行正常

CC: @alairack

albertofwb commented 2 years ago

遇到了同样的问题,@skywind3000 我在本地将pystand改为 console 程序,在 win7 上调试发现示例程序跑步起来的原因是代码获取 PYSTAND_SCRIPT 环境变量报错。 我检查了 pystand.cpp ,分别在 161 行 285 行 设置了 PYSTAND_SCRIPT 其中,在 161 行设置的环境变量为空字符串 image 我将这一行注释后,解决了内嵌 Python 代码运行找不到 ‘PYSTAND_SCRIPT’ 的问题。继续运行 pystand.exe 在 pyqt5 的 init:44 报错: 找不到指定的程序(猜测是剪裁版 pyqt5所致),我将 pystand.int 内容改写为 print('hello') 后,运行正常 CC: @alairack

顶。我们的做法一致:myd7349@434a43d

看上去在 win7 上调用 SetEnvironmentVariableW 无法覆盖已有变量? 但是我在 win7 cmd 窗口下

set a=""
set a="123"
echo %a%

可以看到变量的值。这可能是 SetEnvironmentVariableW 在 win7 下的特殊表现吧

myd7349 commented 2 years ago

可以测试一下 https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/putenv-wputenv?view=msvc-170

skywind3000 commented 2 years ago

@albertofwb ,我这里还是没法重现,那么 SetEnvironmentVariableW 的返回值是多少?能不能看一下?再看一下 GetLastError() 的返回码是多少?到底是什么错误。

myd7349 commented 2 years ago

我加了一个断点,第二次 SetEnvironmentVariableW 的调用也是返回 TRUE 的。

skywind3000 commented 2 years ago

_script 变量的值是多少呢?正常么?

myd7349 commented 2 years ago

一个想法: CMakeLists.txt 增加一个选项,允许将 PyStand 编译为一个纯 console application。因为:

skywind3000 commented 2 years ago

先解决这个问题吧,为啥上面截图中 _script 的值是一个空字符串?

image

3.8 对 win7 兼容不好可以退回 3.7,或者用这个家伙编译的支持 win7 的 python3.10:

https://github.com/NulAsh/cpython

albertofwb commented 2 years ago

On Wed, Mar 2, 2022 at 18:41 myd7349 @.***> wrote:

我加了一个断点,第二次 SetEnvironmentVariableW 的调用也是返回 TRUE 的。

— Reply to this email directly, view it on GitHub https://github.com/skywind3000/PyStand/issues/7#issuecomment-1056776182, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABNATLDPV7JXXZ2MKIB5ZG3U55AT7ANCNFSM5PTHYURQ . You are receiving this because you were mentioned.Message ID: @.***>

你真快,我刚下班回家啊,想着远程到公司的电脑去看一下结果,由于windows10升级到了11在Mac上用 Microsoft remote desktop连不上了。

既然是这么个情况,那么就可以在class初始化之前先获取事先脚本的路径。

这样也免得两次设置同一个环境变量了

albertofwb commented 2 years ago

先解决这个问题吧,为啥上面截图中 _script 的值是一个空字符串?

image

3.8 对 win7 兼容不好可以退回 3.7,或者用这个家伙编译的支持 win7 的 python3.10:

https://github.com/NulAsh/cpython

因为你在 CheckEnviron 函数里没有初始化 _script 变量

skywind3000 commented 2 years ago

把第一個設置 PYSTAND_SCRIPT 給去掉了,麻煩再試試。

https://github.com/skywind3000/PyStand/commit/e43804236647d76eb7309be9163d811ba64a8e3d

如果這個更新沒問題,我就用它再發佈一個新的 release

alairack commented 2 years ago

先解决这个问题吧,为啥上面截图中 _script 的值是一个空字符串?

image

3.8 对 win7 兼容不好可以退回 3.7,或者用这个家伙编译的支持 win7 的 python3.10:

https://github.com/NulAsh/cpython

我认为不是python版本的问题,我用python3.6.8在win7上也有同样的问题

albertofwb commented 2 years ago

把第一個設置 PYSTAND_SCRIPT 給去掉了,麻煩再試試。

e438042

如果這個更新沒問題,我就用它再發佈一個新的 release

这个没问题

skywind3000 commented 2 years ago

https://github.com/skywind3000/PyStand/releases/tag/1.0.5

新版本已经发布。

@alairack 我读了一下 https://bugs.python.org/issue42339 里的描述,似乎 python 3.7.9 是没问题的,对裸的 win7 似乎是 OK 的,我在 1.0.5 的 release 里放了一个 python 3.7.9 的 embed 包,你可以测试一下行不行。

alairack commented 2 years ago
alairack commented 2 years ago

我自行编译的x64版本pystand.exe在win7 x64 sp1机器上运行正常

skywind3000 commented 2 years ago

那问题解决了?嫌弃版本低的话,我推荐你直接试试:

https://github.com/NulAsh/cpython

这个人把 python3.9, python3.10 移植回 win7 了。有 embeded 版本。

alairack commented 2 years ago

那问题解决了?嫌弃版本低的话,我推荐你直接试试:

https://github.com/NulAsh/cpython

这个人把 python3.9, python3.10 移植回 win7 了。有 embeded 版本。

是的,解决了,我还在用python3.6😂