275

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

4

2 回答 2

252

dist-packages是一个特定于 Debian 的约定,也出现在其衍生产品中,例如 Ubuntu。模块dist-packages从 Debian 包管理器安装到此位置时:

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

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

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

来自Debian Python 维基

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

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

于 2012-02-22T01:52:54.410 回答
7

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选项)。

于 2018-06-28T17:37:44.677 回答