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


243

我对python软件包的安装过程有些不满意。具体来说,安装在dist-packages目录和site-packages目录中的软件包之间有什么区别?

Answers:


226

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

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


22
这个准确吗?我用pip安装,然后转到dist-packages。(基于Deb Squeeze + Py 2.6)
巴塞尔Shishani 2012年

4
我也一样 用pip或easy_install安装的软件包都属于dist-packages。
monostop 2012年

1
同样在这里,如果删除所有这些安装程序,会不会有任何问题?
Mohamed Turki 2012年

1
与Debian 6.0.10相同的目录(仍在Python 2.6上)。
ᴠɪɴᴄᴇɴᴛ

2
如果将virtualenv与pip一起使用,则pip会将软件包安装在site-packages目录中。
diabloneo

4

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


1
我很困惑一点你因为这个问题requiers您的解决方案的说明解决该问题
于尔根K.

@JürgenK.:对我来说,问题是在不同目录中有不同版本时使用哪个软件包。
sds
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.