直接原因:Python本身依赖管理不佳——若未具体指定,pip
将把所有你安装的外部包都置于名为site-package
的文件夹下。
从技术上讲,Python 有两个 site-packages 文件夹:
purelib/ 只包含用纯 Python 代码编写的模块。
platlib/ 应包含非纯 Python 编写的二进制文件,例如 .dll、.so 或 .pydist 文件。
如果你使用的是 Fedora 或 RedHat Linux 发行版,你可以在不同的位置找到这些文件夹。
不过,大多数操作系统都会执行 Python 的 site-packages 设置,使这两个位置指向相同的路径,从而有效地创建一个单一的 site-packages 文件夹。你可以使用 sysconfig 检查路径:
>>> import sysconfig >>> sysconfig.get_path("purelib") '/usr/local/lib/python3.12/site-packages' >>> sysconfig.get_path("platlib") '/usr/local/lib/python3.12/site-packages'
具体而言,虚拟环境解决的问题包括:
避免系统污染
Linux 和 macOS 预装了操作系统用于内部任务的 Python 版本。
如果将软件包安装到操作系统的全局 Python 中,这些软件包将与系统相关的软件包混合。这种混合可能会对操作系统正常运行的关键任务产生意想不到的副作用。
此外,如果你更新了操作系统,那么你安装的软件包可能会被覆盖或丢失。
避免依赖冲突
一个项目可能需要与另一个项目不同版本的外部库。如果你只有一个安装包的地方,那么你就无法使用同一个库的两个不同版本。
解决方案则说为存在依赖冲突的不同项目分别创建一个虚拟环境。
尽量减少可重复性问题
将所有包都安装在同一位置,则很难区分每个单独项目的依赖,进行项目的复制或迁移的时候会十分麻烦。
若为每个项目都使用一个单独的虚拟环境,那么就可以更直观地从固定的依赖关系中读取项目需求。这意味着,当你开发出一款出色的应用程序时,你可以更轻松地分享你的成功经验,让其他人有可能与你合作!
避免安装权限锁定
最后,你可能需要计算机上的管理员权限,才能将软件包安装到 Python 主机的 site-packages 目录中。在公司工作环境中,你很可能缺乏相应权限。
如果你使用虚拟环境,那么你就可以在用户权限范围内创建一个新的安装位置,这样你就可以安装和使用外部软件包。
无论你是作为业余爱好在自己的机器上编码,还是为客户开发网站,抑或是在公司环境中工作,使用虚拟环境从长远来看都会为你省去很多麻烦。