BAT 文件在激活 kivy 脚本时自行终止
Posted
技术标签:
【中文标题】BAT 文件在激活 kivy 脚本时自行终止【英文标题】:BAT file terminates itself when activating a kivy script 【发布时间】:2021-12-15 20:16:40 【问题描述】:我正在运行我自己的应用程序,它在 Windows 上的 Python 上使用 Kivy。每次使用该应用程序时,我都需要在运行该应用程序之前激活 kivy venv 脚本,我发现这很麻烦,所以我创建了一个批处理文件来配合它:
@echo off
python -m virtualenv kivy_venv
kivy_venv\Scripts\activate
python myapp.py
pause
问题是,批处理文件在 kivy_venv\Scripts\activate 之后立即终止,我很确定这些是我在命令提示符中键入的行以使其正常工作,那么那里出了什么问题?
E:我看到 cmets 在激活行之前使用 call
,但它似乎产生了同样的问题,所以我怀疑 Kivy 的 activate.bat 文件本身可能存在问题:
@echo off
set "VIRTUAL_ENV=C:\......\kivy_venv"
if defined _OLD_VIRTUAL_PROMPT (
set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
if not defined PROMPT (
set "PROMPT=$P$G"
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
)
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
set "ENV_PROMPT="
if NOT DEFINED ENV_PROMPT (
for %%d in ("%VIRTUAL_ENV%") do set "ENV_PROMPT=(%%~nxd) "
)
set "PROMPT=%ENV_PROMPT%%PROMPT%"
)
REM Don't use () to avoid problems with them in %PATH%
if defined _OLD_VIRTUAL_PYTHONHOME goto ENDIFVHOME
set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
:ENDIFVHOME
set PYTHONHOME=
REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2
set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"
【问题讨论】:
这在本网站的 [python] [batch-file] 标记页面中已多次提及。使用call kivy_venv\Scripts\activate
,而不是kivy_venv\Scripts\activate
。
我试过了,但还是出现了同样的问题。
【参考方案1】:
找出导致问题的原因:显然我一直在调用错误的kivy_venv
。
所以我的 app 文件夹中有一个 kivy_venv
,但我还发现 C:\Userskivy_venv
文件夹,所以我转而调用它,瞧,它起作用了!原来这就是我的应用一直在使用的 venv!
改变了
kivy_venv\Scripts\activate
到
call C:\Users\<myusername>\kivy_venv\Scripts\activate
感谢所有提供帮助的人,但事后看来,我真的应该亲眼看到这个!
【讨论】:
以上是关于BAT 文件在激活 kivy 脚本时自行终止的主要内容,如果未能解决你的问题,请参考以下文章
.bat 脚本在执行 AWS Auto Scaling 命令之前终止