"没有名为_scproxy"的模块在OSX上

时间:2011-04-13 09:24:23

标签: python macos osx-snow-leopard

我在预装了python 2.6的OSX 10.6上,想通过easy_install或setup.py(在下载的软件包中)安装python软件包。在我的情况下,我正在尝试安装MySQLdb。在这两种情况下,我得到一个堆栈跟踪,结尾如下:

...
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

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

如何安装缺少的模块?

1 个答案:

答案 0 :(得分:6)

<强>背景

_scproxy是一个特定于Mac的urllib帮助程序,它与特定于操作系统的库连接以执行HTTP请求。它似乎也在我的系统中缺失(10.6.7)。初步,我认为这似乎是系统Python构建的一个问题(我在/System/Libraries下找不到任何类似的内容。)

Hack-o-rama解决方案

可以(有点)安装丢失的模块。但首先提出一些建议:

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

无论如何:Snow Leopard上的股票Python是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/子目录中。完成这些操作后,我可以以traceback中指示的方式导入_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。