- Как протестировать программы в чистом окружении Python?
- Вы хотите попробовать программу или библиотеку но нехотите менять текущую установку питона?
- Как создать несколько различных сред питона для разных задач?
Ответ такой: Виртуальная среда.
Оригинал статьи здесь.
Для этих задач можно использовать несколько решений:
- Создать полностью изолированную среду при помощи программы virtualenv которая создаст копию вашей текущей установки питона.
- pyenv - инициализирует виртуальную среду, но при этом будет использовать текущую установленную версию питона.
- Комбинация virtualenv для создания изолированной среды и активация при запуске програм с помощью pyenv.
- Поискать другие решения ...
Отличительная особенность pyenv в том что она не только настраивает "sys.prefix" но и устанавливает переменный окружения "$PYTHONPAH" и "$HOME". Если скрипт запущенный с помощью pyenv запустит в свою очередь еще один скрипт, то вновь запущенный получит в наследие установленные переменный среды, что позволит ему видеть виртуальную среду тоже.
Рассмотрим использование pyenv на примере тестирования билиотеки XPyLIB.
Создадим в домашнем каталоге директорию для виртуальной среды:
~$ mkdir ENV ~$ mkdir ENV/home ~$ mkdir ENV/usr ~$ mkdir ENV/temp
- "ENV" - корневая виртуальная папка.
- "ENV/home" - виртуальная домашняя папка пользователя.
- "ENV/usr" - виртуальная директория-префикс (как sys.prefix) для библиотек.
- "ENV/temp" - временная папка.
Загрузим и распакум библиотеку XPyLIB в директорию "ENV/temp". Для упрощения использования скопируем скрипт "pyenv.py" из "ENV/temp/XPyLIB/XPyTools/scripts/" в вашу домашнюю бинарную директорию "~/bin" и разрешим "pyenv.py" исполнятся.
Теперь мы готовы что бы начать использовать виртуальную среду.
Посмотрим окружение среда ENV при помощи команды:
~$ pyenv.py --env-path ~/ENV/usr --user-home ~/ENV/home --activate-env --add-bin-path --dump *** PYENV DUMP *** SYS.PREFIX = "/home/alex/ENV/usr" PYTHONPATH = "/home/alex/ENV/usr/bin:/home/alex/ENV/usr/lib/dist-packages:/home/alex/ENV/usr/lib/python2.6/dist-packages: /home/alex/ENV/usr/lib/site-packages:/home/alex/ENV/usr/lib/python2.6/site-packages" HOME = "/home/alex/ENV/home" SYS.PATH = ['/home/alex/ENV/usr/bin', '/home/alex/ENV/usr/lib/python2.6/site-packages', '/home/alex/ENV/usr/lib/site-packages', '/home/alex/ENV/usr/lib/python2.6/dist-packages', '/home/alex/ENV/usr/lib/dist-packages', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/Numeric', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6', '/usr/local/lib/python2.6/dist-packages/virtualenv-1.3.3-py2.6.egg'] *** PYENV DUMP END ***
Использованы следующие опции:
- "--env-path" - указывает путь виртуальной среды для добавления пакетов в "sys.path".
- "--user-home" - домашняя папка пользователя - устанавливает переменную среды "$HOME".
- "--activate-env" - активирует виртуальную среду - настраивает "sys.prefix".
- "--add-bin-path" - Добавляет бинарные пути ("bin" для *nix, и "scripts" для windows). По умолчанию в питоне эти пути никуда не добавляются.
- "--dump" - печатает в консоль пути виртуальной среды.
Другие полезные опции:
- "--remove-path-contain" - удаляет из "sys.path" пути содержащиее указанный путь. Например если у вас есть установленная библиотека XPyLIB в реальном питоне, а вы хотите протестировать новую не меняя старую, то можно ссылку на старую библиотеку удалить командой "--remove-path-contain XPyLIB.
- "--no-site-packages" - удаляет из "sys.path" все старые (реальнаю установка питона) пути к пакетам.
- "--add-path" - добавляет дополнительные пути.
- "--add-site" - добавляет дополнительные пути как "site.addsitedir()".
- "--exec" или"-c" - выполняет командную строчку (как питон).
- "--module" или "-m" - выполняет модуль (как питон).
- "--help" - отображает помощь по командам.
Теперь сменим текущую директорию на директорию с распакованной библиотекой XPyLIB и установим эту самую библиотеку в нашу виртуальную среду ENV.
~$ cd ENV/temp/XPyLIB ~/ENV/temp/XPyLIB$ pyenv.py --env-path ~/ENV/usr --user-home ~/ENV/home --activate-env --add-bin-path setup.py install ... ... ... ~/ENV/temp/XPyLIB$ cd ~ ~$
Библиотека установилась по следующему пути:
ENV /
usr /
lib /
python2.6 /
site-packages /
XPyLIB /
XPyTools /
XPyLIB-0.1.2-py2.6.egg-info
После установки выполним команду:
~$ pyenv.py --env-path ~/ENV/usr --user-home ~/ENV/home --activate-env --add-bin-path -c "import XPyLIB; print XPyLIB.dir_root" /home/alex/ENV/usr/lib/python2.6/site-packages/XPyLIB ~$
Команда отобразит корневой путь куда установлена библиотека XPyLIB: "/home/alex/ENV/usr/lib/python2.6/site-packages/XPyLIB".
Запустим оболочку IDLE в виртуальной среде ENV:
~$ pyenv.py --env-path ~/ENV/usr --user-home ~/ENV/home --activate-env --add-bin-path -m idlelib.idle ... ...
После выхода из IDLE попробуем запустить модуль "timetest" из библиотеки:
~$ pyenv.py --env-path ~/ENV/usr --user-home ~/ENV/home --activate-env --add-bin-path -m XPyLIB.timetest --example ... ...
В виртуальной домашней директории "ENV/home/.xpylib/timetest/current.timetest" можно посмотреть вывод этого модуля.
Комментариев нет:
Отправить комментарий