Python Встановлення та Налаштування

Python 2.6 final вийшов вже досить давно, тому потрохи переходжу на його використання. Проте виникає кілька але.
  • Відсутність потрібних мені пакетів для версії 2.6. Найсерйозніша проблема. По досвіду перехід на нову версію може зайняти 1-2 роки(принаймі так було з 2.5, Zope наприклад на 2.5 так ще не перейшов). Зауважу що в віконечках (Windows) я звик використовувати ActiveState-івський дистрибутив, а не Python.org, основна модифікація ActiveState це наявність з коробки пакету PyWin32, 212-й білд має підтримку 2.6.
  • Повязане з першим пунктом потреба використовувати одночасно кілька версій інтерпритатора 2.5, 2.6, а іноді й 2.4. 

Тому поділюся власним досвідом з налаштування інтерпритатора cmd для своїх потреб, під Віконечками (Windows XP, для Vista є деякі відмінності, читайте постскриптум).
Першим кроком тягнемо дистрибутив і встановлюємо як будь-яку звичну програму для Windows.

Для використання 2.6 спільно з 2.5, я написав кілька командних скриптів:
1. Головний скрипт запуску потрібної версії run25.cmd та run26.cmd для Python 2.5 та 2.6 відповыдно(дивіться вкладені файли  run25.cmd.txt run26.cmd.txt до статті, видаліть тільки в нього розширення .txt):

@echo off
Setlocal Enabledelayedexpansion
if NOT DEFINED PYTHON_VERSION (
    set PYTHON_VERSION=2.6       
    call set_vars.cmd    
) ELSE (
    echo WARNING!!! Python interpreter already defined in current system
    echo redefinition was skipped    
)
Setlocal Disabledelayedexpansion

cmd /k

Далі коротке пояснення:

@echo off - виключаємо вивід команд на екран. @ перед командою означає що вона теж не виводитиметься.

Setlocal Enabledelayedexpansion - цей рядок вмикає авторозширення команд, за допомогою знаку '!', це потрібно в set_vars.cmd

if NOT DEFINED PYTHON_VERSION ... ELSE- перевірка на те чи вже не було вже запущено цей скрипт, windows має обмеження на довжину змінних оточення, якщо що разу додавати до змінної PATH наші шляхи, то швидко перевищимо цю межу.

Setlocal Disabledelayedexpansion - вимикаємо авторозширення команд.

set PYTHON_VERSION=2.6 - створюємо змінну середовища PYTHON_VERSION і присвоюэмо їй значення 2.6
call set_vars.cmd - Викликаємо скрипт
set_vars.cmd.

echo WARNING!!! Python interpreter already defined in current system
    echo redefinition was skipped  - Діагностичне повідомлення що викликаємо скрипт вдруге.

cmd /k - виклик cmd викличе для нас інтерпритатор в інтерактивному режимі, щоб ми могли вводити свої команди. Опція /k додана щоб інтерпритатор не виводив версію операційної системи при запуску. 

Текст set_vars.cmd:

IF %PYTHON_VERSION% == 2.5 goto PYTHON25
IF %PYTHON_VERSION% == 2.6 goto PYTHON26
goto UNDEFINED

:PYTHON25
    call  "%VCToolkitInstallDir%vcvars32.bat"
    title Python 2.5    
    set PYTHONBASEPATH=C:\Python25\
    goto SETUPVARS    
:PYTHON26
    call  "%VS90COMNTOOLS%vsvars32.bat"
    title Python 2.6    
    set PYTHONBASEPATH=c:\Python26\
    goto SETUPVARS
:UNDEFINED
    echo Python version undefined. There is nothind to set.
    goto END
:SETUPVARS
    set INCLUDE=%INCLUDE%;!PYTHONBASEPATH!include\;
    set LIB=%LIB%;!PYTHONBASEPATH!libs\;
    set PYTHONPATH=!PYTHONBASEPATH!;!PYTHONBASEPATH!DLLs\;!PYTHONBASEPATH!Lib\;!PYTHONBASEPATH!Lib\site-packages\
    set PATH=
