不同的安装方法对 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.py
与 pip3
安装 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
。