Я все еще пытаюсь понять эту проблему, относительно которой я имею и считал тонну сообщений sudo apt-get install python-XXX
по сравнению с pip install
, и я понимаю, jist его (склонный - добираются, пакет repo, управляемый совершенно другой группой людей для побеждения, автоматические обновления наряду со всем остальным, когда существует доступное обновление, это является двоичным и т.д.). Однако существует несколько конкретных вещей, которые я не понимаю и не смог найти ответы на:
Если я, по любой причине, сначала устанавливаю пакет, например, numpy, с sudo apt-get install numpy
, и затем я позже pip install numpy
. Что происходит? numpy установлен снова в другом месте с другой версией (например, в .local/lib), поэтому теперь у меня есть две независимых версии? Какой используется, когда я импортирую? (если я понял правильно, что это является отдельным и склонным - добираются, в масштабе всей системы, но я видел конфликтующие ответы на этот вопрос, например, здесь),
Я заметил, что много пакетов на Кв. - добирается, довольно стар сравненный с зернышком. например, во время записи ipython 2.3.0 по сравнению с 4.0.3, numpy 1.10.2 по сравнению с 1.10.4, spyder 2.3.5 по сравнению с 2.3.8. Есть ли любое преимущество для сначала sudo apt-get install
сопровождаемый a pip install
? или это просто глупо?
Я заметил, что мое зернышко было 1.5.6 - это - ток, последний, если Вы делаете sudo apt-get install python-pip
. тогда как на зернышке это 8.0.2! Я полагаю, что это вызывало меня проблемы, потому что с той старой версией можно установить тот же пакет много раз, и это не предупреждает. И так или иначе это не переписывает старый. Я понял это, потому что я могу продолжать удалять тот же пакет (например, numpy), и это все еще всегда там, когда я делаю pip show numpy
. И странно, всегда показывая ту же папку (.local/), но с различными версиями :S Таким образом, у меня есть два вопроса, связанные с этим:
a. что лучший способ состоит в том, чтобы установить зернышко? Я в настоящее время склоняюсь к sudo apt-get install python-pip
, pip install pip
, sudo apt-get purge python-pip
. Это мудро? Это кажется немного смешным мне.
b. теперь, когда я знаю, что много моих пакетов испорчено с дублирующимися установками, вероятно, потому что некоторые были установлены с Кв. - добираются и затем позже многократно с зернышком 1.5.6, что лучший способ состоит в том, чтобы проверить на дубликаты и очистить его? Я предполагаю, что не безопасно использовать сценарий для побеждения, удаляют все и переустанавливают?
P.S. Я не был уверен, должен ли я отправить это как новый вопрос или как ответ на мою исходную проблему. Так как этот вопрос является намного более кратким и общим, я чувствовал, что это будет лучше отдельный. Извинения, если я ошибался.
Для архивов после большого метода проб и ошибок это - то, что я нашел (ретроспективно, некоторые биты имеют смысл, довольно сбивающие с толку другие).
Если Вы sudo apt-get install python-xyz
, пакет появится в pip list
. Конечно, можно импортировать его в Python, но это не появляется в зернышке get_installed_distributions (). (Очевидно, противоположное не верно. т.е. если Вы делаете pip install xyz
это не появится в Вашем способном/синаптическом),
После sudo apt-get install python-xyz
если Вы делаете pip install xyz
то, что происходит, зависит от версии зернышка, которое Вы имеете.
СТАРЫЙ v1.5.6 (текущая версия, поставлющаяся на Ubuntu PPA):
Эта версия зернышка (1.5.6) просто установит новую копию xyz в другом месте. Вы заканчиваете с несколькими копиями, и это вызывает огромную путаницу. например:
Если я делаю pip install numpy
все снова и снова это загружает и устанавливает его снова. Таким образом, Вы могли закончить со многими различными версиями, к которым Вы не можете действительно получить доступ. Я могу сделать pip install numpy
5x времена, и затем я могу сделать pip uninstall numpy 5x
времена! Очевидно, можно обратить внимание, чтобы не сделать это, но иногда сценарии установки другого программного обеспечения немного небрежны и могут испортить вещи. Невероятный, что Ubuntu официально поставляет эту версию зернышка.
НОВЫЙ v8.0.2 (текущая версия на самом зернышке):
более новые версии зернышка (например, 8.0.2, который находится на зернышке) откажутся устанавливать то же требование высказывания пакета, уже встречен. Таким образом, Вы не можете установить новую версию. Это - хорошее поведение (больше при получении этой версии зернышка позже).
В этом случае можно только обновить, т.е. установить с флагом-U.
Однако, когда Вы пытаетесь pip install -U xyz
на пакете, установленном с sudo Кв. - добираются, Вы получите ошибку полномочий, потому что Кв. - добирается, был установлен в/usr/, и Вы должны базироваться доступ для записи там.
Так AFAIK у Вас нет выбора, кроме как к sudo pip install -U xyz
смочь обновить его. В этом случае зернышко устанавливает последний пакет в то же место, как sudo склонный - добираются, записал это. например, в моем случае/usr/local/lib/python2.7/dist-packages. Это хорошо.
Также стоит указать, что пакеты на Кв. являются часто вполне более старыми, чем пакеты на зернышке (например, numpy v1.8.2 по сравнению с 1.10.4, scipy 0.14.1 по сравнению с 0.17.0, ipython 2.3 по сравнению с 4.0.3, spyder 2.3.5 по сравнению с 2.3.8)
Таким образом, мои текущие мысли должны получить большие вещи с sudo apt-get
, например. sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pytho
n-нос spyder
и затем обновите их (или по крайней мере некоторые из них) с sudo pip install -U
.
NB кажется довольно важным получить новое зернышко от зернышка (очень meta)
sudo apt-get install python-pip
sudo pip install -U pip
P.S. Я знаю о virtualenv, но у меня нет потребности в нем прямо сейчас. Мне нужна только одна среда разработки.
И вот немного сценария для дампа списка пакетов, версии и пути (но только работает над установленными модулями зернышка, не модулями из Кв. - добираются),
import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
print p