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

Предпосылки :

Поскольку я разрабатываю программы 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, я просто получаю пустую строку.

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

 sudo make altinstall 

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

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

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

Используя 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, как показано выше.

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

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

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

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

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

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 подходит для виртуальной среды, в которой я находилась.

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