%PATH%;!PYTHONBASEPATH!;!PYTHONBASEPATH!Scripts; 
:END

Пояснення:

IF %PYTHON_VERSION% == 2.5  - перевірка змінної PYTHON_VERSION якщо 2.5 то виконуються перехід на мітку PYTHON25, якщо не 2.5, то рухаємося далі до перевірки чи 2.6 і переходимо на мітку PYTHON26, інакше безумовно виконається перехід на мітку UNDEFINED , де виведемо повідомлення що версію Python не виявлено, тому немає що встановлювати.

Блоки :PYTHON25 і :PYTHON26 є схожими. Спочатку викликаємо скрипт який налаштує Visual C++ Toolkit 2003 чи Visual С++ 2008 Express, для того щоб ми могли встановлювати з вихідних текстів розширення написані на мовах C/C++. Visual С++ 2008 Express можна скачати з сайту Майкрософт. Використання його цілком безкоштовне. З Visual C++ Toolkit 2003 складніше, окремо його розповсюджувати припинили, проте стверджують що він залишився в складі .NET Framework SDK 1.1, чи це так не перевіряв, в мене ззалишився скачаний з старих часів  Visual C++ Toolkit 2003. Без цього easy_setup не знаходитиме компілятора і у вас ці пакети встановлюватимуться з помилкою. (ще існує варіант використрання компілятона mingw, проте я його не використовував)

title Python 2.5 - встановлюю заголовок вікна щоб можна було легко відрізнити де котра версія, це корисно коли на одній машині ви використовуєте кілька версій інтерпритатора одночасно.

set PYTHONBASEPATH=C:\Python25(6)\ - встановлюю базовий шлях до дистрибутиву Пітона. Ви можете змітити на власний.

goto SETUPVARS - переходимо до встановлення змінних оточення.

Блок :SETUPVARS :

set INCLUDE=%INCLUDE%;!PYTHONBASEPATH!include\;
set LIB=%LIB%;!PYTHONBASEPATH!libs\;
set PYTHONPATH=!PYTHONBASEPATH!;!PYTHONBASEPATH!DLLs\;!PYTHONBASEPATH!Lib\;!PYTHONBASEPATH!Lib\site-packages\
set PATH=
!PYTHONBASEPATH!;!PYTHONBASEPATH!Scripts;%PATH%;

