Описание проблемы:
Используя 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" для добавления его путей.
Заранее благодарю вас!