dist-packages和site-packages有什么区别?

31 浏览
0 Comments

dist-packages和site-packages有什么区别?

我对Python软件包安装过程感到有些困惑。具体来说,dist-packages目录和site-packages目录中安装的软件包有什么区别?

admin 更改状态以发布 2023年5月20日
0
0 Comments

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规定的目的是保持这三组软件包的分离:

  1. apt安装的Python软件包
  2. 使用/usr/bin/pip3的root用户安装的软件包
  3. 使用自己的/usr/local/bin/pip3的root用户安装的软件包
0
0 Comments

dist-packages是Debian特有的惯例,在其衍生版本Ubuntu中也存在。当模块通过Debian软件包管理器安装到这个位置时,它们会被安装到dist-packages中:

/usr/lib/python2.7/dist-packages

由于easy_installpip是从软件包管理器安装的,它们也使用dist-packages,但它们将包放置在这里:

/usr/local/lib/python2.7/dist-packages

根据Debian Python Wiki

第三方Python软件安装在Debian软件包中,它们被安装到dist-packages而不是site-packages。这是为了减少系统Python和你手动安装的Python产生冲突。

这意味着,如果你从源代码手动编译并安装Python解释器,它会使用site-packages目录。这样可以使两个安装分开,特别是因为Debian和Ubuntu依赖于系统版本的Python来执行许多系统工具。

0