Python的'Extras'和'site-packages'目录有什么区别?

时间:2013-02-14 18:03:39

标签: python macos python-2.7 package osx-mountain-lion

我对OS X上的Python使用'Extras'和'site-packages'中的软件包的方式感到困惑。特别是,我对我在这些目录中看到的内容感到困惑,以及目录中的重复包如何相互影响,以及我应该在哪里放置我安装的包。

我曾假设'Extras' 1 是不属于核心Python的软件包的位置,但是它仍然与给定平台一起分发。例如,OS X与PyObjCtwistednumpy一起分发;这些都可以在'Extras'中找到。我还假设'site-packages' 2 是我随后安装的软件包所在的位置,并且该目录在“新鲜”机器上为空或不存在。此外,我假设安装一个新软件包会使该版本单独保留在'Extras'中,并将我在'site-packages'中所做的任何更新放在那里,他们会在'Extras'中“掩盖”那些。 (例如,可以通过删除'site-packages'简单地恢复默认安装。)

令我困惑的是我的'Extras'目录的内容正在减少。与新安装的OS X(10.8.2)安装上的内容相比,我当前配置的'Extras'缺失

altgraph
altgraph-0.9-py2.7.egg-info
dateutil
macholib
macholib-1.4.2-py2.7.egg-info
modulegraph
modulegraph-0.9.1-py2.7.egg-info
numpy #though numpy-1.6.1-py2.7.egg-info is there
pkg_resources.py  # though .pyc is there
py2app
py2app-0.6.3-py2.7.egg-info
setuptools  # though setuptools-0.6c12dev_r88846-py2.7.egg-info is there
site.py  # though .pyc and .pyo are there
xattr
xattr-0.6.2-py2.7.egg-info
zope
zope.interface-3.5.1-py2.7.egg-info

并且在全新安装中找不到另外两个文件

pkg_resources.py.OLD.1356069438.31
setuptools-0.6c12dev_r88846-py2.7.egg-info.OLD.1356069438.31
setuptools.OLD.1356069438.31

就我的记忆而言,这些都是我自己更新过的软件包,并且所有版本都存在于'site-packages'中。

'Extras'目录的内容是否应该以这种方式“减少”?更新“Extras”中的包“将”移动到“site-packages”,还是“Extras”版本应该单独放置并简单地“掩盖”'site-packages'中的那些?


1:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
2:/Library/Python/2.7/site-packages/

1 个答案:

答案 0 :(得分:1)

OSX(和Linux)似乎不想在python发行版的默认安装目录中安装额外的python包。

pip可以搜索(就像python本身一样)已安装的模块,如果你进行升级,将卸载旧版本并在你要求的地方安装新版本,默认为site-packages。如果仔细查看pip的输出,它会告诉你它删除了什么以及安装了什么。

因此,只有当你告诉pip安装到Extras目录,或者默认情况下会为OSX修补一个pip,这样才能工作。

删除旧版本实际上是一件好事,否则您导入的模块版本将取决于您的搜索路径(sys.path),这很容易出错。

是否假设可以争论,但这是你用pip进行升级的正常结果。

相关问题