dist-packages 和 site-packages 有啥区别?

Posted

技术标签:

【中文标题】dist-packages 和 site-packages 有啥区别?【英文标题】:What's the difference between dist-packages and site-packages?dist-packages 和 site-packages 有什么区别? 【发布时间】:2012-03-12 09:00:41 【问题描述】:

我对 python 包的安装过程有点恼火。具体来说,安装在 dist-packages 目录和 site-packages 目录下的包有什么区别?

【问题讨论】:

【参考方案1】:

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:

dist-packages 而不是站点包。第三方 Python 软件 从 Debian 软件包安装进入 dist-packages,而不是 网站包。这是为了减少系统Python之间的冲突, 以及您可以手动安装的任何源代码 Python 版本。

这意味着如果您从源代码手动安装 Python,它将使用 site-packages 目录。这允许您将两个安装分开,特别是因为 Debian 和 Ubuntu 依赖于 Python 的系统版本来提供许多系统实用程序。

【讨论】:

这准确吗?!我用 pip 安装,它进入 dist-packages。 (在 Deb Squeeze + Py 2.6 上) 我也一样。使用 pip 或 easy_install 安装的包都进入 dist-packages。 这里也一样,如果我删除所有这些安装会有什么问题吗? Debian 6.0.10 的相同目录(仍然在 Python 2.6 上)。 如果你在 pip 中使用 virtualenv,pip 会在 site-packages 目录下安装包。【参考方案2】:

dist-packages 是 debian 特定的目录,apt 和朋友在其中安装他们的东西,site-packages 是标准的 pip 目录。

问题是——当同一个包的不同版本存在于不同目录时会发生什么?

我对该问题的解决方案是使dist-packages 成为site-packages 的符号链接:

for d in $(find $WORKON_HOME -type d -name dist-packages); do
  pushd $d
  cd ..
  if test -d dist-packages/__pycache__; then
    mv -v dist-packages/__pycache__/* site-packages/__pycache__/
    rmdir -v dist-packages/__pycache__
  fi
  mv -v dist-packages/* site-packages/
  rmdir -v dist-packages
  ln -sv site-packages dist-packages
  popd
done

(如果您不使用 gnu 工具,请删除 -v 选项)。

【讨论】:

我有点困惑你用你的解决方案解决了哪个问题,因为这个问题需要解释 @JürgenK.:对我来说,问题是当不同目录中有不同版本时使用哪个包。 是python包在一个地方的解决方案。当您在 Debian 上执行 apt update 并在 dist-packages 中安装新的 python 包时运行它?你有一个dist-packages cleaner,去申请专利.. 还有一个,我有两个全球dist-packages/usr/lib/python3/dist-packages/usr/local/lib/python3.8/dist-packages,我应该做一个吗? 我明白了,这就是为什么你使用循环以防有更多文件夹。为什么要使用if 额外复制__pycache__?我会一口气复制它,不需要if

以上是关于dist-packages 和 site-packages 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

dist-packages vs site-packages

如何让 virtualenv 在 Ubuntu 上使用 dist-packages?

python:dist-packages && site-packages

Colab PyTorch |导入错误:/usr/local/lib/python3.7/dist-packages/_XLAC.cpython-37m-x86_64-linux-gnu.so

Pyspider 安装排坑指南

python3.6 pip3配置