python3.8建立虚拟环境,以及虚拟环境的理解

参考自解决ubuntu16.04 无法使用python 建立虚拟环境(venv或virtualenv)的问题

        使用python3.8解释器,调用venv模块建立虚拟环境

        前提是安装了python3.8,如果调用"python3.8 -m venv name_venv"出错提示"Error: Command '['/home/haypin/PycharmProjects/learning_log/venv_3.8/bin/python3.8', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.",则可能是安装python3.8时没有安装匹配版本的venv包,sudo apt install python3.8-venv安装python3.8的venv包就好了,然后使用使用python3.8解释器调用venv模块建立虚拟环境的命令是python3.8 -m venv name_venv,

python3.8建立虚拟环境,以及虚拟环境的理解_第1张图片

        关于虚拟环境,其实虚拟环境中提供的python命令与python3命令的可执行文件都是指向建立该虚拟环境时使用的python解释器的可执行文件的软链接,如下图我用python3.8 -m venv venv_3.8建立的虚拟环境venv_3.8分别提供了指向/usr/bin/python3.8的软链接pythonpython3,所以虚拟环境的意义还是为使用该虚拟环境的项目提供独立的包,也就是独立的环境,而不是将包下载安装到python解释器安装时的包目录(~/.local/lib/python3.6/site-packages/),那样就不符合为项目所在目录封装独立的环境了。

python3.8建立虚拟环境,以及虚拟环境的理解_第2张图片

        虚拟环境直接提供了pip包管理器的可执行文件,从而可以像"pip3 install requests"这样直接执行执行pip3而不用"python3.8 -m pip install package_hame"这样的长命令。

补充1:

在python×.×解释器程序的man手册中介绍了"python3.8 -m module-name argutuments"——运行指定模块的main函数并提供参数的用法,提到"python解释器程序将从sys.path中查找命名的模块,并像一个脚本一样运行对应的.py文件",说明sys.path指示python解释器程序导包的路径。

关于"虚拟环境为使用该虚拟的项目提供独立的包",有更直观的体现就是虚拟环境中运行python解释器程序与不在虚拟环境中运行解释器程序时的导包路径变量sys.path发生了改变:

python3.8建立虚拟环境,以及虚拟环境的理解_第3张图片

在进入由python3.8解释器程序建立的虚拟环境venv_3.8后,将导包路径sys.path中'/usr/local/lib/python3.8/dist-packages'与'/usr/lib/python3/dist-packages'替换成了虚拟环境的包目录的'/home/haypin/PycharmProjects/learning_log/venv_3.8/lib/python3.8/site-packages',这至少说明了虚拟环境中的项目将从其*/venv/lib/python×.×/site-packages包目录中导包。

补充2:

另外,虚拟环境下可执行文件的搜索路径$PATH最前面的目录也相应地修改为*/venv/bin/了,将首先查找虚拟环境的命令:

python3.8建立虚拟环境,以及虚拟环境的理解_第4张图片

你可能感兴趣的:(Python)