删除虚拟环境时安装的软件包会发生什么?

时间:2018-05-10 07:25:19

标签: python python-3.x python-venv

我使用以下命令创建一个新项目:

mkdir ~/my_project
python -m venv ~/my_project
source ~/my_project/Scripts/activate
pip install flask
pip install kivy
pip install foo
pip install bar

让我们说我决定删除my_project并创建一个新项目:

rm -rf ~/my_project
mkdir ~/new_project
python -m venv ~/new_project
source ~/Scripts/activate

问题:

  • 以前安装的软件包"烧瓶"," kivy"," foo"和" bar"?我是否需要为new_project的虚拟环境重新安装它们?
  • 如果我不需要重新安装这些软件包,那么我就错过了虚拟环境的观点?我认为虚拟环境的重点在于虚拟环境中安装的软件包是在该环境中隔离的。有人可以详细说明吗?

2 个答案:

答案 0 :(得分:2)

实际上,当env处于活动状态时,pip会将库安装到virtualenv的子目录中。其中的任何内容都独立于任何系统范围的安装,反之亦然。删除env显然会删除子目录中的内容。

另一方面,如果你允许的话,virtualenv可以选择回退到系统安装的软件包。删除virtualenv后,系统范围的安装显然仍然存在。

顺便说一下,当前的activate会对某些内容进行硬编码,因此您甚至无法重命名virtualenv目录;你必须删除并重新安装它。在requirements.txt或类似内容中保留所需的所有内容是简化此过程以及记录依赖项的好方法。

答案 1 :(得分:1)

虚拟环境的目的是将您的开发环境与实际环境分开。不同的项目具有不同的包依赖性。因此,对于这些情况,虚拟环境会派上用场。

  • 如果您在虚拟环境中安装了flaskkivyfoobar,那么您需要在进入另一个虚拟环境时安装它们(这是Virtula环境的全部目的)。
  • 如果您发现这些包在全球范围内可用,则可能是您没有正确使用它。您需要在安装任何内容之前激活虚拟环境,否则将在全局安装软件包。

对于您的情况,我可以看到您在安装软件包之前正在激活。所以它应该正常工作。您始终可以使用pip freeze查看已安装的软件包。