Mac Catalina切换zsh后mkvirtualenv无法创建虚拟环境且版本异常
你的核心问题在于virtualenvwrapper的安装版本与你指定的Python版本不匹配,再加上配置细节的小疏漏,导致环境创建路径错误、Python版本不生效。下面一步步帮你排查修复:
1. 先理清pip与Python版本的关联
你之前用pip install安装的virtualenvwrapper,大概率关联到了Python3(Catalina中默认pip可能指向pip3)。这就导致即使你在.zshrc里指定了VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7,实际执行创建环境的virtualenv命令还是Python3版本的,自然会用Python3来生成环境。
先确认这个关键点:
# 查看当前pip关联的Python版本 pip --version # 查看Python2.7对应的pip版本 pip2 --version
如果pip --version显示的是Python3.x,那就是这个问题导致的。
2. 用Python2.7的pip重新安装依赖
先彻底卸载现有包,再用Python2.7专属的pip重新安装:
# 卸载现有virtualenv和virtualenvwrapper pip uninstall -y virtualenv virtualenvwrapper # 用Python2.7的pip安装对应版本 pip2 install virtualenv virtualenvwrapper
3. 修正.zshrc的配置细节
之前的配置有两个潜在问题:
source \which virtualenvwrapper.sh`可能会指向Python3版本的脚本,因为which`会优先找PATH里的第一个匹配项;- 要确保WORKON_HOME的路径没有多余符号(你提到的双斜杠问题,虽然配置里写法正确,但要避免拼写错误)。
修改.zshrc的配置为:
# 指定virtualenvwrapper使用的Python解释器为2.7 export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7 # 指定虚拟环境存放目录,确保路径无错误 export WORKON_HOME="$HOME/.virtualenvs" # 直接指定Python2.7对应的virtualenvwrapper.sh路径(避免which的歧义) # 若不知道路径,可执行`pip2 show virtualenvwrapper`找到Location字段,再拼接/bin/virtualenvwrapper.sh source /usr/local/bin/virtualenvwrapper.sh
4. 清理错误的环境结构并重新加载配置
之前创建的testenv被错误地放在了~/.virtualenvs/bin下(正常应该是每个环境单独占一个子目录),先删除这个错误结构:
rm -rf ~/.virtualenvs/bin
然后重新加载配置:
source ~/.zshrc
5. 验证修复效果
现在创建测试环境:
mkvirtualenv testenv
执行后应该会显示使用Python2.7的前缀,环境会被正确创建在~/.virtualenvs/testenv目录下。
验证步骤:
- 执行
lsvirtualenv应该能看到testenv; - 进入环境:
workon testenv,然后执行python --version,应该显示Python 2.7.x。
关于bash下同样的问题
你切换到bash也出现相同问题,是因为bash的配置文件(.bashrc或.bash_profile)里可能也用了Python3版本的virtualenvwrapper。你可以把上述配置同步到bash的配置文件中,确保bash也使用Python2.7版本的工具链。
内容的提问来源于stack exchange,提问作者Alesi Rowland

