source для virtualenv под windows

Иногда бывает нужно сделать свой, небольшой локальный Python-мирок. Например, если мы пишем на djan­go и не хотим ставить пакеты глобально.

Это очень поможет, когда намного позже мы будем собирать инсталлятор к проекту. Мы сможем одной командой pip узнать, какие пакеты нужны.

Как это делается сейчас

Python 3 научился создавать vir­tualenv штатными средствами. Вот так:

python3 -m venv /path/to/new/virtual/environment

Дальше работаем через cyg­win (как описано дальше).

Или переходим/ставим виртуалку для Ubun­tu.

Как это делалось раньше

Официальная документация по djan­go советует vir­tualenv. Действия такие:

$ virtualenv env
$ source env/bin/activate

А потом мы работаем в этой папке, как если бы именно она была у нас системной.

Но если вы вынуждены работать под Win­dows (например, такова политика компании), то это невозможно — в языке консоли Win­dows нет команды source или её аналога. Да и в Pow­er­shell она сводится к запуску скрипта в определённом контексте.

Самый лучший выход для Python 2.x — поставить cyg­win. Он ставится быстро, осваивается за несколько минут (логические диски — это папки вида /cygdrive/c/, остальное как привыкли) и позволяет писать строго по инструкции.

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

Для начала — при установке укажите, что хотите поставить Lynx. Если вы забыли — просто запустите установку ещё раз и укажите нужный пакет, он сам докачает и положет в нужную папку.

Потом ставим скрипт apt-cyg, который эмулирует apt-get.

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

Теперь начинаем ставить командами в духе apt-get install wget (пока wget-а нет, он будет качать через lynx)

И дальше по инструкции для Python

Ставим пакеты, настраиваем и приступаем к работе. Или просто берём готовую сборку.

В процессе установки пакетов есть риск подорваться. Если попытаться поставить их через ez_setup.py, то внезапно узнаешь, что urllib2.HTTPError: HTTP Error 403: SSL is required.

Это связано с тем, что Pip поменял правила доступа к репозиторию. И давно обзавёлся своим инсталлятором:

apt-cyg curl # если ещё не ставил
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

Далее настраиваем, как положено, и наслаждаемся vir­tualenv.

  • Создать: mkvirtualenv my-first-env
  • Запустить: workon my-first-env
  • Завершить: deactivate
  • Удалить: rmvirtualenv my-first-env

BAT: Неизвестные факты из жизни пакетных файлов

Многие слышали про bat-файлы. Но не все знают что:

  1. Помимо BAT, были ещё CMD, WSH (Win­dows Script Host с поддержкой аж двух языков — JScript и VBScript), а чуть позже появился Pow­er Shell. JScript и VBScript интересны тем, что были намного сложнее и непонятнее BAT. Но и на них писали.
  2. BAT работали ещё в DOS-е, поэтому его выполняет command.com. А вот CMD — это более новый формат, его выполняет cmd.exe. Поэтому лучше использовать расширение CMD.
  3. BAT и CMD не понимают вложенный if (то есть if может быть только на 1 уровне). Поэтому чтобы сделать условия, приходится рисовать блок-схему и расставлять везде GO TO. Да-да, ту самую блок-схему, которую ещё во времена “Мифического человеко-месяца” рисовали уже после завершения проекта.
  4. @echo off нужно, чтобы bat-ник не писал вызовы на экран.
  5. rem — это строка комментария.
  6. Если написать в файле script1.bat строку script2 (причём script2.bat существует — т.е. мы вызываем его как команду), то script2.bat запустится, а script1.bat — прекратит выполнение. Чтобы не прекращал, надо писать EXEC script2.
  7. Переход в директорию, где лежит скрипт — cd %~dp0.
  8. Можно поставить cyg­win и наслаждаться *nix-овой командной строкой под Win­dows. Кстати, там можно вкладывать сколько угодно If-ов. А ещё можно поставить ActivePerl. К сожалению, писать скрипт прямо в командной строке у Perl под Win­dows не получится — не такой стандарт для кавычек.
  9. Параметры командной строки лежат в переменных  %1..%9. %0 — имя скрипта (без расширения). %10 и больше — нет.
  10. Включать-выключать сервисы из пакетных файлов — это просто:  Проверить:
    SC QUERY "XService" | find "RUNNING"
    IF not "%ERRORLEVEL%" == "0" GOTO StartService
    ................
    :StartService

    Запустить:

    NET START "XService"

    Остановить:

    NET STOP "XService"
  11. Откомпилировать и запустить пример для wxWid­get:
    • Cоздаём в каталоге, прописанном в AUTOEXEC, вот такой makesample.cmd
      @echo off
      make -f makefile.bcc
      for %%f in (*.exe) do start %%f
      exit
    • Заходим в каталог с файлами
    • Запускаем (нужно, чтобы был установлен компилятор make)