Найти - Пользователи
Полная версия: Spider IDE, не работает дебаг через winpdb
Начало » Инструментальные средства разработки » Spider IDE, не работает дебаг через winpdb
1
RUVATA
Всем доброго времени суток…
Целевая ОС: WinXP/7 ; Python 2.7.1 ; PyQt-Py2.7-x86-gpl-4.8.3-1 ; wxPython2.9-win32-2.9.1.1-py27 ; Spider IDE (2.0.10_py27) ; winpdb-1.4.8
Особенно хотелось бы прочитать советы людей которые собственно используют Spider IDE как среду разработки… Хотя судя по всему она особой популярностью не пользуется :)
Хотя на вопросы котрые я задам далее смогут верояно дать ответы все опытные Python-программисты.
Инетерес можно так сказать “спортивный”. Python изучаю недавно, за плечами C++, Java(посредственно), С#, VB.NET, Ruby (так-же как и Python - недавно)
Лично мне из всех IDE которые успел попробовать, а я “прошелся чесом” по первой части списка… и даже столь любимый мной по Ruby и Java - NetBeans оказался жутким “УГ” относительно Python, в плане автокомплита у большей части из них не хватало силенок даже для os.getcwd ^_^ я уж и не говорю про какую-то реакцию на import, Рефакторинг - плох у всех… и т.д.
(PS: Из всех самое удобное - PyScripter, но он не удовлетворял потребностей кросплатформенности, Ninja-IDE - неплохо , но автокомлит и “utf-8” подкачали)
Милее всех оказался Spider IDE - очень неплохо… ; Всё остальное “жесть” (KOMODO даже пробовать не стал в силу “платности” сего)
Так вот…
“Ларчик-то просто открывался” это не про Spider IDE, изначально он вообще не везде хотел работать и пришлось дебажить его чтобы выявить его интересную особенность создавать свою рабочую директорию в …Documents and Settings\%USER%\.spyder2\ отсюда в силу плохих отношений Python с кирилицей - работать из-под русскоязычных юзеров, отказывался…
пришлось поравить ему “мозги” и перенести директорию поближе к питону, напрямую указав пути…
Пробема #2
Несмотря на мануал самого Spider - , тем более что среди настроек (\.spyder2\.spyder.ini) присутствует “editor/debug with winpdb = ‘F7’”
winpdb установлен в соответсвии с мануалом
…Enter the new folder from a CMD terminal window and type: python.exe setup.py install
И все равно, как ни крути находясь в IDE Spyder в ответ на F7 нас ожидает “тишина и спокойтвие”

Ну что-ж… снова лезем в “потроха” и пытаемся разобраться как обрабатывается F7, как-же spider “юзает” winpdb
Детальное изучение “сорцов” наводит меня на некоторые открытия, о которых подробней:
Весь механизм взаимодействия Spider и winpdb строится на функциях “модуля” \spyderlib\plugins\editor.py и “инструментария” \spyderlib\utils\programs.py
а именно: editior.py содержит функции которые непосредственно отвечают за вызов winpdb и формирование необходимых аргументов,
вот некое “определение”
# from editor.py line 70
WINPDB_PATH = programs.get_nt_program_name('winpdb')
функцию get_nt_program_name любезно предоставляет programs.py

# from programs.py line 14
# needed imports:
# import os, sys, subprocess, imp, os.path as osp

def get_nt_program_name(name):
"""Return Windows-specific program name, i.e. adding '.bat' or '.exe'"""
if os.name == 'nt':
for ext in ('.exe', '.bat'):
if is_program_installed(name+ext):
return name+ext
return name
как видим, она в свою очередь юзает функцию is_program_installed
# from programs.py line 22
# needed imports:
# import os, sys, subprocess, imp, os.path as osp

def is_program_installed(basename, get_path=False):
"""Return True if program is installed and present in PATH"""
for path in os.environ["PATH"].split(os.pathsep):
abspath = osp.join(path, basename)
if osp.isfile(abspath):
if get_path:
return abspath
else:
return True
else:
return False
Для начала уважаемые Python-програмимисты, помогите разобраться с этим функциями, что-же они делают ?
так как в финале всего происходит:
# from editor.py line 1659

def run_winpdb(self):
"""Run winpdb to debug current file"""
if self.save():
fname = self.get_current_filename()
programs.run_program(WINPDB_PATH, [fname])
programs.run_program:
# from programs.py line 34
# needed imports:
# import os, sys, subprocess, imp, os.path as osp

def run_program(name, args=[]):
"""Run program in a separate process"""
assert isinstance(args, (tuple, list))
path = is_program_installed(name, get_path=True)
if not path:
raise RuntimeError("Program %s was not found" % name)
subprocess.Popen([path]+args)
Поняв смысл вышеперечисленного, я надеюсь таки понять где и что подкружить, “где собака зарыта” :)

PS: http://code.google.com/p/spyderlib/downloads/list - Spider IDE
PooH
is_program_installed - ищет basename во всех путях объявленных в PATH, с параметром get_path - возвращает полный путь
get_nt_program_name - ищет, используя is_program_installed, сначала winpdb.exe, потом winpdb.bat

У вас путь к winpdb в PATH прописан?

PS: на всякий случай Мой компьютор -> Свойства -> Дополнительно -> Переменные окружения
RUVATA
Да, спасибо… оно и есть. Как раз за это время я успел подетальней поковыряться… Оказалась проблемма действительно в Path…
там необходимо было прописать путь к winpdb.bat, т.е. путь до каталога …\Scripts в моем случае “X:\Python\Python2.7\Scripts\”
более того для успешного выполнения этой задачи необходимо чтобы еще и сам путь к корню установленого Python там-же фигурировал.. т.е. в моем случае “X:\Python\Python2.7\”
если его там нет, то мы нарывемся на банальное “python не является программой или пакетным файлом…” в окне cmd

Самое поразительное что ни исталятор самого Python, ни исталятор winpdb об этом не позаботились.

Я уже позже обратил внимание на
def is_program_installed(basename, get_path=False):
"""Return True if program is installed and present in PATH"""
for path in os.environ["PATH"].split(os.pathsep):
где черным по белому:
“”“Return True if program is installed and present in PATH”“”
“”“Возвращяет ”True“ если программа установлена и определена в PATH”“”

Уж больно тривиальный способ определения установленности программ в winNT ^__^
уж ладно бы инсталяторы программ предусматривали запись в PATH путей… но так они этого не делают…
о чем думали разработчики не понятно… т.е могли бы в мануле указать:
Пути к таким-то таким-то каталогам должны быть определены в PATH “ручками” уважаемый пользователь :)

Написать им что-ли, это-же выходит своего рода баг ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB