Vagrant搭建的Ubuntu中mkvirtualenv命令未找到问题求助
mkvirtualenv: command not found的问题 看起来你遇到的核心问题是virtualenvwrapper的环境配置没有被正确加载,结合你的Vagrant配置和操作流程,我整理了几个可能的原因和对应的解决方案:
原因1:.bashrc的配置未自动生效
你的Vagrant provision脚本已经把virtualenvwrapper的配置写入了/home/ubuntu/.bashrc,但vagrant ssh进入虚拟机时,新的shell会话还没读取到更新后的.bashrc(因为.bashrc是在shell启动时加载的,而provision是在虚拟机启动过程中执行的)。
快速解决:
先手动加载.bashrc的配置,再尝试创建虚拟环境:
source ~/.bashrc mkvirtualenv bugs --python=python3
如果这时候命令能正常运行,说明只是配置没自动加载,后续重新ssh登录就会自动生效了。
原因2:virtualenvwrapper可能安装失败
你的provision脚本用的是python-pip(对应Python 2的pip)来安装virtualenvwrapper,有可能安装过程中出现依赖问题导致安装不完整。
排查与修复:
- 先检查virtualenvwrapper是否安装成功:
pip list | grep virtualenvwrapper
如果没有输出,说明安装失败了,建议改用Python 3的pip来安装(更贴合你创建Python 3虚拟环境的需求):
# 安装Python 3的pip sudo apt-get update && sudo apt-get install -y python3-pip # 用pip3安装virtualenvwrapper sudo pip3 install virtualenvwrapper
- 确认
virtualenvwrapper.sh的路径是否正确:
ls /usr/local/bin/virtualenvwrapper.sh
如果路径不对,需要修改~/.bashrc里的source行,指向正确的路径(比如pip3安装到~/.local/bin的话,就改成source ~/.local/bin/virtualenvwrapper.sh)。
原因3:WORKON_HOME目录存在权限或缺失问题
你配置了WORKON_HOME=~/.virtualenvs,但如果这个目录不存在或者权限不属于ubuntu用户,virtualenvwrapper也无法正常工作。
修复办法:
手动创建目录并设置正确权限:
mkdir -p ~/.virtualenvs chown ubuntu:ubuntu ~/.virtualenvs
额外优化:调整Vagrant Provision脚本
为了避免后续再出现类似问题,可以优化你的provision脚本:
- 改用Python 3的pip安装virtualenvwrapper,确保和目标Python版本匹配;
- 提前创建虚拟环境目录并设置权限;
- 写入.bashrc后手动加载配置,确保provision后立即生效。
修改后的脚本片段参考:
sudo apt-get update sudo apt-get -y upgrade sudo locale-gen en_GB.UTF-8 # 安装Python 3相关依赖和pip3 sudo apt-get install -y python3-dev sqlite python3-pip sudo pip3 install --upgrade pip sudo pip3 install virtualenvwrapper # 提前创建虚拟环境目录并设置权限 mkdir -p /home/ubuntu/.virtualenvs chown ubuntu:ubuntu /home/ubuntu/.virtualenvs if ! grep -q VIRTUALENV_ALREADY_ADDED /home/ubuntu/.bashrc; then echo "# VIRTUALENV_ALREADY_ADDED" >> /home/ubuntu/.bashrc echo "WORKON_HOME=~/.virtualenvs" >> /home/ubuntu/.bashrc echo "PROJECT_HOME=/vagrant" >> /home/ubuntu/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> /home/ubuntu/.bashrc fi # 手动加载配置,确保provision后立即生效 source /home/ubuntu/.bashrc
内容的提问来源于stack exchange,提问作者kmb

