Конфликт двух версий Python в Ubuntu Oneiric 11.10: Ошибка импорта: Нет модуля

Я установил Python 2.7.5, используя make install not altinstall

Раньше это было 2.7.2+

Теперь, когда я запускаю Python, он дает

ImportError: cannot import name MAXREPEAT

Я знаю, что здесь уже есть записи, связанные с этим. Но я не установил virtualenv, как раньше.

Если я бегу python2.7Работает отлично. Теперь, когда я пытаюсь импортировать библиотеку, подобную mysqldb, она говорит, что модуль не существует. я установил его перед установкой python2.7.

Каково решение? Должен ли я удалить весь python или, вернее, как я должен удалить только python2.7.5 или я должен оставить это? Если я сохраню это, то как мне импортировать эти модули?

** Последнее обновление **

me@me:/usr/local/bin$ dir python2*
python2  python2-config  python2.7  python2.7-config

А ТАКЖЕ:

/usr/local/bin$ ls -l
total 1776
-rwxrwxr-x 1 root root     101 Jul 17 20:17 2to3
-r-xr-xr-x 1 root root    7223 Mar 31 20:47 config_data
-rwxr-xr-x 1 root root     299 Jul 18 20:53 easy_install
-rwxr-xr-x 1 root root     307 Jul 18 20:53 easy_install-2.7
-rwxrwxr-x 1 root root      99 Jul 17 20:17 idle
-r-xr-xr-x 1 root root    3910 Mar 31 20:47 json_pp
-r-xr-xr-x 1 root root     487 Mar 31 20:47 package-stash-conflicts
-rwxr-xr-x 1 root root     281 Jul 17 19:51 pip
-rwxr-xr-x 1 root root     289 Jul 17 19:51 pip-2.7
-rwxrwxr-x 1 root root      84 Jul 17 20:17 pydoc
lrwxrwxrwx 1 root root       7 Jul 18 23:04 python -> python2
lrwxrwxrwx 1 root root      14 Jul 18 23:04 python-config -> python2-config
lrwxrwxrwx 1 root root       9 Jul 18 23:04 python2 -> python2.7
lrwxrwxrwx 1 root root      16 Jul 18 23:04 python2-config -> python2.7-config
-rwxr-xr-x 1 root root 1737376 Jul 18 23:03 python2.7
-rwxr-xr-x 1 root root    1674 Jul 18 23:04 python2.7-config
-rwxrwxr-x 1 root root   18547 Jul 17 20:17 smtpd.py
-rwxr-xr-x 1 root root     316 Jul 18 21:10 virtualenv
-rwxr-xr-x 1 root root     324 Jul 18 21:10 virtualenv-2.7

переустановит ли это решение проблемы получения и запуска версии 2.7.2+ в Ubuntu по умолчанию?: https://launchpad.net/ubuntu/oneiric/+source/python-defaults/2.7.2-7ubuntu2

* До обновления *

Теперь я могу запустить Python из Bash

Вот новая проблема. и это с каждым модулем, который я устанавливаю, используя pip.

существующие модули из lib могут быть импортированы, но новые установленные не могут быть:

me:~$ sudo pip install requests
Downloading/unpacking requests
  Downloading requests-1.2.3.tar.gz (348kB): 348kB downloaded
  Running setup.py egg_info for package requests

Installing collected packages: requests
  Running setup.py install for requests

Successfully installed requests
Cleaning up...
me:~$ python -i
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>>

После проверки версии Python он запускается локально, на наличие конфликтов:

me:~$ python
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
me:~$ sudo python
[sudo] password for me:
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
me:~$ which python
/usr/local/bin/python
me:~$ sudo which python
/usr/local/bin/python
me:~$ sudo which python2.7
/usr/local/bin/python2.7
me:~$ which python2.7
/usr/local/bin/python2.7

Я думаю, что это работает так же. а потом..

