Почему установка пакета python нарушает setuptools и приводит к невозможности найти pkg_resources? - PullRequest
4 голосов
/ 19 ноября 2011

Это частично вопрос, частично мои собственные выводы о том, что я обнаружил как проблему, когда столкнулся с этой ошибкой:

(cdbak)USER-MBP-2:.virtualenvs <YOUR_USER_NAME>$ pip 
Traceback (most recent call last):
    File "/Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/bin/pip", line 6, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

Эта проблема возникла, когда я попытался установить pypsum через pip в моем виртуальном компьютере.окружение для использования с django.

(cdbak)USER-MBP-2:.virtualenvs <YOUR_USER_NAME>$ pip install pypsum

Я работал в виртуальных средах, поэтому мне повезло, что после его поломки я мог просто сбросить настройки своей виртуальной среды с помощью сценария, который я написал.

Я скопировал вывод процесса установки и начал присматриваться к нему, и кажется, что в setuptools что-то идет не так.

Процесс установки пытается собрать пакет, но это не такне найти build_py в setuptools, что заставляет его «исправлять» установку setuptools, переименовывая установленные в настоящее время setuptools.

Это та часть, где, как мне кажется, начинают происходить забавные вещи:

Setuptools installation detected at /Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg
Egg installation
Patching...
Renaming /Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg into /Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg.OLD.1321360113.04

И затем он пытается установить другую версию setuptools или что-то вроде этого:

After install bootstrap.
Creating /Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info
Creating /Users/<YOUR_USER_NAME>/.virtualenvs/cdbak/lib/python2.7/site-packages/setuptools.pth

Но, похоже, он неправильно устанавливает пакет setuptools в его текущем расположении, а затем приводит к отсутствию pkg_resourcesмодуль (на самом деле в нем тоже много чего не хватает)

[Настройка]

ОС: Mac OS X Lion
Python 2.7.1 (r271: 86832, 16 июня 2011 г., 16:59:05)
virtualenv v1.6.1

Свежая виртуальная среда с использованием virtualenvwrapper, использующая файл требований для установки этих пакетов:

mercurial == 1.9.3
Django> = 1.3.1
MySQL-python> = 1.2.3
Sphinx
wsgiref
pylint
желток
dbgp
django-debug-toolbar
юг

Я смог использовать pip для установкидругие пакеты просто в порядке, но по какой-то причине он, похоже, ломается с этой установкой.

[Вопрос] - Неужели люди думают, что это ошибка процесса установки этого пакета?- Или это ошибка с setuptools?- Или я просто неправильно его устанавливаю?

[Дополнительное примечание] Я могу прикрепить файл ко всему выводу, но это длинный файл, и я решил извлечь только те сегменты, которые мне показались актуальными.Если вы хотите просмотреть полный файл, я также могу загрузить его.

1 Ответ

3 голосов
/ 19 ноября 2011

Я не уверен насчет всех ваших проблем, но есть хотя бы одна проблема, вызванная пакетом loremipsum, который является зависимостью для пакета pypsum. По какой-то причине в файле setup.py loremipsum автор включает особые требования для пакета distribute:

egg = {
    'name': name,
    'version': module.__version__,
    'author': author,
    'author_email': email.strip('<>'),
    'url': url,
    'description': "A Lorem Ipsum text generator",
    'long_description': long_description,
    'classifiers': module.__classifiers__,
    'keywords': ['lorem', 'ipsum', 'text', 'generator'],
    'setup_requires': ['distribute'],
    'install_requires': ['distribute'],
    'packages': [name],
    # 'package_dir': {'': '.'},
    # 'package_data': {'': 'default/*.txt'},
    # 'data_files': [(name, ('default/dictionary.txt', 'default/sample.txt'))],
    'include_package_data': True,
    'test_suite': 'tests.suite' }

distribute, как вы, возможно, знаете, является форком пакета setuptools; За этим стоит длинная история. Поскольку предполагается, что distribute является почти совместимой с плагином заменой для setuptools, он попытается маскироваться под setuptools и отключит все существующие setuptools, уже установленные в этом экземпляре Python. Таким образом, помещать distribute в файл setup.py в качестве требования обычно не очень хорошая идея. По умолчанию virtualenv установит версию setuptools, но у нее есть возможность использовать distribute. Поставляемые Apple системы Pythons в OS X 10.6 и 10.7 уже поставляются с предварительно установленными версиями setuptools, и, поскольку они находятся в нестандартных системных каталогах, их не так легко исправить. Простой обходной путь при использовании virtualenv в OS X, по-видимому, также использует его опцию no-site-packages, которая предотвратит версию setuptools из системного Python, мешающую требуемому distribute в virtualenv. Без сомнения, путаница между distribute и setuptools вызывает проблемы, наблюдаемые с pkg_resources, поскольку он также предоставляется обоими.

Так что попробуйте заново создать virtualenv следующим образом:

virtualenv --distribute --no-site-packages /path/to/ve

Это также будет иметь побочный эффект, если не включать сторонние пакеты, которые Apple поставляет с системой Python. Вы можете добавить их обратно с помощью PYTHONPATH, если они вам действительно нужны, но, вероятно, лучше установить отдельные версии.

...