如何在Windows下编写bat脚本,双击激活Python venv环境并执行Python脚本

windows 的 bat 脚本一窍不通。
如何在Windows下编写bat脚本,双击激活Python venv环境并执行Python脚本

21 回复

打包成单文件 exe


在Windows下写个bat脚本来激活venv并跑Python脚本,这事儿挺常见的。我一般这么干:

首先,确保你的项目结构是这样的:

my_project/
├── venv/
├── script.py
└── run.bat

run.bat脚本可以这样写:

@echo off
REM 进入脚本所在目录
cd /d "%~dp0"

REM 检查venv目录是否存在
if not exist "venv\Scripts\activate.bat" (
    echo Virtual environment not found!
    pause
    exit /b 1
)

REM 激活虚拟环境
call venv\Scripts\activate.bat

REM 执行Python脚本
python script.py

REM 执行完成后暂停(可选)
pause

关键点说明:

  1. cd /d "%~dp0" 确保脚本在正确目录运行
  2. call命令用来激活venv,这样环境变量才会生效
  3. 激活后直接运行python命令,venv会自动使用虚拟环境中的Python解释器

如果想让脚本更健壮点,可以加些检查:

@echo off
cd /d "%~dp0"

if not exist "venv\Scripts\activate.bat" (
    echo Error: venv not found. Run 'python -m venv venv' first.
    pause
    exit /b 1
)

if not exist "script.py" (
    echo Error: script.py not found.
    pause
    exit /b 1
)

call venv\Scripts\activate.bat
python script.py
pause

这样双击bat文件就能自动激活环境并运行脚本了。

总结:bat脚本里用call激活venv再执行python命令就行。

我写的辣鸡 powershell:
if (Test-Path “.\venv\Scripts\activate”) {
.\venv\Scripts\activate.ps1
}
(:з)∠)

这算伸手贴吗?麻烦楼下告知

不晓得。标题太长不看

实在是连搜索都不知道怎么搜索

直接这样就可以吗? 我本来想测试一下写了
…\venv\Scripts\activate.bat
pip list
pause
然后直接双击
结果 pause 都没有成功窗口就关掉了。
虽然知道可以再 cmd 里面执行,不过没有这样操作就放弃了

没想到这个方案,来试一下。

可以写 powershell 脚本.ps1 ,能导入模块,基于.net ,接口丰富

把 python 脚本拖到 开始菜单->程序->启动

试试看

不行的话,打开记事本,python c:\user\xxxxxx (你放 python 脚本的路径)xxxxx<a target="_blank" href=“http://myPyScript.py” rel=“nofollow noopener”>myPyScript.py ,另存为 xxx.bat ,然后拖到启动里面去。

这是什么操作?这不是开机启动吗?看来我的描述很有问题啊没把问题说清楚。

谢谢,看看能不能找到相关的信息测试一下,至少在 powershell 下执行 activite 不会直接给我开一个新窗口,可能比较容易点。

用 powershell 一下子就搞定了。。。可以了溜了溜了。

是要,给那种对编程一窍不通的同事,一个一键运行 python 的方案么?

@ LemonFirst

問題出在你的第一行
…\venv\Scripts\activate.bat
這是另一個 bat 檔, 所以要加上 call
call …\venv\Scripts\activate.bat
這樣應該就解決了

我直接就是 pythonw /aaa.py ,双击运行,还可以加 input,也写过用 vbs 调用,好处是没有任何图形界面,不像 cmd 还要闪一下

我一般是写一个 PowerShell 脚本,然后写一个 batch 启动 PowerShell 脚本(这样可以保持 AllSigned 的执行策略)

#6 你需要 CALL 内部命令,比如

CALL path/to/another/batch.bat

否则控制权永远不会返回当前 batch

# 13 不是。自己想偷懒而已。。。

#14 虽然用 powershell 解决了,但是还是感谢解答。 这样可以以此去了解 bat 的流程,增长见识,不然本来都不知道从何下手。感谢

#17 感谢。

回到顶部