me:/usr/local/bin$ dir python2.7
python2.7
me:/usr/local/bin$ cd /usr/bin
me:/usr/bin$ dir python2.7
python2.7

me:/bin$ cd /usr/bin
me:/usr/bin$ dir python
python

me:/usr/local/bin$ dir python
python
me:/usr/local/bin$ dir python2.7
python2.7

Также проверьте следующее:

~$ which pip
/usr/local/bin/pip

Хорошо, теперь я установил virtualenv, и это то, что я сделал

(foldername)me@me:~/caller$ sudo pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.7/dist-packages
Cleaning up...
(foldername)me@me:~/caller$ python -i
Python 2.7.2+ (default, Jul 20 2012, 22:15:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

И теперь мы видим, что 2.7.2+ снова вернулся! Так что же происходит сейчас?? что случилось?

Удаление старого Python из Linux не рекомендуется. Так как я могу запустить virtualenv с 2.7.5 на нем, а не 2.7.2+?!

3 ответа

При установке python используйте следующие шаги
используя префикс, чтобы указать каталог установки

 ./configure --prefix=/scratch/bin/
 make
 sudo make install

Тогда каждый раз, когда вы запускаете новый терминал, вы должны указать

export PATH="$PATH:/scratch/bin/"

сказать, где находится каталог установки Python

Таким образом, вы можете использовать любое количество питонов

pip программа на Python Когда ты бежишь pip из командной строки он использует определенный исполняемый файл Python для запуска программы. pip установит модули там, где их сможет найти исполняемый файл Python.

Когда ты бежишь sudo pip install some_packageОС просматривает строку shebang, чтобы определить, какой исполняемый файл Python нужно запустить.

Типwhich pipи посмотрите на первую строку в файле, чтобы увидеть, с каким исполняемым файлом Python он связан.

Чтобы установить пакеты для вашего нового python2.7.5, вы можете установить новыйpip , Или вы можете просто запустить /usr/local/bin/python pip ..., но я думаю, что самый простой способ управлять несколькими установками Python - это использовать virtualenv.

Если вы используете virtualenv (что я очень рекомендую), то новый pip устанавливается автоматически, поскольку это одна из его зависимостей. Если вы пойдете по этому пути, я бы порекомендовал также установить virtualenvwrapper.

Если вы устанавливаете пункт глобально, обратите внимание на строку

python get-pip.py

или же

python setup.py install

Исполняемый файл python, который вы используете в этой строке, устанавливает "связь" между этой версией pip и этой версией python.


Как использовать checkinstall для удаления пользовательского Python:

sudo apt-get install libsqlite3-dev libgdbm-dev liblzma-dev checkinstall
sudo apt-get build-dep python

http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
tar xvjf Python-2.7.5.tar.bz2
cd Python-2.7.5
# inspect the options
./configure --help  
./configure
make
make test
sudo checkinstall -D --fstrans=no make install

# Accept the default answers EXCEPT that you MUST change the name to something
# other than python. That way, the name of your custom package does not conflict
# with the name of Ubuntu's "python" package

        Should I create a default set of package docs?  [y]: 
        Enter a number to change any of them or press ENTER to continue: 2
        Enter new name: 
        >> python275

        Copying files to the temporary directory...OK
        # wait, wait, wait...

# python2.7.5 is now installed in /usr/local/bin
# remove it with:
sudo dpkg -r python275

Вы установили его с помощью apt-get или собраны из исходников?

Вы уверены, что установка успешно завершена, если она построена из исходных текстов? Обычно для сборки Python из исходников необходимо выполнить следующие шаги

  • ./configure
  • make
  • sudo make install (sudo может не потребоваться, но скрипт make попытается изменить файлы в /usr/ каталог.

в вашем каталоге исходников Python. Последняя команда, среди прочего, копирует Python в /usr/ каталог. Если вы хотите, чтобы он был установлен в другом месте, вам нужно будет пройти --path=XXX (если я не ошибаюсь) ./configure,

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