2013-10-08 3 views
5

Итак, у меня был python 2.7.2 на моем сервере, и мне нужно было его обновить до python 2.7.3. Поэтому я попытался удалить версию 2.7.2, а затем установить новую, используя источники. Я не смог удалить версию 2.7.2, потому что система использует ее для запуска важных сервисов на сервере, поэтому я установил версию 2.7.3 в надежде, что после этого я смогу удалить старую версию. Тем не менее я не могу удалить старую версию, хотя я могу выполнить python 2.7.3, когда устанавливаю какой-либо модуль, я не могу его импортировать. Я добавил путь к sys.path, и я начал находить модуль, но импорт его вызывает другие ошибки.Конфликтные версии python в ubuntu

Мой питон выполняет/usr/local/bin/python, который является версией 2.7.3, где возникают проблемы. Если я пытаюсь выполнить python, как этот/usr/bin/python, он запускает старую версию, и там все отлично работает, я могу импортировать новые установленные модули.

Так что я могу сделать, чтобы сделать работу python 2.7.3?

Я искал много учебников и попытался вещи, как добавить библиотеку в .pth файлов на Python и я начал находить модули, но при импорте его я получаю ошибки как это:

>>> import numpy 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module> 
    import add_newdocs 
    File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module> 
    from numpy.lib import add_newdoc 
    File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 4, in <module> 
    from type_check import * 
    File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 8, in <module> 
    import numpy.core.numeric as _nx 
    File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 5, in <module> 
    import multiarray 
ImportError: /usr/local/lib/python2.7/dist-packages/numpy/core/multiarray.so: undefined symbol: PyUnicodeUCS4_AsUnicodeEscapeString 

Спасибо за помощь

EDIT Проблема, решаемая

Так, чтобы решить недостающие импорта модулей я создал файл .pth под /usr/local/lib/python2.7/site-packages/ с каталогами, где питон модули и питон начинает их находить. Чтобы устранить проблемы comptability вы можете установить питон из источников и указать Юникод делает ./configure --enable-Юникоду больше

информации here

+0

Какой версия Ubuntu точно? И вам конкретно нужно 2.7.3 или будет более новый, например 2.7.5? –

+0

'sudo apt-get install python2.7-dev'? – J0HN

+0

$ cat/etc/issue Ubuntu 11.10 Пользователи запросили версию 2.7.3, но они сказали, что что-то под 3.0 сделало бы работу. В этот момент я был бы счастлив, если бы получил 2,7.5, делая все правильно. python2.7-dev уже установлен и ничего не разрешил. –

ответ

2

Похоже, что модули, которые вы установили, были созданы против вашей старой версии Python или, по крайней мере, версии, несовместимой с вашей новой установкой. Ошибка импорта, которую вы видите внизу, - это модуль numpy, который ищет символ, который отсутствует в вашей версии 2.7.3. Существует дополнительная информация here.

Если возможно, проще всего обновить Python с помощью диспетчера пакетов. Таким образом, если что-либо в вашей системе зависит от Python, но не нужно точно 2.7.2, то Python можно легко обновить, не нарушая ничего. Я предполагаю, что на вашем сервере нет более новой версии Python, и вы не можете добавлять новые репозитории или у вас нет доступа к диспетчеру пакетов. Если использование пакетов возможно, я хотел бы продолжить и удалить то, что вы создали из источника (команда должна быть «make clean», если Python использует GNU Make).

Если это не вариант, тогда должен быть способ скомпилировать Python, но не устанавливать его в системные каталоги. Затем вы можете добавить символическую ссылку для пользователей и убедиться, что symlink имеет приоритет на своем пути.

+0

Благодаря указанию на несовместимые проблемы, я сделал новую установку, используя другой pyunicode, и это решило проблему. –

5

никогда не связываться с системой питоном, EVER.

Что вам нужно сделать, это установить python 2.7.3 с -prefix в свой домашний каталог, а затем использовать virtualenv -p /home/myuser/path/to/python.

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

+0

Спасибо за идею, которую я уже прочитал об этом, но проблема в том, что я должен помещать сервер в работу для людей, которые не настолько удобны с чем-то большим, чем выполнение скрипта python, выполняющего python script_name –

+0

@JorgeSilva: затем активируйте virtualenv в их .bashrc –

+0

Кажется, что это хорошее решение, чтобы попробовать позже, я отвечу позже. Спасибо –

2

При установке питона используйте следующие шаги
с помощью префикса указать папку установки

./configure --prefix=/usr/bin/python 
make 
make install 

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

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

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

Этот способ u может использовать любое количество питонов

0

Вы можете установить python libs из R. Это работает для меня.

Например, чтобы установить Numpy библиотеки из типа R:

system('python -m pip install -U numpy') 
Смежные вопросы