Git Bash中Django项目setup.sh脚本依赖安装至全局环境问题
Django项目setup.sh脚本依赖安装到全局环境的修复方案
问题情况
在Windows机器上用Git Bash运行项目根目录的setup.sh脚本时,发现依赖都被安装到了全局Python环境,venv目录里没有对应的包,安装时提示Requirement already satisfied,最终因依赖冲突失败。但手动执行相同步骤一切正常。
错误原因
你的脚本有两个关键问题:
- 虚拟环境激活命令拼写错误:脚本里写的是
source ./venv/Scripts/active,正确的命令应该是source ./venv/Scripts/activate(少了末尾的t),导致虚拟环境根本没激活,后续的pip和python命令还是用的全局环境。 - 全局环境提前执行pip操作:在创建虚拟环境前就运行了
pip install --upgrade pip和pip install virtualenv,这两步会直接修改全局Python环境,而且Windows系统自带venv模块,不需要额外安装virtualenv。
修复后的setup.sh脚本
setupBackend() { echo "--------------------------- 创建虚拟环境 ----------------------" # 使用Python自带的venv创建虚拟环境,无需额外安装virtualenv python -m venv venv # 激活虚拟环境(Git Bash下Windows的正确路径) if source ./venv/Scripts/activate; then echo "虚拟环境激活成功" else echo "虚拟环境激活失败,请检查路径" exit 1 fi echo "----------------------- 升级pip并安装依赖 ------------------------------" # 使用虚拟环境内的pip升级自身 python -m pip install --upgrade pip # 安装项目依赖 python -m pip install -r requirements.txt echo "----------------------- 启动Django服务器 -------------------------" python ./kudelasz/manage.py runserver } # 执行函数 setupBackend
额外优化建议
- 移除requirements.txt中的virtualenv:这个包是用来创建虚拟环境的,不需要作为项目依赖安装到虚拟环境里,从你的依赖列表中删掉
virtualenv==20.23.1。 - 检查虚拟环境是否已存在:可以在创建前加判断,避免重复创建:
if [ -d "venv" ]; then echo "虚拟环境已存在,直接激活" else python -m venv venv fi - 使用python -m pip代替pip:这样能确保调用的是当前激活虚拟环境中的pip,避免全局pip干扰。
内容的提问来源于stack exchange,提问作者domjanzsoo
相关产品推荐
相关产品推荐

