На довольно новой 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']
Попробуйте
python3 -m pip install ipython
для меня работающий
действительно ли нормально, что при выполнении пользовательской установки с зернышком, склонным - добираются, установленные пакеты не обнаруживаются? Известная ошибка?
Я просто погрузился в код зернышка и нашел что зернышко 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:
$ 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