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,
**虚拟环境后可以使用pip3为当前虚拟环境的python3.8解释器下载安装包了:
其实下载的requsts包是首先下载一份到pip3默认的下载目录~/.local/lib/python3.6/site-packages/,然后才拷贝到虚拟环境的目录;
关于虚拟环境,其实虚拟环境中提供的python命令与python3命令的可执行文件都是指向建立该虚拟环境时使用的python解释器的可执行文件的软链接,如下图我用python3.8 -m venv venv_3.8建立的虚拟环境venv_3.8分别提供了指向/usr/bin/python3.8的软链接python和python3,所以虚拟环境的意义还是为使用该虚拟环境的项目提供独立的包,也就是独立的环境,而不是将包下载安装到python解释器安装时的包目录(~/.local/lib/python3.6/site-packages/),那样就不符合为项目所在目录封装独立的环境了。
20200626补充:
在python×.×解释器程序的man手册中介绍了"python3.8 -m module-name argutuments"——运行指定模块的main函数并提供参数的用法,提到"python解释器程序将从sys.path中查找命名的模块,并像一个脚本一样运行对应的.py文件",说明sys.path指示python解释器程序导包的路径。
关于"虚拟环境为使用该虚拟的项目提供独立的包",有更直观的体现就是虚拟环境中运行python解释器程序与不在虚拟环境中运行解释器程序时的导包路径变量sys.path发生了改变:
在进入由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包目录中导包。