Конфликт двух версий 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
,