python - 删除虚拟环境后安装的软件包会怎样?
问题描述
我使用以下命令创建了一个新项目:
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
问题:
- 以前安装的包“flask”、“kivy”、“foo”和“bar”会发生什么?我需要为我的 new_project 的虚拟环境重新安装它们吗?
- 如果我不需要重新安装这些软件包,那么我错过了虚拟环境的意义吗?我认为虚拟环境的全部意义在于安装在虚拟环境中的软件包在该环境中是隔离的。有人可以详细说明吗?
解决方案
实际上,pip
当 env 处于活动状态时,会将库安装到 virtualenv 的子目录中。其中的任何内容都独立于任何系统范围的安装,反之亦然。删除 env 显然会删除子目录中的内容。
另一方面,如果您允许,virtualenv 可以选择回退到系统安装的软件包。删除 virtualenv 后,系统范围的安装显然仍然存在。
顺便说一句,当前activate
对一些东西进行了硬编码,因此您甚至无法重命名 virtualenv 目录;你必须zap并重新安装它。将它需要的所有东西保存在一个requirements.txt
或类似的文件中是简化此过程以及记录依赖关系的好方法。