1.为什么要创建虚拟环境?刚接触虚拟环境时,我的第一感觉就是抗拒。相信一开始被各种配置折磨的朋友都能看懂。想知道是否可以使用虚拟环境,于是查看了推荐使用虚拟环境的理由:(1)将所有项目库放在一个地方,既混乱又多余。毕竟不是所有的项目都需要那么多(我根本不在乎这个,少一步配置就免得你被折磨一次)(2)因为下班后就是分工协作。这个项目可以在你的电脑上运行,但是如果涉及到别人,如果你不安装相应的库是无法运行的,所以需要大家可以在库上同步(是库同步,可以手动整理一个库列表,省去一步配置也是费劲)(3)同一个库,不同项目版本要求不同。如果项目A需要一个库的低版本,而项目B需要同一个库的高版本,运行项目B升级库覆盖之前的版本会导致项目A无法运行(这是一个比较充分的原因,好像还得配置虚拟环境)2.配置虚拟环境(windows)以下虚拟变量只针对python3,python2已经过时了。使用Virtualenv配置虚拟环境。只需找到一个目录并创建一个新文件夹即可。在此文件夹中打开命令提示符并输入以下命令:python-mvenv创建了venv虚拟环境。注意点:有的命令会说python3-mvenvvenv,其实第一个python或者python3就是在命令行运行python的命令,前提是你的python加入了系统环境变量。所以你需要在命令行上尝试一下。比如我用python和py-3可以正常使用pythonshell,所以我可以用python-mvenvvenvpy-3-mvenvvenv来创建虚拟环境。有人同时安装了python2.7和python3.7或者其他python3版本。如果默认python是2.7,那就用py-3-mvenvvenv。一定要试试,下面的pythonshell显示的是python3版本。因为venv是python3新的虚拟环境设置方法。我在D:\GitHub\gitwarehouse\test运行上面的命令后在这个文件夹下创建了一个venv文件夹,所以这个命令行的最后一个venv可以自定义,比如python-mvenvhello然后在下面创建一个hello文件夹test文件夹,文件夹里面是解释器和需要的库文件夹。如果你使用python-mvenv。后面跟一个点,那么虚拟环境会在test文件夹下创建,而不是在test文件夹下新建一个文件夹来创建虚拟环境。激活虚拟环境:首先我们需要进入虚拟环境的Scripts文件夹,然后进入激活虚拟环境。虚拟环境前面会有一个括号标记。激活虚拟环境后,再使用pip安装包,就会安装到这个虚拟环境中。而不是系统环境。退出虚拟环境命令:deactivate,目录不要求是否为Scripts。但是激活的虚拟环境必须在Scripts环境中。复制或导出虚拟环境,在虚拟环境中输入:pipfreeze>requirements.txt注意,这个输入到哪个目录下,会在当前目录下生成requirements.txt文件,包括库和对应的版本号,并且每次运行生成一次的文件都会被覆盖。新建一个项目,创建并激活虚拟环境,将上面的requirements.txt文件复制到Scripts文件夹中,输入:pipinstall-rrequirements.txt然后将之前项目的库导入到本项目中。这样做的好处是大家使用同一个版本号的库,不会出现项目不兼容的情况。使用pipenv配置虚拟环境,我还是用目录D:\GitHub\gitwarehouse\test。对了,要删除虚拟环境,直接删除虚拟环境文件夹就可以了,比较方便。因为pipenv不包含在python中,所以我们需要先安装这个库,因为它经常被用来全局安装pipinstallpipenv在Linux或者macOS中全局安装sudopipinstallpipenv来创建一个虚拟环境pipenvinstall默认pipenv会管理所有虚拟环境。在Windows中,虚拟环境文件夹位于C:\Users\yourusernamefile.virtualenvs文件夹中。不记得目录也没关系。命令行会有提示,但是我不想把虚拟环境放到C盘。directory,如果想把虚拟环境放到工程文件夹下,有两种方法:在使用pipenvinstall之前在工程文件夹下创建一个.venv文件,然后运行pipenvinstall;另一种方法,先在命令行下配置环境变量PIPENV_VENV_IN_PROJECT=True,表示pipenv的虚拟环境在项目中,然后不可见的pipenvinstall创建环境变量,从而在项目文件夹下创建虚拟环境文件夹。虚拟环境跟随项目更方便。有个小插曲:看到上图中创建虚拟环境使用的解释器是anaconda的python3.7.6。我一直理解是通过系统变量中的python3版本创建的,因为我没有把anaconda的python3添加到环境变量中,遇到这种情况,查了一下原因,新建了一个文件夹,创建了一个虚拟环境,发现又回到了python3.8,也就是环境变量中加入的python,不是集成的anaconda中的python,我记起来是因为test文件夹刚刚尝试使用conda的虚拟环境出问题。所以,我的理解没有错。我仍然默认使用python3,它是系统变量中的版本。在当前文件夹下创建虚拟环境文件夹的同时,也创建了两个文件Pipfle和Pipfile.lock,用于管理依赖。功能等同于前面方法中的requirements.txt,但优点是不可手动维护,安装python库时会自动更新这两个文件。前者用于记录项目的依赖包列表,后者记录固定版本的依赖包详细列表。当我们使用pipenv安装/删除/更新依赖包时,两者都会自动更新。所以记住,这里的安装包使用的是pipenv命令。由于官方源比较慢,安装包的时候记得提前打开Pipfile替换国内源,把原来的地址替换成国内源地址。我换成了清华大学,其他都一样。原地址是https://pypi.org/simple,会比较慢。然后运行pipenv安装库,比如上图pipenvinstallflask已经安装好flask,flask显示在【packages】下,而【dev-packages】下的包只用于开发环境。pipenvinstallwatchdog添加"--dev"--dev这里只显示包列表,不显示具体的版本信息,这些内容显示在Pipfile.lock文件中运行pipenvinstall时会检测是否有这两个在当前文件夹中如果有文件,则创建一个虚拟环境并在Pipfile中安装包,就像前面的方法一样用pipinstall-rrequirements.txt命令。如果没有,创建两个文件。将这两个文件上传到git时,需要记得上传。激活虚拟环境可以使用pipenvshell命令激活虚拟环境,不需要进入scripts文件激活虚拟环境,用exit命令退出。除了显式激活虚拟环境外,Pipenv还提供了一个pipenvrun命令,可以在不显式激活虚拟环境的情况下,在当前项目的虚拟环境中执行命令,如:pipenvrunpythonapp.py这将使用当前项目虚拟环境环境中的python解释器,不是全局的python解释器。这个命令让你不用担心是不是忘记激活虚拟环境了。比以前必须激活才能运行的方法方便多了。同时pipenvinstallnumpy等安装包命令也可以忽略虚拟环境是否激活。总的来说,pipenv在管理依赖、激活虚拟环境、运行命令等方面比之前的方式更方便。我推荐大家使用它。使用conda创建虚拟环境首先打开AnacondaPrompt,类似于cmd命令行。打开后直接运行基于anaconda的虚拟环境。打开后,这会打开anaconda自带的base虚拟环境。cmd也可以运行这个,就是有点麻烦。首先找到anaconda安装目录,找到Scripts文件夹,运行activate激活虚拟环境,进入anaconda。下面是用cmd命令行打开的。用conda创建虚拟环境不需要提前创建文件夹什么的,因为conda在anaconda文件下专门指定了一个虚拟环境目录envs,可以直接运行如下命令创建虚拟环境condacreate-npython37condacreate-npython37python=3.7或condacreate-namepython37python=3.7第一个不指定python版本,后两个指定python版本。这是conda与上面两者略有不同的地方。也许甚至可以指定以上之一,但暂时还不清楚。毕竟anaconda是可以和python3.5、python3.6、python3.7、python3.8等共存的,但是上面这两个应该不行。运行命令后,在envs下可以看到新建的虚拟环境文件夹。名字后面的名字是虚拟环境的名字,文件夹中出现对应的python37文件夹。虚拟环境创建完成后,需要切换环境。使用激活环境名称activatepython37。如果忘记了,可以使用condaenvlist查看虚拟环境列表。进入虚拟环境后,就可以使用conda安装包了。推荐使用conda,比pip??好用。第一种导出方式同pipfreeze>requirements.txt。anaconda安装包中修复虚拟环境有问题。将项目创建者放在anaconda安装包中应该不常见,所以在其他地方创建项目后,需要将解释器分配给这个虚拟环境。以pycharm为例,打开File>Settings>Project:test>PythonInterpreter,点击右侧setting,选择showall如果是第一次,点击右侧的加号,添加这个虚拟环境,如果你已有一个,您可以从列表中选择它以选择现有环境。点击右侧按钮进入目录选择。注意上面两个python.exe是在Scripts文件夹下的,conda一个是在根目录下设置后就可以使用anaconda创建的虚拟环境了。3、虚拟环境原理说到虚拟环境,对应的就是python的实际环境。虚拟环境是python实际环境的一个副本,只不过是一个简化的副本。虚拟环境到底做了什么?其实很简单。我们可以对比一下上面的path环境变量是激活虚拟环境的环境变量,下面是不激活虚拟环境的系统环境变量。环境在系统环境变量之前插入一个变量并将其切断。因为谁跑在前面,虚拟环境中运行的python就是虚拟环境中设置的python。停用虚拟环境后,系统的环境变量恢复如下。
