问题描述
对于我的软件(仅适用于 Windows),我使用 NSIS 创建了一个安装程序。为了使软件正常工作,我将 python(版本 3.6.5)作为 3rd 方软件(.exe 文件)提供。此外,我需要进行 pip 升级并安装一些模块(例如 NumPy)。
我使用 NSIS 安装程序的方法如下:
-
运行可执行的 python 安装程序:在我的安装程序中,提醒用户将 python 添加到环境 %path% 变量中。提取所有文件后,将执行 Python 的 3rd 方安装程序。 Python 已安装并添加到 %path%。
-
运行小型 C++ 脚本 (
PythonSetup.exe
):(除其他外)脚本使用 {{1} 中的GetEnvironmentvariable
匹配 python 目录的路径变量}}。如果 python 在路径中,那么它会执行一些命令,比如
Windows.h
否则它只会打印“找不到python”和整个路径环境变量。
在 NSIS 中,它是这样实现的(简化):
python -m pip install --upgrade pip
python -m pip install numpy
我的问题是:
-
SetoutPath "$INSTDIR\python" File "D:\python\python-3.6.5.exe" ExecWait '"$INSTDIR\python\python-3.6.5.exe" InstallAllUsers=1 Prependpath=1' Sleep 500 File "D:\python\PythonSetup.exe" ExecWait '"$INSTDIR\python\PythonSetup.exe" $INSTDIR' Sleep 500 SetoutPath "$INSTDIR" Delete "$INSTDIR\python\python-3.6.5.exe" Delete "$INSTDIR\python\PythonSetup.exe" RmDir "$INSTDIR\python"
在 %path% 变量中找不到 python 目录。打印出我使用PythonSetup.exe
中的GetEnvironmentvariable
得到的路径,可以看到得到的路径确实不包含python目录。 - 强制执行上面提到的命令,我收到错误:
Windows.h
- 但是在 Windows
'python.exe' is not recognized as an internal or external command,operable program or batch file.
中检查 %path% 变量表明 python 目录确实已添加到路径变量中。我在System Properties > Advanced > Environment Variables
运行时检查了这一点,即在 NSIS 行PyhtonSetup.exe
期间。 - 在 NSIS 安装程序完成后立即执行
ExecWait '"$INSTDIR\python\PythonSetup.exe" $INSTDIR'
工作正常。
我试过了
- 更长的
PythonSetup.exe
- 其他 Python 架构(32 位与 64 位)
- 手动查找python目录并以这种方式调用
Sleep
,例如
python.exe
有谁知道在C:\Program Files\python36-32\python.exe -m pip install numpy
中GetEnvironmentvariable
返回的路径中为什么找不到python目录的原因,同时可以看到在系统属性中?
我觉得我可能遗漏了一些明显的东西......
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)