Python Package 的安装路径

不同的安装方法对 Python packages 的安装路径有着不同的影响。

使用 Linux 发行版自带的 Package Manager 安装

sudo apt install python3-<pkg>

此时 package 被安装在 /usr/lib/python3/dist-packages/。该文件夹由 Linux 发行版管理。root 用户使用 pip3 show 查看已安装的 package 时,也会检索这个目录。因此当 sudo pip3 install 发现 apt 已经安装 package 后,不会再重复安装。

但有这样一种情况,apt 安装的 package 版本较低,root 用户可以使用 pip3 更新它。此时 apt 安装的老版本不会被 pip3 移除。新版本则被安装在 /usr/local/lib/python?.?/dist-packages/ 下。想要删除老版本需使用 sudo apt remove python3-<pkg>

有了 pip3 Linux 还要在软件源中维护一套 Python packages 的原因是为了稳定。Linux 发行版的系统工具会依赖特定版本的 Python。为了系统的稳定,Linux 发行版会维护支持该版本 Python 的 packages,并把它们加入软件源管理。因此可以使用 apt 安装系统默认 Python 版本对应的 packages。

dist-packages 是 Linux 发行版 Debian 定下的名字。

通过 Python 的 Package Manager 安装

[sudo] pip3 install <pkg>

若是 root 用户使用 pip3 安装 package,则安装位置为 /usr/local/lib/python?.?/dist-packages/;若是普通用户安装使用 pip3 安装 package,则安装位置为 ${HOME}/.local/lib/python?.?/site-packages/

不同用户使用 pip3 安装 package 后,都会安装在不同目录,相互之间不受影响,像是被隔离了一样。当用户使用 pip3 show <pkg> 查看已安装的 package 时,也只能看到自己安装的 package。有一个例外是,大家都看到 root 用户安装的(系统)package。当用户自己安装了与系统相同的 package,则优先使用自己安装的 package。

使用 setup.py 安装

[sudo] ./setup.py install [--user]

要从源码安装 Python package 可以使用该方法。此时 package 默认被安装在 /usr/local/lib/python?.?/dist-packages/ 下。当指定 --user 时,package 将被安装在 ${HOME}/.local/lib/python?.?/site-packages/ 下。这些路径与使用 pip3 安装 package 的情况相同。

因此虽然 setup.pypip3 安装 package 的方法不同,但是由于安装路径相同,pip3 可以管理到使用 setup.py 安装的 package。比如 pip3 show 就可以发现 ./setup.py install --user 安装的 package。

另外 pip3 也有 --user 参数(对立的参数为 --system),且在 Debian 中默认被启用:

"On Debian systems, this is the default when running outside of a virtual environment and not as root." from pip3 install --help

./setup.py 没有默认启用 --user

References

  1. Python packages and their managers: Ubuntu APT, yum, easy_install, pip, virtualenv, conda
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容