Остановить установку pip уже установленных зависимостей с помощью apt-get

Как убедиться, что пакеты, установленные с помощью pip, не устанавливают зависимости, уже установленные с помощью apt-get?

Например, в Ubuntu вы можете установить пакет Numpy, используя apt-get install python-numpy. Который устанавливается на:

usr/local/lib/python2.7/dist-packages 

Я заметил, что когда я устанавливаю пакет, для которого требуется numpy, используя, например, pip, pip install scipy вместо того, чтобы пропускать зависимость numpy, он снова устанавливается в другое место.

/usr/lib/python2.7/dist-packages

Что должен сделать pip, так это пропустить все пакеты python, установленные глобально, верно?


person MarkK    schedule 24.10.2015    source источник
comment
Ммм, нет. Что вам нужно сделать, так это перестать смешивать pip и apt :). Вы не можете ожидать, что менеджер пакетов будет знать о других менеджерах пакетов. Вместо этого вы должны позаботиться о том, чтобы не использовать два разных менеджера пакетов, которые пытаются установить один и тот же префикс.   -  person cel    schedule 24.10.2015
comment
Не смешивайте установки Ubuntu pip и apt. Даже если pip устанавливается в тот же каталог, Ubuntu не узнает о пакете, и вы можете перезаписать его, используя apt.   -  person Bakuriu    schedule 24.10.2015
comment
Я согласен с вашим комментарием, но этого нельзя избежать, иногда пакеты на apt-get предварительно скомпилированы, поэтому я хочу использовать их для установки и некоторых пакетов pip, а не во вселенной apt-get, поэтому мне нужно лучшее из обоих миров . Может быть, тогда мне следует спросить, как я могу установить pip в то же место, что и apt-get, может быть?   -  person MarkK    schedule 24.10.2015
comment
Есть и другие стратегии решения этой проблемы: многие пакеты Python, требующие компиляции, доступны в виде двоичных колес. Вы можете установить их с помощью pip вместо того, чтобы компилировать самостоятельно. Другая стратегия заключается в создании локального virtualenv, который знает о пакетах своего родителя.   -  person cel    schedule 24.10.2015
comment
Я использовал virtualenv, вы говорите, что можете создать его, зная об установке пакетов apt-get? Кроме того, мне было бы очень интересно услышать ответ, предлагающий/показывающий бинарные колеса?   -  person MarkK    schedule 24.10.2015


Ответы (1)


Ключевым моментом здесь является предотвращение установки нескольких менеджеров пакетов в одни и те же каталоги.

Одна из стратегий заключается в создании virtualenv, который знает о пакете своего родительского интерпретатора. Это можно сделать с помощью опции --system-site-packages.

virtualenv -p /usr/bin/python --system-site-packages py27
source py27/bin/activate

Эта среда не будет пустой по умолчанию. Вы можете сравнить /usr/bin/python -m pip list и python -m pip list.

См. также этот вопрос


Для многих (научных) пакетов также доступны колеса на pypi. Колеса уже бинарные и поэтому не нуждаются в дальнейшей компиляции.

person cel    schedule 24.10.2015