Описание проблемы:
Используя pip, я обновил до последней версии requests (версия 2.7.0, с pip show requests с указанием местоположения /usr/local/lib/python2.7/dist-packages). Когда я import requests и печатаю requests.__version__ в интерактивной командной строке, я вижу версию 2.2.1. Оказывается, Python использует предварительно установленную версию запросов Ubuntu (requests.__file__ is /usr/lib/python2.7/dist-packages/requests/__init__.pyc - not /user/local/lib/...).
Из моего исследования этот факт вызван изменениями Ubuntu в пути поиска Python (я запускаю Ubuntu 14.04), добавив путь к пакету Ubuntu Python (для моей машины это происходит в usr/local/lib/python2.7/dist-packages/easy-install.pth). В моем случае это вызывает версию запросов apt-get, которая предварительно упакована с Ubuntu, которая будет использоваться, а не версия pip, которую я хочу использовать.
Что я ищу:
Я хочу глобально добавить путь к каталогу установки пути к пути поиска Python (sys.path) до пути к каталогу установки Ubuntu Python. Поскольку запросы (и многие другие пакеты) используются во многих сценариях Python, я не хочу вручную изменять путь поиска для каждого отдельного файла на моей машине.
Неудовлетворительное Решение 1: Использование virtualenv
Использование virtualenv приведет к ненужной замене моей машины, поскольку мне придется переустанавливать каждый пакет, который существует глобально. Я хочу только обновить пакеты Ubuntu до пакетов пакетов.
Неудовлетворительное Решение 2. Изменение easy-install.pth
Так как easy-install.pth перезаписывается каждый раз, когда используется easy-install, мои изменения на easy-install.pth будут удалены, если будет установлен новый пакет. Эта проблема затрудняет сохранение пакетов на моей машине.
Неудовлетворительное (но лучшее, что у меня есть) Решение 3. Добавление отдельного файла .pth
В том же каталоге, что и easy-install.pth, я добавил zzz.pth с содержимым:
import sys; sys.__plen = len(sys.path)
/usr/lib/python2.7/dist-packages/test_dir
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
Этот файл читается site.py при запуске Python. Поскольку имя файла появляется после easy-install.pth alphanumerically, оно потребляется site.py после этого. Взятые вместе, первая и последняя строки файла добавляют путь к sys.path (эти строки были взяты из easy-install.pth).
Мне не нравится, как это решение зависит от буквенно-цифрового упорядочения имени файла, чтобы правильно разместить новый путь.
PYTHONPATH появляются после путей Ubuntu
Другой ответ о переполнении стека не работал у меня. Мои пути PYTHONPATH появляются после путей в easy-install.pth, которые используют тот же самый код, который я упоминаю в "Неудовлетворительном решении 3" для добавления его путей.
Заранее благодарю вас!