在Vagrant环境执行mkvirtualenv提示“command not found”的求助
解决Vagrant环境中
mkvirtualenv: command not found的问题 看起来你在Vagrant上搭建Django项目时碰到了virtualenvwrapper命令找不到的坑,我来帮你一步步排查解决:
先看看你遇到的具体错误
vagrant@ubuntu-xenial:~$ mkvirtualenv profiles_api --python=python3 mkvirtualenv: command not found
问题根源分析
从你提供的Vagrant配置来看,主要有两个核心问题:
- 用户环境不匹配:你当前登录的是
vagrant用户,但配置里修改的是/home/ubuntu/.bashrc——这两个用户的环境配置是完全独立的,所以virtualenvwrapper的初始化代码根本没加载到你的当前会话里。 - 安装方式和路径问题:用
sudo pip安装可能会把包放到root的环境中,而非vagrant用户的环境;另外,你要创建Python3的虚拟环境,最好用pip3来安装对应版本的virtualenvwrapper,避免和Python2的pip混淆。
解决方案
步骤1:修正Vagrantfile配置
把你原来的Vagrant配置里的/home/ubuntu/.bashrc全部替换成/home/vagrant/.bashrc,同时改用pip3安装,调整后的代码如下:
sudo pip3 install virtualenvwrapper if ! grep -q VIRTUALENV_ALREADY_ADDED /home/vagrant/.bashrc; then echo "# VIRTUALENV_ALREADY_ADDED" >> /home/vagrant/.bashrc echo "WORKON_HOME=~/.virtualenvs" >> /home/vagrant/.bashrc echo "PROJECT_HOME=/vagrant" >> /home/vagrant/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> /home/vagrant/.bashrc fi
步骤2:重新加载Vagrant环境
你可以选择销毁并重建虚拟机(最彻底的方式):
vagrant destroy -f vagrant up
如果不想销毁现有机器,也可以手动登录进去补全配置:
vagrant ssh # 先确保安装了对应版本的virtualenvwrapper sudo pip3 install virtualenvwrapper # 把配置写入当前用户的bashrc echo "# VIRTUALENV_ALREADY_ADDED" >> ~/.bashrc echo "WORKON_HOME=~/.virtualenvs" >> ~/.bashrc echo "PROJECT_HOME=/vagrant" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc # 立刻加载配置 source ~/.bashrc
步骤3:验证配置是否生效
执行以下命令检查命令是否可用:
which mkvirtualenv
如果返回类似/usr/local/bin/mkvirtualenv的路径,说明配置成功,现在可以正常创建虚拟环境了:
mkvirtualenv profiles_api --python=python3
额外注意事项
- 如果找不到
virtualenvwrapper.sh的路径,可以用find / -name virtualenvwrapper.sh命令定位它的实际位置,然后替换配置里的source路径。 - 尽量避免用
sudo安装用户级别的Python包,除非必要。如果用pip3 install --user virtualenvwrapper安装,记得在bashrc里添加export PATH=$HOME/.local/bin:$PATH,确保命令能被找到。
内容的提问来源于stack exchange,提问作者Ayan kashyap




