Вывод: некоторые утилиты не работают после того, как я установил более новую версию Python на свой компьютер с Ubuntu. Почему?
Мой единственный опыт работы с Linux — это Ubuntu 12.04, и до сих пор я полагался на apt-get в основном для установки пакетов (т. е. очень мало опыта работы с ./configure && make && sudo make install).
Более поздние версии python не доступны через apt-get, поэтому я скачал установленный python 2.7.8 с вашим типичным
./configure && make && sudo make install
Теперь у меня практически нет знаний об управлении пакетами, так что, имея это в виду...
По какой-то причине мне пришлось вручную заменить символическую ссылку python в /usr/bin соответствующей ссылкой на новый двоичный файл (я думал, что установка сделает это). Между прочим, на моей машине до сих пор стоит Python 2.7.3.
i.e.
cd /usr/bin
sudo rm python
ln -s /location/of/new/python python
Теперь, готовясь к написанию совершенно другого вопроса, я хотел подтвердить свою версию Ubuntu с помощью
lsb_release -a
но я получаю
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 26, in <module>
import lsb_release
ImportError: No module named lsb_release
У меня такое ощущение, что это будет продолжаться со многими утилитами, пока я не смогу каким-то образом сказать своей системе, чтобы она увидела установленные (apt-get) модули Python в Ubuntu.
Например, у меня был установлен и работал pip, но теперь, если я наберу
pip install lsb_release
Traceback (most recent call last):
File "/usr/bin/pip", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
Есть ли простой (или нет) способ решить все эти проблемы с зависимостями?
Теперь у меня работает IDLE с новым Python 2.7.8 после установки tk-dev
sudo apt-get install tk-dev
(ранее работало без этого шага)
но если я открою скрипт Python с помощью IDLE, щелкнув правой кнопкой мыши и перейдя в IDLE, он не увидит мои библиотеки wxPython (wx), которые я также недавно создал. У меня была эта проблема и с терминала, но я решил ее в соответствии с
Как я могу заставить IDLE видеть модули wx, когда я щелкаю правой кнопкой мыши файл python и перехожу в IDLE? Если я запускаю IDLE из терминала, он может увидеть модуль wx (т.е. import wx
работает).
Я знаю, что этот вопрос повсюду, но я не уверен, с чего начать.
Спасибо.
Дополнительная информация, которая может иметь значение:
which python
/usr/bin/python
python --version
Python 2.7.8
python -m site
sys.path = [
'/usr/lib/python2.7',
'/usr/local/lib/python27.zip',
'/home/jpf/src/Python-2.7.8/Lib',
'/home/jpf/src/Python-2.7.8/Lib/plat-linux2',
'/home/jpf/src/Python-2.7.8/Lib/lib-tk',
'/home/jpf/src/Python-2.7.8/Lib/lib-old',
'/home/jpf/src/Python-2.7.8/build/lib.linux-i686-2.7',
'/home/jpf/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/site-packages/wx-3.0-gtk2',
'/usr/local/lib/python2.7/dist-packages',
'/usr/local/lib/python2.7/dist-packages/wx-2.9.4-gtk2',
]
(У него правильно установлены две версии wxPython.) Но вот где это выглядит несовместимым для меня...
locate lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.pyc
/usr/lib/python3/dist-packages/lsb_release.py
/usr/share/pyshared/lsb_release.py
Расположение модуля Python lsb_release — /usr/lib/python2.7/dist-packages
, в то время как python, похоже, ищет в /usr/local/lib/python2.7/dist-packages
. Что я сделал не так?
Частичный ответ
Начал понимать проблему, и, как и ожидалось, это связано с моим незнанием того, как работают Linux и Ubuntu.
Когда в Ubuntu администратор устанавливает данный связанный с python модуль python через sudo apt-get install python-module
, он помещается в /usr/local/lib/pythonX.Y/dist-packages
. Когда администратор устанавливает программу на Python с помощью того же метода, она оказывается в папке /usr/lib/pythonX.Y/dist-packages
. Например, когда я устанавливал pip, я устанавливал через sudo apt-get install python-pip
. Это создало каталог /usr/lib/python2.7/dist-packages/pip
. Когда я установил xlwt
с помощью pip, был создан каталог /usr/local/lib/pythonX.Y/dist-packages/xlwt
. Это может быть не жесткое и быстрое правило, но кажется, что по крайней мере модули Python, установленные с помощью apt-get или pip, устанавливаются в /usr/local/lib/pythonX.Y/dist-packages
.
Это контрастирует с местоположением site-packages /usr/local/lib/pythonX.Y/site-packages
(/usr/lib/pythonX.Y/site-packages
не существует), куда пакеты добавляются, когда администратор устанавливает пакет вручную, как я сделал с wxPython 3.0 (см. /usr/local/lib/python2.7/site-packages/wx-3.0-gtk2
выше, в отличие от из /usr/local/lib/python2.7/dist-packages/wx-2.9.4-gtk2
, который я установил со специальными инструкциями по интеграции в диспетчер пакетов Ubuntu).
Это описано здесь:
В чем разница между dist-packages и site-packages? а>
С этим связана разница между /usr/lib
и /usr/local/lib
, описанная здесь:
В чем разница между /usr/local/lib/python2.6 и /usr/lib/python2.6?
Свежеустановленный Python 2.7.8 не «видел» каталог /usr/lib/python2.7/dist-packages/
, в котором находится необходимый модуль lsb_release
, потому что он не был настроен на его просмотр через диспетчер пакетов (через apt-get
). Поскольку я установил его вручную (то есть с ./configure && make && make install
), он увидел только /usr/local/lib/python2.7/
.
Я бы удалил этот вопрос, но, возможно, он будет полезен для кого-то другого новичка. Админы, пожалуйста, не стесняйтесь стереть, если это уместно.