Django入门虚拟环境设置问题求解:多Python3路径、virtualenvwrapper报错及工具差异
Django学习初期虚拟环境配置问题解答
1. 系统存在多路径Python3的原因
你通过which -a python3查到的三个Python3路径,对应不同安装渠道的解释器,共存是macOS系统的正常状态,不存在路径冲突:
/usr/bin/python3:macOS系统自带的原生Python3,属于系统级组件,供系统内部脚本调用,不建议手动修改或删除这个路径下的文件。/usr/local/bin/python3:Homebrew等系统包管理器安装Python时生成的软链接入口,会指向包管理器实际安装的Python解释器位置,属于用户级安装的程序软链。/Library/Frameworks/Python.framework/Versions/3.8/bin/python3:你从Python官网下载安装包手动安装的Python3.8.1的实际可执行路径,当前你安装的virtualenv工具就挂在这个Python版本的site-packages目录下。
因为终端PATH环境变量包含了上述三个路径的搜索范围,所以执行which -a python3就能扫描到所有匹配的Python3可执行文件。
2. virtualenvwrapper命令找不到的成因与解决方法
核心成因
virtualenv和virtualenvwrapper是两类不同定位的工具:virtualenv是独立的可执行程序,安装完成后会直接把可执行文件放到Python的bin目录下,终端可以直接识别调用;但virtualenvwrapper本质是一组Shell封装函数,不是独立的可执行程序,pip安装完成后只会把对应的Shell脚本放到site-packages目录下,不会自动加载到你的终端Shell环境中,因此直接执行mkvirtualenv时会提示命令不存在。
需要明确的是,执行virtualenvwrapper --version本身就是错误的调用方式,这个工具没有独立的可执行命令,哪怕配置完成后,敲这个指令也无法正常输出版本信息,属于工具设计的固有特性,不是配置失误。
解决步骤
- 先创建统一存放所有虚拟环境的全局目录,一般默认放在用户目录下:执行
mkdir -p ~/.virtualenvs - 确认virtualenvwrapper的Shell脚本实际路径,一般和你安装的Python同目录,即
/Library/Frameworks/Python.framework/Versions/3.8/bin/virtualenvwrapper.sh,可以通过find /Library/Frameworks/Python.framework -name "virtualenvwrapper.sh"指令确认。 - 编辑终端对应的配置文件:用Bash shell就修改
~/.bash_profile,用Zsh shell就修改~/.zshrc,在文件末尾追加以下配置:# 配置所有虚拟环境的统一存放路径 export WORKON_HOME=~/.virtualenvs # 指定virtualenvwrapper调用的Python解释器路径,避免多版本Python冲突 export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 # 加载virtualenvwrapper的Shell函数 source /Library/Frameworks/Python.framework/Versions/3.8/bin/virtualenvwrapper.sh - 保存配置文件后,执行对应的source指令让配置生效(Bash执行
source ~/.bash_profile,Zsh执行source ~/.zshrc),之后再执行mkvirtualenv就可以正常使用了。
3. virtualenv test与mkvirtualenv test的核心差异
两个指令的底层能力是打通的,但使用体验和运行逻辑有明显区别:
- 工具本质差异:
virtualenv是独立的Python可执行工具,自身完成虚拟环境的创建全流程;mkvirtualenv是virtualenvwrapper提供的Shell函数,本质是对原生virtualenv命令的上层封装,底层依然会调用virtualenv的能力完成环境创建。 - 存放位置差异:直接执行
virtualenv test时,会在你当前所在的工作目录下生成名为test的文件夹,虚拟环境的所有文件都存在这个本地目录下,环境路径完全取决于你执行命令时的所在位置。而mkvirtualenv test创建的环境,会统一存放在之前配置的WORKON_HOME指定的全局目录下,不管你在哪个文件夹敲命令,环境的存放位置都是固定的全局路径。 - 操作便捷性差异:用原生
virtualenv创建的环境,激活时需要手动切换到对应环境的bin目录下,执行source ./activate才能进入虚拟环境,跨目录查找环境、切换环境的成本很高。而用mkvirtualenv创建的环境,不需要记忆具体存放路径,在任意目录下执行workon 环境名就能直接激活,配套的快捷命令还可以快速列出所有已创建的环境、删除指定环境,不需要手动遍历文件夹查找。
内容的提问来源于stack exchange,提问作者kd12345
相关产品推荐
相关产品推荐