Встановлюємо змінні INCLUDE, LIB, PYTHONPATH, PATH - зауважте що змінна PYTHONBASEPATH розширяється за допомогою знака `!`, саме тому ми встановлювали Enabledelayedexpansion інакше змінна б не підставлялася. Крім змінної PATH я встановлюю також змінну PYTHONPATH, вона використовується деякими потонівськими пакетами. Наприклад boost python шукає python саме через вичначення цієї змінної. Четвертий рядок додає до системної змінної оточення шляху PATH, шляхи до встановленого інтерпритатора та папки скриптів в ньому.  Зверніть увагу що шляхи конкатенуються з існуючим значенням спочатку, це повязано з тим що Windows переглядає шляхи в порядку їх оголошення, тому якщо ми сконкатенуємо(з'єднаємо) змінну PATH + шлях , то може статися що вибиратиметься наприклад 2.5 (ActiveState дистрибутив самостійно встановлює змінні оточення під час інсталяції).

Ну і нарешті виклик cmd викличе для нас інтерпритатор в інтерактивному режимі, щоб ми могли вводити свої команди.


Зауважу що чиста інсталяція дистрибутиву 2.6 від Python.org не має папки Scripts, вона створюється наприклад після встановлення setuptools.

Після цього зберігаємо run26.cmd на диску, редагуємо шлях, якщо у вас шлях до встановленого інтерпритатора інший, а після запускаємо даний коамндний файл на виконання подвійним клацанням миші на ньому.

Отримаємо вікно запрошення до дій командного інтерпритатора Windows. Для перевірки чи правильний інтерпритатор обрався, наберемо в рядку python і натиснемо Enter.
Повинен запуститися інтерпритатор 2.6:

ActivePython 2.6.1.1 (ActiveState Software Inc.) based on

Python 2.6.1 (r261:67515, Dec 5 2008, 13:58:38) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Набираємо exit() і тиснемо Enter.
В результаті ми отримали налаштований интерпритатор, саме час зайнятися його пристосування для своїх потреб.
  1. Однією з новинок в 2.6 на якій мало хто акцентує, але яка для мене має дуже важливе значення це перехід Windows-версії Python 2.6 на використання для компіляції пакетів компілятора Microsoft Visual C++ 2008 ( версія 15.0), безкоштовна Express редакція якого є вільнодоступною, а головне підтримується, яка продукує якісний і швидкий виконуваний код отпимізований під сучасні процесори. Python 2.5 використовував  Visual C++ 2003 з Visual C++ 2003 Toolkit, який вже кілька років недоступний для скачки, тільки в складі .NET Framework SDK 1.1 що ускладнювало побудову модулів які постачаються в вихідних текстах і мають розширення на C чи C++(існував ще варіант побудови за допомогою cygwin порту gcc, але він популярності не здобув). Для встановлення деяких пакетів може бути потрібен Visual C++ 2008 Express чи старша версія. Visual C++ 2008 Express SP1 тягнемо звідси. Залежно від ширини вашого інтернет каналу оберіть offline(як на мене в будь-якому випадку оптимальніший варіант, бо придатний для встановлення на кількох машинах і збережеться після перевстановлення ОС) чи online інсталятор (завантажить з інтернету тільки те що вивибрали для інсталяції). Після завантаження встановлюємо його.
  2. Першим кроком встановимо пакет setuptools. За допомогою якого встановлюватимемо всі решту пакетів. Для цього тягнемо за посиланням скрипт ez_setup.py. Зберігаємо його десь в себе і перейшовши за тим шляхом в командному інтерпритаторі запускаємо даний скрипт командою python ez_setup.py. Після встановлення у нас з'явиться папка Scripts в якій будуть виконавчі файли та скрипти з пакету setuptools.
  3. Наступним кроком підлаштуємо setuptools для використання з консолі. (В easy_install.exe є одна нехороша особливість, для виконання вони запускають окреме консольне вікно яке після роботи зразу закривається, тому не завжди встигаєш побачити результат). Варіантів для підлаштування є два:
    • Написати ще один командний скрипт, в якому викликатиметься easy_install.exe. Це змусить його запускатися в поточній консолі. Скрипт назвемо easy_install.cmd помістимо в папку Scripts, єдиним рядком там запишемо easy_install.exe %1 %2 %4 %4 %5 %6 %7 %8 %9   , де %n це номер параметра командного рядка (насправді їх в більшості випадків менше 9, проте залишимо 9 для складніших випадків). (для лінивців вкладення easy_install.cmd.txt , потрібно забрати розширення .txt)
    • Викликати easy_install-script.py, замість виконавчого файлу, проте це спосіб теж вимагатиме створення командного скрипта, тому я зупинився на першому варіанті.
  4. Після виконання попередніх етапів можна встановлювати пакети до яких ми звикли (зауважу що не всі пакети працбватимуть в 2.6, проте деякі хоча й не декларують що працюватимуть при докладанні деяких зусиль все таки працюватимуть).  Нагадаю, що для windows , по суті є три можливі варіанти встановлення пакетів:
    • Вручну з вихідних текстів (краще з цим все таки справляється setuptools тому якщо є можливіть користуйтеся ним.
    • Встановлення з exe інсталятора, якщо автор пакету його надав (pywin32, wxpython, PIL і багато інших). Зверніть увагу, дуже часто якщо в назву exe інсталятора пакету присутня версія для якої він розрахований, то він працюватиме тільки в тій версії яка там вказана, наприклад py25 тільки в py25, якщо ж версія не вказана, то пакет може бути універсальним і під час інсталяції можна вибрати на який з встановлених інтерпритаторів його встановити, наприклад  PyReadline саме такий.
    • Рекомендований спосіб. Встановлення за допомогою setuptools.
  5. Для роботи та відладки програм на Python я використовую пакет iPython - інтерактивну консоль Python, яка також має режим роботи в режимі командної оболонки, дуже схожої на Unix оболонки. Щоб її встановити, виконаємо наступні кроки:
    1. Встановлюємо PyReadline. Командою easy_install pyreadline. Даний пакет надасть можливіть підствічувати різними кольорами вивід консолі.
    2. Встановлюємо iPython. Командою easy_install ipython. Після встановлення можна перевірити його роботу ввівши команду ipython, він повинен запуститися і вивести щось подібне до нижче наведеного малюнка:

      Зверніть увагу на два моменти: DeprecationWarning виводиться через те що, 0.9.1 не адаптувався спеціально для 2.6, тому містить код з застарілими конструкціями. Друге -  це що вивід повинен підсвічуватися кольором, якщо весь текст залишеться сірим, значить pyreadline коректно не встановився.
      Дещо про iPython: для запуску його в режимі командної оболонки треба виконати ipython -p sh , щоб надалі спростити собі життя, я модифікував початковий скрипт run26.cmd, для автоматичного запуску зразу ipython -p sh, який назвав run26pysh.cmd , та другий скрипт pysh.cmd.txt для запуску оболонки в вже запущеній консолі, який помістив в папку Scripts заінстальованого Пітона. Надалі достатньо просто буде набрати в консолі pysh. Малюнок знизу показує приклад функціонвання pysh. Зауважте, що виклик зовнішніх відносно ipython команд попереджаються знаком оклику '!', це вказує, що iPython повинен передати дану команду інтерпритатору команд Windows cmd.exe.

  6. Недавно я відкрив для себе пакет virtualenv, це must-have для кожного Python-ера. Він створює віртуальну пісочницю з встановлених пакетів, та налаштованого середовища. Чим це добре так це тим що ви можете собі екпериментувати з нестабільними версіями пакетів, налаштуваннями не чіпаючи основну інсталяцію Python-у. Особисто для мене основною перевагою використання цього пакету це можливість визначити свій sitecustomize.py файл який зовсім не вплине на решту встановлених програм за межами створеної "пісочниці". Тому запускаємо easy_install virtualenv.
  7. Наступним я встановлюю з виконавчих файлів wxPython (мабуть краща бібліотека для побудови інтерфейсу користувача), PIL (дуже потужна бібліотека для роботи з зображеннями). 
З початкового налаштування ніби все. Звичайно це не є вичерпний список пакетів, проте решту можна вже доставляти за бажанням та потребою.

В список  скриптів також додано set_extension.cmd, який асоціює з розширеннями файлів .py та .pyw інтерпритатор Пітона, якщо цього не зробив інсталятор(Увага цей скрипт вимає запуску з адмністраторськими привілегіями, інакше в Windows Vista він просто не виконається).

P.S. В Windows Vista командний інтерпритатор функціонує дещо краще і тому немає потреби шаманити з Setlocal. Тому версія для Windows Vista в zip-архіві scripts_vista.zip.


Список корисних посилань:
  1. Використання Python на Windows (офіційна документація).
  2. Сайт DosTips  де я підглянув кілька корисних технік для написання cmd скриптів.

ċ
easy_install.cmd.txt
(0k)
Petro Sasnyk,
31 жовт. 2008 р., 05:53
ċ
pysh.cmd.txt
(0k)
Petro Sasnyk,
31 жовт. 2008 р., 06:23
ċ
run25.cmd.txt
(0k)
Petro Sasnyk,
9 лют. 2009 р., 06:40
ċ
run26.cmd.txt
(0k)
Petro Sasnyk,
9 лют. 2009 р., 06:39
ċ
scripts_vista.zip
(1k)
Petro Sasnyk,
11 лют. 2009 р., 15:42
ċ
set_extension.cmd.txt
(0k)
Petro Sasnyk,
11 лют. 2009 р., 15:14
ċ
set_vars.cmd.txt
(1k)
Petro Sasnyk,
9 лют. 2009 р., 06:40
Comments