«Нет модуля с именем _scproxy» в OSX - PullRequest
4 голосов
/ 13 апреля 2011

Я нахожусь на OSX 10.6 с предустановленным python 2.6 и хотел бы установить пакеты python через easy_install или setup.py (в загруженном пакете).В моем случае я пытаюсь установить 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."Find /System/Library/Frameworks/Python.framework/ -name scproxy " не дает никаких результатов.

Как установить отсутствующий модуль?

1 Ответ

6 голосов
/ 13 апреля 2011

Фон

_scproxy - это специфичный для Mac помощник urllib, взаимодействующий со специфическими для ОС библиотеками для выполнения HTTP-запросов.Похоже, что отсутствует в моей системе (10.6.7).Предварительно, я думаю, что это похоже на проблему с системной сборкой Python (я не могу найти ничего похожего на /System/Libraries).

Решение Hack-o-rama

Возможно (вроде) установить недостающий модуль.Но сначала несколько советов:

Вы не должны TM слишком сильно портить вашу системную установку Python.Сделайте себе одолжение, научившись использовать virtualenv и применять потенциально опасные операции к новым, свежим virtualenv.Таким образом, ваша система не будет зависеть от установки проблемных пакетов.

В любом случае: стандартный Python для Snow Leopard - 2.6.1.Я провел свои эксперименты с самой последней версией 2.6, 2.6.6, но более безопасный способ - загрузить ее.Однако мой опыт показывает, что различные точечные выпуски прекрасно работают вместе.

В любом случае, я скачал 2.6.6 в свой каталог ~/src, например:

~/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

YouТеперь вы можете скопировать ваш _scproxy.so в /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynlo ad (и потом помните, что в вашей системе Python есть самодельный модуль с инопланетянами).Или, что еще лучше, добавьте его в подкаталог lib/python2.6/ virtualenv.После выполнения этих действий я мог импортировать _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 запросов с использованием _scproxy, будет работать.Оттуда вы продолжите самостоятельно, так как я не хочу тестировать-устанавливать сам MySQL.

...