Використання різних версій 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, але коли я пишу 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 = розвиток пітона nirvahna. Спасибі!
Олексій

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_USE_DISTRIBUTEвстановлена ​​на 1, так що більш сучасний пакет Distribute використовується замість setuptools. Я створив віртуальні середовища для двох версій 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.