Setuptools находит неправильный пакет во время установки

В myria-python мы используем setuptools с install_requires для настройки необходимых пакетов. В нашем файле мы включаем requests-toolbelt и requests в этот список.

Когда мы создаем новую виртуальную среду, а затем запускаем python setup.py install, она не работает в первый раз с Cannot find required distribution requests. Это происходит потому, что pip идентифицирует requests toolbelt-0.3.1 (обратите внимание на пробел) как правильное совпадение для пакета requests.

Запуск python setup.py install снова, кажется, устанавливает requests в конце концов.

Вот проблема GitHub с полным протоколом процесса установки.

Шаги для воспроизведения:

  • git clone https://github.com/uwescience/myria-python.git
  • cd myria-python
  • mkvirtualenv myria-python
  • python setup.py

У всей лаборатории, похоже, есть эта проблема, однако все мы используем Mac OS X с установленными 10.9 или 10.10. Вот мои спецификации машины:

  • OS X 10.10.1
  • Python 2.7.9 (по умолчанию, 10 декабря 2014, 23:46:04)
  • pip 1.5.6
  • mkvirtualenv 1.11.6

Я также смог дублировать его на одном из наших серверов Ubuntu:

  • Ubuntu 14.04.1 LTS\n\l
  • Python 2.7.6
  • pip 1.5.4
  • mkvirtualenv 1.11.4

Вот хвост журнала ошибок:

Searching for requests-toolbelt
Reading https://pypi.python.org/simple/requests_toolbelt/
Best match: requests-toolbelt 0.3.1
Downloading https://pypi.python.org/packages/source/r/requests-toolbelt/requests-toolbelt-0.3.1.tar.gz#md5=e563377e46cd0be8c7b3ac144a65844c
Processing requests-toolbelt-0.3.1.tar.gz
Writing /var/folders/m_/qltd_g_13qd1v5tvr4l6q2rc0000gn/T/easy_install-2lqn7g/requests-toolbelt-0.3.1/setup.cfg
Running requests-toolbelt-0.3.1/setup.py -q bdist_egg --dist-dir /var/folders/m_/qltd_g_13qd1v5tvr4l6q2rc0000gn/T/easy_install-2lqn7g/requests-toolbelt-0.3.1/egg-dist-tmp-riz25e
no previously-included directories found matching '*.pyc'
warning: manifest_maker: MANIFEST.in, line 6: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

warning: manifest_maker: MANIFEST.in, line 7: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

no previously-included directories found matching 'docs/_build'
zip_safe flag not set; analyzing archive contents...
Adding requests-toolbelt 0.3.1 to easy-install.pth file

Installed /Users/dhalperi/Envs/myria-python2/lib/python2.7/site-packages/requests_toolbelt-0.3.1-py2.7.egg
Searching for requests
Best match: requests toolbelt-0.3.1
Downloading https://pypi.python.org/packages/source/r/requests-toolbelt/requests-toolbelt-0.3.1.tar.gz#md5=e563377e46cd0be8c7b3ac144a65844c
Processing requests-toolbelt-0.3.1.tar.gz
Writing /var/folders/m_/qltd_g_13qd1v5tvr4l6q2rc0000gn/T/easy_install-LKxX9E/requests-toolbelt-0.3.1/setup.cfg
Running requests-toolbelt-0.3.1/setup.py -q bdist_egg --dist-dir /var/folders/m_/qltd_g_13qd1v5tvr4l6q2rc0000gn/T/easy_install-LKxX9E/requests-toolbelt-0.3.1/egg-dist-tmp-3tgz5e
no previously-included directories found matching '*.pyc'
warning: manifest_maker: MANIFEST.in, line 6: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

warning: manifest_maker: MANIFEST.in, line 7: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

no previously-included directories found matching 'docs/_build'
zip_safe flag not set; analyzing archive contents...
requests-toolbelt 0.3.1 is already the active version in easy-install.pth

Installed /Users/dhalperi/Envs/myria-python2/lib/python2.7/site-packages/requests_toolbelt-0.3.1-py2.7.egg
error: Could not find required distribution requests

Как я могу исправить это, чтобы пакет устанавливался без запуска setup.py дважды?

Ответ 1

(Зеркально от https://github.com/uwescience/myria-python/pull/35)

Несколько часов из 100 поисков Google в конечном итоге привели меня к этому numpy thread:

https://github.com/numpy/numpy/issues/2434

для которых им пришлось добавить numpy в setup_requires И install_requires, чтобы исправить аналогичную проблему. дела это с запросами, похоже, сработало. Тем не менее, я несколько скептически, как сказал @Тимусан, не видя нашей проблемы в первое место.

Я пробовал на своем Mac, а также на Ubuntu, и теперь могу установить с чистого виртуального в обеих системах.

Ответ 2

Как уже упоминалось в комментариях, основная причина - багги-версия python/pip. Эта проблема существует с python 2.7.6, но когда я обновился до версии 2.7.9, проблема больше не возникала. Также будьте осторожны, что mkirtualenv по умолчанию использует python в /usr/bin/python, даже если в $PATH есть другие версии python.