从网上搜集的资料整理的,如有错误,敬请指正。
首先我做了如下这个图,大致解释了各个选项及其之后的分支都是什么意思,详细部分请看下文
背景知识
-
什么是python解释器?
-
是一个程序,将python代码转换为计算机能理解的机器语言,使得计算机能够运行这些代码
-
在系统中安装python后,python解释器的路径如下: "E:\software\code software\python\pythonSetup\python.exe"(划下划线的部分每个人的安装路径不同)
-
-
-
该python解释器对应的全局软件包的文件夹的路径为:
"E:\software\code software\python\pythonSetup\Lib\site-packages" 里面存放了系统python所安装的一些包。
此时的python解释器是系统解释器,因为直接安装在系统中,如果为项目创建了虚拟环境后,虚拟环境中也存在解释器。比如项目“chipnetwork”中虚拟环境的解释器路径为: "E:\data\code\python project\chipNetwork\venv\Scripts\python.exe"
-
-
为什么要创建虚拟环境?
-
通常我们使用python要创建多个项目以解决不同的问题,比如项目1用于图像处理、项目2用于语音识别等,而各个项目所需要使用的python版本和所依赖的软件包不同,项目1可能会需要python3.6, pandas2.0 而项目2可能会需要 python3.7, pandas2.2 。如果两个项目都使用系统安装的解释器和系统中的全局依赖包,那么应该用每次要换一个项目的时候,依赖包都需要卸载重新安装相对应的版本,这样太过麻烦,不好管理。
-
所以就需要为每个项目创建一个虚拟环境,各个虚拟环境相互隔离,你装你的包,我装我的包,互不影响,便于管理,提高效率,比如为项目1创建一个环境1,为项目2创建一个环境2,自己装自己的包。
-
-
如何创建虚拟环境?
-
虚拟环境与依赖包的管理较为麻烦,所以一些环境管理工具和包管理工具应运而生,环境管理工具有venv, virtualenv, conda(同时是包管理工具), Pipenv, Poetry等,用于创建与管理虚拟环境。
-
为某项目创建一个虚拟环境后,该项目文件夹中会出现一个.venv文件夹,代表该项目的虚拟环境,.venv文件夹中包含该虚拟环境的解释器和一些依赖包。(一般都是基于系统解释器(安装在系统中的python)为某个项目创建一个新的虚拟环境,这个过程简单来说就是将安装在系统中的python.exe复制一份到项目的.venv\Script文件夹中,并创建一些其他必要的文件)
-
-
下图是分别基于系统python解释器创建两个项目的示意图,后文会有详细解释:
-
-
.venv\Lib\site-packages文件夹中存放的是依赖包,一般刚创建的新环境只有两三个依赖包,除非选择继承系统解释器的全局依赖包
-
".venv\Scripts\python.exe"路径下是该虚拟环境的python解释器
-
-
在pycharm中创建新项目时可以为项目创建一个虚拟环境,如下图
-
-
Pycharm中创建新项目时,选择解释器的一些选项是什么意思?
下图展示了在选择解释器的时候的一些选项分支和大致解释:
Project venv
- 根据选择的python基础解释器,在当前项目文件夹快速创建一个新的、不包含其他依赖包的虚拟环境(.venv)
Base conda
- Pycharm将conda base环境配置为项目解释器
Custom environment
-
Genrate new
-
用virtualenv基于python解释器新建一个虚拟环境,
-
选择python解释器,可以是系统的,也可以是其他项目的.venv中的
-
选择Location,为该项目的.venv文件夹存放路径
-
inherit packages from base interpreter:是否继承全局软件包,勾选后,如果选择的解释器是系统解释器,则会继承解释器“site-packages”文件夹下的全局软件包。
-
Make available to all projects:勾选后,在选择existing environment或者设置中配置解释器的时候会显示出该项目虚拟环境的路径,要不得自己去找路径。(勾不勾选该环境都可以被其他项目所使用,就是勾选后会显示路径)
-
其他三个环境(包)管理工具conda, Pipenv, Poetry,其他三选项是分别使用这三个工具创建环境,virtualenv也是一个环境管理工具,一般小项目用virtualenv即可
-
-
select existing
-
选择已经存在的环境,在当前项目中不会新建.venv文件,与其他项目共享一个环境(包括解释器和软件包)
-
python:选择已经存在的python环境,比如其他项目中的python环境
-
conda:已经存在的conda环境
-
项目创建示意图如下图所示:
上图的解释:项目1
项目1基于系统python解释器创建一个新的环境,会在项目1中新建一个.venv文件夹,并将系统python解释器复制到项目1中,如果创建时勾选了inherit packages from base interpreter,则也会复制系统解释器的一些全局依赖包。
项目2
项目2同样基于系统python解释器创建一个新的环境,创建完成后,项目2可以在自己的虚拟环境中按需安装自己需要的包,并不会影响到其他项目。
项目3
项目3创建时选择existing env 然后选择 python ,选择系统解释器,这时候项目3会直接使用系统解释器的环境和相应的依赖包,并不会在项目文件夹下新建.venv文件夹且复制解释器。项目3对依赖包的更改就是对系统解释器的依赖包的更改。
项目4
项目4创建时选择existing env 然后选择项目2的环境,这时项目4会直接使用项目2的环境,也不会在项目文件夹下新建.venv文件夹且复制解释器。项目4对依赖包的更改就是对项目2的依赖包的更改。
未完待续......
参考资料
【Python】环境管理 venv、pipenv、conda、poetry 对比_pipenv和conda区别-CSDN博客
Pycharm 中 virtualenv、pipenv、conda 虚拟环境的用法_pycharm virtualenv和conda-CSDN博客
一文解读 virtualenv & venv & pipenv 之间的联系与区别I'm George的博客-CSDN博客pipenv virtualenv
Python环境管理大比拼:pip、Conda、Pyenv、Rye、Virtualenv、PDM、Poetry等工具_python哪个虚拟环境工具好用-CSDN博客
全网最最最详细的virtualenv的使用命令详解_virtualenv命令-CSDN博客
pycharm中 Make available to all projects的含义-CSDN博客
关于勾选“Make availabel to all projects”-慕课网
An unbiased evaluation of environment management and packaging tools