如何通过Shell脚本进入Python虚拟环境?解决activate不生效问题
问题原因
Shell脚本默认在子进程中运行,source .venv/bin/activate仅会激活子进程内的虚拟环境,脚本执行结束后子进程退出,当前终端的父Shell不会继承该环境变更。不过你脚本里的pip install其实原本就会在子进程的虚拟环境中执行,若你发现依赖装到了本地环境,大概率是混淆了脚本内的执行环境与终端当前环境,或是后续手动用本地pip重复安装了依赖。
解决方案
方案1:让脚本在当前Shell进程中执行
不要直接用./script.sh运行脚本,改用source或.命令执行,这样脚本会在当前终端的Shell进程中运行,环境变更会直接作用于你的终端:
source ./你的脚本名.sh # 或者简写为 . ./你的脚本名.sh
执行后,你的终端会直接处于虚拟环境中,后续操作都将使用该环境的Python和pip。
方案2:直接调用虚拟环境的pip(无需激活)
如果只需要创建环境并安装依赖,不需要改变当前终端的环境,可以跳过激活步骤,直接指定虚拟环境内的pip路径来安装依赖:
修改后的脚本如下:
#!/bin/bash red=$(printf '\033[31m') reset=$(printf '\033[0m') rm -rf .venv python3 -m venv .venv echo '*' > .venv/.gitignore if [ -f "requirements.txt" ] then .venv/bin/pip install -r requirements.txt fi echo $red"Virtual Environment Created"$reset
这种方式能确保依赖被安装到.venv目录下,之后若需要激活虚拟环境,手动执行source .venv/bin/activate即可。
内容的提问来源于stack exchange,提问作者vs07
相关产品推荐
相关产品推荐

