我在预装了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 ”不会产生任何结果。
如何安装缺少的模块?
答案 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。