Использование разных версий Python


21

Фон :

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

Я использую FC 13, поэтому он поставляется с Python 2.6, предварительно установленным в /usr/bin/python2.6и /usr/lib/python2.6.

Я установил python 2.5 из исходного кода, и, чтобы все было в порядке, я использовал --prefix=/usrопцию, которая установила python в /usr/bin/python2.5и /usr/lib/python2.5.

Теперь, когда я запускаю pythonподсказки, я использую версию 2.5. Однако у меня возникли некоторые проблемы с установкой.

Управление пакетами :

Используя easy_install, пакеты всегда устанавливаются в /usr/lib/python2.6/site-packages/. Я скачал setuptools.egg для Python 2.5 и попытался установить его, но он выдает ошибку:

/usr/lib/python2.5/site-packages does NOT support .pth files

Кажется, что python2.5 не в моей PYTHONPATH. Я думал, что установка по умолчанию добавит себя в PYTHONPATH, но когда я пишу echo $PYTHONPATHв Promt, я просто получаю пустую строку.

Ответы:


20

Рекомендуемый способ установки нескольких версий Python - это установить каждую из исходных текстов - они будут счастливо сосуществовать вместе. Затем вы можете использовать virtualenv с соответствующим интерпретатором для установки необходимых зависимостей (используя pip или easy_install). Хитрость в упрощении установки нескольких переводчиков из источника заключается в использовании:

sudo make altinstall

вместо более обычной "sudo make install". Это добавит номер версии к исполняемому файлу (таким образом, у вас будет python-2.5, python-2.6, python-3.2 и т. Д.), Что предотвратит любые конфликты с системной версией Python.


2
Altinstall + virtualenv = Нирвахна развития питона. Благодарность!
Алекс

13

Это звучит как идеальное приложение для virtualenv , очень популярного инструмента для создания изолированных сред Python. Это пример команды для указания версии Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv

Я не думаю virtualenv, что решение в этом случае. Смотри мой ответ.
Петр Доброгост

5

Используя easy_install, пакеты всегда устанавливаются в /usr/lib/python2.6/site-packages/

Это потому, что distutils добавляет строку shebang ко всем устанавливаемым скриптам. Если вы запускаете easy_installскрипт напрямую, он исполняется с интерпретатором, с которым он был установлен (согласно строке shebang). Который easy_installзапускается, зависит от того, PATHнет ли PYTHONPATH. Если вы хотите установить пакет в экземпляре Python 2.5, вы должны запустить, easy_installуказав интерпретатор Python для использования:

/usr/bin/python2.5/python easy_install ...

Строго говоря, virtualenvздесь не помогает, поскольку он должен быть создан в контексте базового Python, что является точно такой же проблемой, как и при запуске easy_install. Вот для чего --pythonаргумент virtualenv. По какой-то причине easy_installне предоставляет аналогичный аргумент, поэтому он должен быть запущен с определенным интерпретатором Python, как показано выше.


Это мой первый ответ здесь, и я надеюсь, что первый значок Некроманта также :)
Петр Доброгост

Очень хорошее объяснение, спасибо! Знак Некроманта хорошо заработал;)
Алекс

2

Я также использую Fedora 13 и PYTHONPATHне установлен.

В Python sys.pathпредоставит вам список путей, используемых для импорта скриптов.

Я не знаком с тем, как easy_installрешается каталог назначения, но я уверен, что будет аргумент командной строки, который вы могли бы дать.

Попробуйте указать, под какой версией Python работать, указав easy_installперед вашей командой полный путь к нужному вам питону.

Также проверьте, easy_installявляется ли символическая ссылка в bin на скрипт в одной версии Python, которую вы установили.


1

Virtualenv определенно находка здесь.

В моей настройке переменная окружения VIRTUALENV_USE_DISTRIBUTEустановлена ​​на 1, так что вместо setuptools используется более современный пакет Distribute. Я создал виртуальные среды для двух версий Python в моей системе следующим образом:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Затем я создал три псевдонима .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Таким образом, я могу использовать, py2чтобы перейти к стандартному Python 2.6 и py3перейти к стандартному Python 3.2. Ввод idleбудет выполняться в зависимости от версии IDLE, подходящей для виртуальной среды, в которой я нахожусь.

Установка пакетов в одну из этих виртуальных сред обычно включает в себя pip installкоманду.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.