dist-packages和site-packages有什么区别?
dist-packages和site-packages有什么区别?
我对Python软件包安装过程感到有些困惑。具体来说,dist-packages目录和site-packages目录中安装的软件包有什么区别?
admin 更改状态以发布 2023年5月20日
Debian(和Ubuntu)引入了自己的规定。
# python3 -m site
在Ubuntu Focal中,采用该规定。
sys.path = [ '/qpid-dispatch', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', ] USER_BASE: '/root/.local' (doesn't exist) USER_SITE: '/root/.local/lib/python3.8/site-packages' (doesn't exist) ENABLE_USER_SITE: True
如邮件列表中描述的那样,该规定是让由发行版包管理器安装的Python deb包放置在/usr/lib/python3/dist-packages
中,并且使用sudo pip3
安装的包放置在/usr/local/lib/python3.8/dist-packages
中。
如果您自己编译和安装Python解释器,它将默认将自身放置在/usr/local
中,而/usr/local/bin/pip3
的安装则放置在/usr/local/lib/pythonX.Y/site-packages
中。
Debian规定的目的是保持这三组软件包的分离:
apt
安装的Python软件包- 使用
/usr/bin/pip3
的root用户安装的软件包 - 使用自己的
/usr/local/bin/pip3
的root用户安装的软件包
dist-packages
是Debian特有的惯例,在其衍生版本Ubuntu中也存在。当模块通过Debian软件包管理器安装到这个位置时,它们会被安装到dist-packages
中:
/usr/lib/python2.7/dist-packages
由于easy_install
和pip
是从软件包管理器安装的,它们也使用dist-packages
,但它们将包放置在这里:
/usr/local/lib/python2.7/dist-packages
第三方Python软件安装在Debian软件包中,它们被安装到
dist-packages
而不是site-packages
。这是为了减少系统Python和你手动安装的Python产生冲突。
这意味着,如果你从源代码手动编译并安装Python解释器,它会使用site-packages
目录。这样可以使两个安装分开,特别是因为Debian和Ubuntu依赖于系统版本的Python来执行许多系统工具。