Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Настройка Eclipse для работы с Python

.docx
Скачиваний:
36
Добавлен:
11.03.2016
Размер:
734.19 Кб
Скачать

Настройка Eclipse для работы с Python

 Самое главное убедиться, что ваше рабочее место по умолчанию настроено на кодировку UTF-8. Идём в меню Window => Preferences выбираем там General => Workspace в самом низу страницы нужно указать параметр "Text file encoding", если он не выставлен в UTF-8 по умолчанию, пропишите это строковое значение в полеOther, как показано на картинке: Итого, у нас есть всё, чтобы начать разрабатывать приложение. Ах нет, не всё, Python писать и отлаживать по-прежнему не на чем. Нужен плагин PyDev.

Готовимся к приземлению на Python-3

Установка PyDev — пожалуй самая простая часть работы по настройке рабочего места. Идём в меню "Help => Eclipse Marketplace..." набираем в строке поиска PyDev и нажимаем в найденом плагине кнопку [Install] После чего со всем соглашаемся, ждём загрузку и установку, потом нам предложат перезапустить Eclipse, почему бы и перезапустить, раз просят. После установки нам предлагается поиграть в прятки с установленным окружением — перспективой (Perspective) для разработки в Python, я подскажу где его найти, заодно сразу переключимся на перспективу PyDev. В правом верхнем углу есть ряд из маленьких кнопок переключения перспективы, обычно там что-то вроде C++, Debug, Java, SVN и ма-а-аленького плюсика слева от них, вот на него-то и надо нажать, чтобы добавить перспективу PyDev. В открывшемся окне Open Perspective выбираем окружение для разработки Python — свежеустановленный PyDev. Мы должны сразу после выбора переключиться на перспективу PyDev, в меню и в основном окне должны произойти некоторые изменения, которые вы возможно не сразу заметите, но они переключают создание новых проектов и файлов и процесс отладки в режим разработки на Python. Почти что всё. Мы готовы к настройке и запуску своего первого проекта на Python 3 в Eclipse PyDev.

Первый проект

Ну что ж, давайте его создадим, наш первый проект. Меню File => New => PyDev Project, заполняем имя, выбираем версию Python 3.x и теперь самое главное: нужно указать где расположен интерпретатор Python, для этого нужно нажать на ссылку «Please configure an interpreter...» Всё, можем нажимать Finish.

Наш первый скрипт

Настало время попытаться запустить наш скрипт, а заодно узнать для чего предназначена данная статья. Меню «File => New => PyDev module», либо просто правой кнопкой по проекту «New => PyDev module», даём нашему новому скрипту имя и нажимаем Finish. Файл скрипта автоматически создастся в кодировке, указанной в настройках Workspace, которые мы задали в самом начале. В Python 3.x весь код по стандарту в кодировке UTF-8. Для проверки поддержки юникода пишем такой скрипт:

слово = "Сначала было слово!.."

print(слово)

Самое время его отладить! Жмакаем на зелёного жука (De-Bug) или просто F11. Выбираем Python Run (это явно не юнит-тест). Поехали… … Приехали!.. Хе-хе, зато бесплатно! Смотрим в файл где мы свалились и видим банальный косяк с кодировкой в _pydev_execfile.py Откройте его по ссылке в стектрейсе консоли Eclipse. Первая же строчка в файле как бы намекает, что для Python 3.x здесь ещё не валялся не то что конь, тут даже пони не прилёг. Вот как выглядит наш замечательный файл:

#We must redefine it in Py3k if it's not already there

def execfile(file, glob=None, loc=None):

if glob is None:

import sys

glob = sys._getframe().f_back.f_globals

if loc is None:

loc = glob

stream = open(file, 'rb')

try:

encoding = None

#Get encoding!

for _i in range(2):

line = stream.readline() #Should not raise an exception even if there are no more contents

#Must be a comment line

if line.strip().startswith(b'#'):

#Don't import re if there's no chance that there's an encoding in the line

if b'coding' in line:

import re

p = re.search(br"coding[:=]\s*([-\w.]+)", line)

if p:

try:

encoding = p.group(1).decode('ascii')

break

except:

encoding = None

finally:

stream.close()

if encoding:

stream = open(file, encoding=encoding)

else:

