Mac下执行virtualenv创建虚拟环境报无此文件或目录错误如何解决
故障根因
报错核心是/usr/local/bin/路径下的旧virtualenv启动脚本,硬编码的解释器路径指向了已被移除的/usr/bin/python:MacOS 10.15及以上版本默认删除了系统自带的Python 2,该路径下默认无Python可执行文件,旧版virtualenv安装时绑定了Python 2路径,就会触发bad interpreter报错。
执行pip3 install virtualenv提示依赖已满足,是因为Python3环境的第三方包目录里已经安装了virtualenv,但路径优先级更高的旧版(绑定Python2的)可执行脚本没有被替换,终端优先读取到了损坏的旧脚本。
排查步骤
- 执行
which -a virtualenv查看所有virtualenv可执行文件的路径,排在首位的一般就是/usr/local/bin/virtualenv这个损坏的旧脚本 - 执行
which python3确认当前系统可用的Python3路径:M系列芯片Mac通过Homebrew安装的Python3一般在/opt/homebrew/bin/python3,Intel芯片Mac的Homebrew路径为/usr/local/bin/python3,系统自带Python3路径为/usr/bin/python3 - 执行
pip3 show virtualenv查看Python3环境下virtualenv包的实际安装位置,确认包本身安装正常
修复方案
方案1:删除损坏脚本后强制重装(推荐,一劳永逸)
- 先移除损坏的旧脚本:
sudo rm /usr/local/bin/virtualenv - 强制重装virtualenv,自动生成绑定Python3的正确可执行文件:
pip3 install --force-reinstall virtualenv - 清空bash命令缓存避免读取旧路径:
hash -r - 验证修复:执行
virtualenv --version正常返回版本号后,即可正常执行virtualenv 虚拟环境名创建新环境,原有可正常运行的旧项目虚拟环境不受任何影响。
方案2:修改旧脚本的解释器路径(快速修复,无需重装)
- 编辑损坏的virtualenv脚本:
sudo vi /usr/local/bin/virtualenv - 将脚本第一行的shebang配置从
#!/usr/bin/python修改为你实际查询到的Python3绝对路径,比如系统自带Python3就改为#!/usr/bin/python3 - 保存退出后给脚本添加执行权限:
sudo chmod +x /usr/local/bin/virtualenv - 执行
hash -r清空命令缓存即可正常使用。
方案3:绕开损坏脚本直接调用Python模块
如果不想修改系统路径下的文件,创建虚拟环境时直接通过Python模块方式调用virtualenv即可,命令为:python3 -m virtualenv 你的虚拟环境名称
该方式会直接调用当前Python3环境中安装的virtualenv包,完全跳过/usr/local/bin下的损坏脚本,对现有环境无任何改动。
注意:所有修复操作都不会影响之前已经创建好、可以正常运行的virtualenv虚拟环境,旧环境的依赖和配置都是独立存储的,不会被改动。
内容的提问来源于stack exchange,提问作者Md. Parvez Alam
相关产品推荐
相关产品推荐

