2011-04-13 117 views
4

我在OSX 10.6上安装了预装的python 2.6,并希望通过easy_install或setup.py(在下载的软件包中)安装python软件包。在我的情况下,我试图安装MySQLdb。在这两种情况下,我得到它结束,像这样一个堆栈跟踪:OSX上的“No module named _scproxy”

... 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/setuptools/command/easy_install.py", line 21, in <module> 
    from setuptools.package_index import PackageIndex, parse_bdist_wininst 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/setuptools/package_index.py", line 2, in <module> 
    import sys, os.path, re, urlparse, urllib2, shutil, random, socket, cStringIO 
File "/System/Library/Frameworks/Python/framework/Versions/2.6/lib/python2.6/urllib2.py", line 111, in <module> 
    from urllib import (unwrap, unquote, splittype, splithost, quote, 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 1335, in <module> 
    from _scproxy import _get_proxy_settings, _get_proxies 
ImportError: No module named _scproxy 

蟒蛇安装未修改的预装版本2.6.1,除了我的源文件添加到lib文件夹。 “find /System/Library/Frameworks/Python.framework/ -name scproxy”不会产生任何结果。

如何安装缺少的模块?

+0

为了执行Jacob Oscarson的配方(下面),我需要安装OSX开发人员工具(gcc和东西)。我不知道我做了什么,但事后我可以使用setuptools(无需编译python)。感谢你的努力,Jacob! – 2011-05-17 07:06:09

+0

对于2015年出现在这里的人,优胜美地因此无法构建共享模式:http://hamelot.co.uk/programming/osx-gcc-dispatch_block_t-has-not-been-declared-invalid-typedef/(object .H:143)。进行编辑,“make sharedmods”并继续。 – 2015-01-19 23:01:34

回答

4

背景

_scproxy是Mac专用的urllib帮手特定操作系统的库做HTTP请求的接口。它似乎也在我的系统上缺失(10.6.7)。初步的,我认为它看起来像系统Python构建的问题(我找不到像/System/Libraries下的任何东西)。

砍奥拉玛解决方案

这是(在某种程度上)可以安装缺少的模块。但首先有点建议:

你不应该TM与您的系统Python安装太多太多。通过学习使用virtualenv来帮助自己,并对新的,新鲜的virtualenv应用潜在的危险操作。这样你的系统就不会受到安装有问题的软件包的影响。

无论如何:雪豹股票是2.6.1。我用最新的2.6,2.6.6做了我的实验,相反,更安全的方法是下载它。然而,我的经验是,不同的点发布工作在一起很好。

反正我在~/src目录下载2.6.6这样的:

~/src/ext/python$ wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz 
~/src/ext/python$ tar zxf Python-2.6.6.tgz 
~/src/ext/python$ cd Python-2.6.6 
~/src/ext/python$ ./configure 

控制台垃圾邮件像疯了似的

~/src/ext/python$ make sharedmods 

希望没有错误,更控制台滥发

找到新建的_scproxy.so

~/src/ext/python/Python-2.6.6$ find . -name '_scproxy.so' 
./build/lib.macosx-10.4-x86_64-2.6/_scproxy.so # <- exact path may vary 

现在,您可以复制_scproxy.so/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynlo ad(然后记得有一个在你的系统的Python一个自制的有点外星人模块)。或者,更好的办法是将它添加到virtualenv的lib/python2.6/子目录中。做这些事以后,我可以在你的回溯指示的方式导入_scproxy:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from _scproxy import _get_proxy_settings, _get_proxies 
>>> 

这是一个强烈的迹象表明,通过要求urllib请求utlizing _scproxy将工作的方法安装软件包。然而,从那里开始,你自己继续,因为我不想测试安装MySQL本身。

+0

非常感谢您的广泛指示。听起来对我来说很合理。不幸的是,我不能在下周之前尝试它们(还没有安装编译器和类似的东西)。 – 2011-04-13 15:42:12

+0

虽然你当然可以构建Apple遗漏的_scproxy,但OS X 10.6中的Python 2.6.1在这一点上已经很老了。使用更新的Python 2.6或更好的Python 2.7可能会更好。安装程序可从python.org获得:http://python.org/download/ – 2011-04-14 01:00:06