stream = open(file)

try:

contents = stream.read()

finally:

stream.close()

exec(compile(contents+"\n", file, 'exec'), glob, loc) #execute the script

Критическим взглядом окидываем поле боя и находим несколько косяков: 1. Для Python 3.x encoding всегда будет None, что фатально в Windows где настройки файловой системы далеко не UTF-8, да и вообще это неправильно требовать первой строкой указание кодировки от файла с кодом Python 3, который всегда UTF-8. Правится банальной проверкой sys.version_info[0] >= 3 2. Для файлов начинающихся с BOM не обрезается первый символ, а compile очень чувствителен ко всему лишнему, он банально не поймёт символов в начале выполнения скрипта. Не вдаваясь в тонкости, можно поправить всё на скорую руку например вот так:

def execfile(file, glob=None, loc=None):

import sys

if glob is None:

glob = sys._getframe().f_back.f_globals

if loc is None:

loc = glob

if sys.version_info[0] >= 3:

encoding = 'utf-8'

else:

stream = open(file, 'rb')

try:

encoding = None

#Get encoding!

for _i in range(2):

line = stream.readline() #Should not raise an exception even if there are no more contents

#Must be a comment line

if line.strip().startswith(b'#'):

#Don't import re if there's no chance that there's an encoding in the line

if b'coding' in line:

import re

p = re.search(br"coding[:=]\s*([-\w.]+)", line)

if p:

try:

encoding = p.group(1).decode('ascii')

break

except:

encoding = None

finally:

stream.close()

if encoding:

stream = open(file, encoding=encoding)

else:

stream = open(file)

try:

contents = stream.read()

if sys.version_info[0] >= 3 and contents.startswith('\uFEFF'):

contents = contents[1:] #Remove BOM

finally:

stream.close()

exec(compile(contents+"\n", file, 'exec'), glob, loc) #execute the script

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

Режим отладки и юникод

Ставим breakpoint на второй строке, будем смотреть содержимое переменной слово — делается это двойным кликом по области слева от нужной строчки кода. Запускаем режим отладки по F11 либо кликом на зелёную букашку в тулбаре. Встаём на breakpoint. (Кстати, лирическое отступление, при переходе в Debug-перспективу, уделите пару минут, перетащите всё ненужное вниз.) Теперь пробуем сделать следующее: наведите на переменную слово курсор мыши. Вам ведь наверняка интересно что внутри?.. … ох, снова упали!.. В этот раз совсем загадочно — работа скрипта завершилась, а вот сам процесс отладки умер в мучениях. Зато бесплатно!.. Хотя здесь уже всё довольно просто — идём в eclipse.ini по соседству от исполняемого модуля и добавляем там строку:

-Dfile.encoding=UTF-8

Сохраняем инишку, перезапускаем Eclipse, чтобы изменения вступили в силу. Всё. Можете теперь отлаживаться сколько угодно! Называйте переменные хоть кириллицей, хоть на хинди, именуйте по-русски классы и методы, всё что угодно! Я не говорю что это правильно, я просто даю вам эту возможность, точнее возвращаю то, что отнято прожорливым бесплатным Eclipse PyDev.

Полезные ссылки

Я решил всё же дать ссылку на архив с настроенным на разработку в Python 3.x Eclipse PyDev: eclipse.7z (~171 MB) После скачивания придётся всё равно сделать следующее: 1) — перенастроить папку Workspace 2) — настроить в Window => Prefereces => General => Workspace кодировку UTF-8 3) — открыть перспективу PyDev (изначально будет спрятана) через Open Perspective 4) — при создании первого проекта указать местоположение интерпретатора Python

Заключение

Вы вероятно спросите меня, почему я не дал сразу, в первом же абзаце, скачать готовый архив с пропатченным Eclipse вместе с PyDev. Я отвечу, что решил поделиться опытом несложного, но очень полезного решения, дающее впечатляющий PROFIT в разработке на Python 3.x. Вам ничего не стоит пройти по шагам и получить отличное средство разработки, а заодно понять некоторые тонкости в работе Python 3 и разницу со старым и не всегда добрым Python 2.x. Помните: вам незачем ограничивать себя набором ASCII и вообще ограничивать себя чем бы то ни было. Удачи в разработке!