Как заставить систему видеть только что установленный Python 2.7.8 на Ubuntu 12.04 (точный)

Вывод: некоторые утилиты не работают после того, как я установил более новую версию 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), которые я также недавно создал. У меня была эта проблема и с терминала, но я решил ее в соответствии с

https://sites.google.com/site/opensourceconstriubtions/ettl-martin-1/tutorials/how-to-solve-following-error-when-starting-a-wxwidgets-application-libwx_gtk2u_adv-3-x-so-0-cannot-open-shared-object-file-no-such-file-or-directory

Как я могу заставить 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/.

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


person jpf    schedule 25.09.2014    source источник
comment
Возможно, вам поможет этот пост: ‹askubuntu.com/questions/339569/› Martin   -  person MartinP    schedule 25.09.2014