зернышко не знает о Кв. - получают установленные пакеты

На довольно новой Ubuntu 16.04 я устанавливаю ipython с зернышком как пользовательская установка. Само зернышко было установлено от python-pip Пакет Ubuntu (8.1.1), и так является некоторыми зависимостями как пигменты или setuptools (20.7.0).

Мой вопрос: действительно ли нормально, что при выполнении пользовательской установки с зернышком, склонным - добираются, установленные пакеты не обнаруживаются? Известная ошибка?

Это - команда, которую я выполняю (как пользователь, не как корень):

$ pip install ipython

→ Я получаю загрузку многих пакетов от PyPI, включая setuptool (27.3.0) и Pygments (2.1.3). Я не думаю, что это - проблема версии, так как ipython требует setuptools>=18.5 только. Кстати, я также получаю жалобу, что зернышко должно быть обновлено к последней версии (8.1.2).

Еще более интригующий, когда я выполняю ту же команду снова, я получаю тот же процесс установки (единственная разница: колеса кэшируются). Вместо этого я ожидал бы зернышко, говоря мне, что ipython уже установлен.

Заметьте это нет сомнения, что ipython (версия 5.1.0) действительно установлен в моем ~/.local каталог, и это работает хорошо (единственная корректировка, которую я должен был внести, добавлял ~/.local/bin к PATH переменная в ~/.bashrc как упомянуто в специализированном вопросе).

Мне кажется, что что-то неправильно со способом, которым зернышко обнаруживает склонный - получают установленные пакеты, но я не могу выяснить что. Я пропускаю что-то очевидное?

Если это может помочь диагностике, это - путь модуля Python (Modelica является именем пользователя):

python -c "import sys; print sys.path"
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/modelica/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/omniORB/COS', '/usr/lib/python2.7/dist-packages/gtk-2.0']
2
задан 13 April 2017 в 15:24

2 ответа

Попробуйте

python3 -m pip install ipython

для меня работающий

0
ответ дан 2 December 2019 в 04:53

действительно ли нормально, что при выполнении пользовательской установки с зернышком, склонным - добираются, установленные пакеты не обнаруживаются? Известная ошибка?

Я просто погрузился в код зернышка и нашел что зернышко list управляйте фильтрует список пакетов, обеспеченных pkg_resources. WorkingSet (), который в свою очередь получает его записи от sys.path. Результат - это pip --list также перечислит системные пакеты, установленные APT. Но это не означает, что зернышко должно управлять этим пакеты.

Зернышко и APT работают по-другому, начиная с того, где они устанавливают на: победите установки глобально на /usr/lib/pythonX.Y/site-packages или /usr/local/lib/pythonX.Y/dist-packages (в зависимости от версии) и локально к ~/.local/lib/pythonX.Y/site-packages, в то время как основанные на APT инструменты устанавливают глобально на /usr/lib/pythonX.Y/dist-packages.

Эта причуда касается проектного решения разработчиками Debian для предотвращения конфликтов между пакетами, обеспеченными ими, и пакеты, полученные другими средствами (этот ответ Переполнения стека указал на меня в правильном направлении).

Так не, это не ошибка, на которой зернышко позволяет Вам установить пакеты ~/.local/lib/pythonX.Y/site-packages даже если пакет уже установлен в /usr/lib/pythonX.Y/dist-packages.


Позволяет посмотрите со своим ipython примером. Я также установил его ранее с APT:

Пакет DEB

$ dpkg --get-selections | grep ipython
ipython                     install

$ dpkg -s ipython | grep Version
Version: 2.4.1-1

$ dpkg-query -L ipython
(...)
/usr/lib/python2.7/dist-packages
(...)
/usr/bin/ipython
(...)

Пакет зернышка

$ pip show -f ipython
(...)
Name: ipython
Version: 5.3.0
(...)
Installer: pip
(..)
Location: /usr/local/lib/python2.7/dist-packages
Files:
  ../../../bin/ipython

Примечание: ../../../bin/ipython заканчивает тем, что был /usr/local/bin/ipython.

Команда whereis дает мне обоих экземпляры IPython:

$ whereis -b ipython
ipython: /usr/bin/ipython /usr/local/bin/ipython

И я мог все еще получить третий IPython на ~/.local если я хотел!


Еще более интригующий, когда я выполняю ту же команду снова, я получаю тот же процесс установки (единственная разница: колеса кэшируются). Вместо этого я ожидал бы зернышко, говоря мне, что ipython уже установлен.

Это кажется нечетным действительно. Вот то, что я наблюдал до сих пор: когда пакет был уже установлен зернышком локально, это, кажется, устанавливает каждый раз (это всегда производило "Успешно установленный {пакет}"), но это действительно, кажется, просто изменяет dist-информацию о пакетах. Например, я пытался установить lxml локально (любой с pip install lxml или pip install --user lxml) пару раз:

Сравните метку времени сначала lxml установка с той после последней lxml "установки":

1.

myusr@myhost:~$ ls -al .local/lib/python2.7/site-packages | grep lxml
drwxrwxr-x  5 myusr mygroup  4096 feb 20 15:01 lxml
drwxrwxr-x  2 myusr mygroup  4096 feb 20 15:01 lxml-3.7.3.dist-info

2.

myusr@myhost:~$ ls -al .local/lib/python2.7/site-packages | grep lxml
drwxrwxr-x  5 myusr mygroup  4096 feb 20 15:01 lxml
drwxrwxr-x  2 myusr mygroup  4096 feb 20 15:03 lxml-3.7.3.dist-info

Однако, когда каждый пытается установить пакет глобально, зернышко действительно показывает сообщение:

Requirement already satisfied (use --upgrade to upgrade): ipython in /usr/local/lib/python2.7/dist-packages

1
ответ дан 2 December 2019 в 04:53

Другие вопросы по тегам:

Похожие вопросы: