Детектив: не запускается XPD

Автор mclac, 25 Нояб. 2011 в 17:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

DarthGray

Цитата: mevial от 29 Нояб. 2011 в 15:41
Не угадали, winAVR и есть тот самый опенсорс, который тоже использует gtk, и запущенным ему быть необязательно. Прям даже интересно, что у Ilyukhs стоит. :) А последние матюки вообще на отсутствие pygtk(неправильный путь?).

Ну это легко проверить
Поставлю winAVR на домашний комп
Если Питон сглючит - значит оно и виновато
Различие между теорией и практикой на практике гораздо больше, чем в теории.

zap

По-моему в WinAVR нет никакого gtk. Оно же виндовое нативное гуи использует, разве не так?
А вообще странно, что set PATH не помог.

Попробуйте ещё раз, деинсталлируйте всё и установите всё как у меня на видео. Может поможет, я не знаю.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

DarthGray

Цитата: mevial от 29 Нояб. 2011 в 15:41
Не угадали, winAVR и есть тот самый опенсорс, который тоже использует gtk, и запущенным ему быть необязательно. Прям

Не угадали :p
Поставил дома АВР-Студию вместе с ВинАВР - xpd прекрасно запускается

Цитата: zap от 29 Нояб. 2011 в 17:21

Попробуйте ещё раз, деинсталлируйте всё и установите всё как у меня на видео. Может поможет, я не знаю.


Попробовал. хоть это и тупо - результат тот-же :bl:
Различие между теорией и практикой на практике гораздо больше, чем в теории.

илс

Цитата: mevial от 29 Нояб. 2011 в 15:41
Цитата: DarthGray от 29 Нояб. 2011 в 15:18

Ну WinAVR и Altium Designer врядли на многих машинах есть, к тому же они не запущены
а вот Intel\DMIX очень даже может быть, т.к. хрен знает нафиг он ваще нужен

Не угадали, winAVR и есть тот самый опенсорс, который тоже использует gtk, и запущенным ему быть необязательно. Прям даже интересно, что у Ilyukhs стоит. :) А последние матюки вообще на отсутствие pygtk(неправильный путь?).

Не совсем понял вопрос. Про winAVR ничего не слышал, на моем компе этой проги нет.
Пути правильные, недавно все переустановил по видеоуроку от zap.

Командная строка выдает тот же набор:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\admin>set PATH=C:\Python27\Lib\site-packages\gtk-2.0\r
untime\bin;%PATH%

C:\Documents and Settings\admin>"C:\Python27\python.exe" "C:\Program Files\xpd-0
.2.1\xpd.pyw"
This program requires PyGTK to run

C:\Documents and Settings\admin>


Думаю надо спецов по Питону пытать, наверняка они в курсе об этой типовой проблеме.
Другой вариант, дать (мне) совет, какой самый простой Линукс поставить на ноут, чтобы там без проблем запускалась xpd?

zap

Можно поставить Ubuntu, он тоже "для домохозяек" :D

Если кому-то не лень и хватает квалификации, можно попробовать поставить утилиту FileMon:

http://technet.microsoft.com/ru-ru/sysinternals/bb896642

Она показывает, какие файлы (включая DLL'ки) открывает программа в процессе выполнения (меня интересует момент запуска).

Идея в том, чтобы подсмотреть, какие DLL'ки подгружает Питон по мере выполнения программы. По идее, правильные DLL'ки от GTK должны подсасываться из C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin, но возможно, что где-нибудь лежит другая DLL с таким же именем, и он подхватывает её вместо штатной, отчего и накрывается.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

mevial

Немного покопался с файлмоном, и вот что обнаружил. При импорте gtk загружаются вот такие dll файлы:

C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libglib-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\intl.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgthread-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgobject-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libcairo-2.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libfontconfig-1.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libexpat-1.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\freetype6.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libpng14-14.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\zlib1.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgdk-win32-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgdk_pixbuf-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgio-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgmodule-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libpango-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libpangocairo-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libpangoft2-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libpangowin32-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libgtk-win32-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libatk-1.0-0.dll

Притом независимо от переменной path при загрузке этих dll происходит вот такой обход путей:

QUERY INFORMATION C:\Python27\lib\site-packages\gtk-2.0\glib\libglib-2.0-0.dll NOT FOUND
QUERY INFORMATION C:\WINDOWS\system32\libglib-2.0-0.dll NOT FOUND
QUERY INFORMATION C:\WINDOWS\system\libglib-2.0-0.dll NOT FOUND
QUERY INFORMATION C:\WINDOWS\libglib-2.0-0.dll NOT FOUND
QUERY INFORMATION C:\Program Files\xpd-0.2.1\libglib-2.0-0.dll NOT
QUERY INFORMATION C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libglib-2.0-0.dll SUCCESS

Думаю, что если где-то по пути попадается неправильная библиотека, то она тут же подгружается. Пример вот:

QUERY INFORMATION C:\Python27\lib\site-packages\gtk-2.0\glib\WS2_32.dll NOT FOUND
QUERY INFORMATION C:\WINDOWS\system32\WS2_32.dll SUCCESS
QUERY INFORMATION C:\Python27\lib\site-packages\gtk-2.0\glib\WS2HELP.dll NOT FOUND
QUERY INFORMATION C:\WINDOWS\system32\WS2HELP.dll SUCCESS

А вот список путей, которые первоначально ищет питон:

C:\Python27\lib\site-packages\gtk-2.0\glib\libglib-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\glib\intl.dll
C:\Python27\lib\site-packages\gtk-2.0\glib\WS2_32.dll
C:\Python27\lib\site-packages\gtk-2.0\glib\WS2HELP.dll
C:\Python27\lib\site-packages\gtk-2.0\glib\libgthread-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gobject\libgobject-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libcairo-2.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libfontconfig-1.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libexpat-1.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\freetype6.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libpng14-14.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\zlib1.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libgdk-win32-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libgdk_pixbuf-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libgio-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libgmodule-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libpango-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libpangocairo-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libpangoft2-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libpangowin32-1.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libgtk-win32-2.0-0.dll
C:\Python27\lib\site-packages\gtk-2.0\gtk\libatk-1.0-0.dll

Могу предложить положить файлы из /runtime/bin в соответствующие папки из списка и попробовать.

zap

#24
Не, при загрузке DLL обычно указывается только имя файла, без пути. После этого система делает обход всех путей в PATH и ищет там указанный файл. Именно поэтому порядок обхода каталогов всегда одинаков, независимо от того, системная это DLL'ка, или из GTK.

Все DLL'ки gtk грузятся откуда надо, вариант с неверной версией отпадает.
Облом происходит при загрузке Питоновского модуля "_gtk.pyd" (это тоже DLL'ка, но специальным образом оформленная для использования из Питона).
FileMon не выдаёт откуда он подгружается?

Ещё нашёл в интернетах такой хинт, что, возможноб _gtk.pyd был скомпилирован с использованием Microsoft Visual C 2008 runtime DLL, а самих этих DLL в дистрибутиве PyGTK нет. В более поздних версиях Windows оно является частью дистрибутива, но не исключено, что в ранних версиях он отсутствовал.

Попробуйте установить msvc2008 runtime отсюда:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29

Кстати, гипотезу можно проверить утилитой depends: http://www.dependencywalker.com/
Откройте в ней C:\Python27\Lib\site-packages\gtk-2.0\gtk\_gtk.pyd и посмотрите, все ли DLL'ки, от которых оно зависит, имеются в наличии.

Ещё можно попробовать качнуть самую последнюю версию PyGTK отсюда:
http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.0.win32-py2.7.msi
и попробовать её вместо 2.22.6.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

mevial

#25
Цитата: zap от 01 Дек. 2011 в 15:58
FileMon не выдаёт откуда он подгружается?
C:\Python27\lib\site-packages\gtk-2.0\gtk\_gtk.pyd без каких-либо попыток открыть из другого места.

Цитата: zap от 01 Дек. 2011 в 15:58
Не, при загрузке DLL обычно указывается только имя файла, без пути. После этого система делает обход всех путей в PATH и ищет там указанный файл. Именно поэтому порядок обхода каталогов всегда одинаков, независимо от того, системная это DLL'ка, или из GTK.
Вот сейчас провёл эксперимент: взял C:\Python27\lib\site-packages\gtk-2.0\runtime\bin\libglib-2.0-0.dll и скопировал его в C:\Python27\lib\site-packages\gtk-2.0\glib\intl.dll и получил следующее:

C:\Program Files\xpd-0.2.1>\Python27\python.exe
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\gtk-2.0\gtk\__init__.py", line 30, in <mod
ule>
    import gobject as _gobject
  File "C:\Python27\lib\site-packages\gtk-2.0\gobject\__init__.py", line 26, in
<module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "C:\Python27\lib\site-packages\gtk-2.0\glib\__init__.py", line 22, in <mo
dule>
    from glib._glib import *
ImportError: DLL load failed: ═х эрщфхэр єърчрээр  яЁюЎхфєЁр.
>>>

Притом, что правильная dll лежала на старом месте а путь был установлен в:

C:\Program Files\xpd-0.2.1>set path
Path=C:\Python27\Lib\site-packages\gtk-2.0\runtime\bin;C:\WINDOWS\system32;C:\WI
NDOWS;C:\WINDOWS\System32\Wbem

mevial

К чему теоретические споры, надо попробовать тому, у кого не работает, а так только гадать.
PS: Щас gimp поставлю. Надо же убить пигтк. :)

DarthGray

Цитата: zap от 01 Дек. 2011 в 15:58
Попробуйте установить msvc2008 runtime отсюда:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29

Ещё можно попробовать качнуть самую последнюю версию PyGTK отсюда:
http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.0.win32-py2.7.msi
и попробовать её вместо 2.22.6.

Попробовал и то и другое - не помогает

Вот что выдал депендоси
Различие между теорией и практикой на практике гораздо больше, чем в теории.

zap

Понятно. Ну, gtk'шные либы он найдёт если в Options -> Configure Module Search Order ему добавить в пути для поиска каталог с gtk'шными DLL'ками.
MSVCR90.DLL, скорее всего, лежит у Вас где-то в \Windows\WinSxS\*\, его тоже можно добавить в путь для поиска.
А вот что такое IESHIMS.DLL и WER.DLL?
У меня в системе (Windows XP) таких вообще нет.
Какая DLL на них ссылается?

P.S. Нашёл в интернетах, вроде эти 2 DLL'ки не нужны в XP, они есть только в висте.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

mevial

Цитата: DarthGray от 01 Дек. 2011 в 17:30
Цитата: zap от 01 Дек. 2011 в 15:58
Попробуйте установить msvc2008 runtime отсюда:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29

Ещё можно попробовать качнуть самую последнюю версию PyGTK отсюда:
http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.0.win32-py2.7.msi
и попробовать её вместо 2.22.6.

Попробовал и то и другое - не помогает

Вот что выдал депендоси
Т.е. мой способ решения настолько неадекватен, что даже пробовать не стали? Эх, жалко часа потраченного времени.

zap

Мм... а был способ решения? Я его не понял, если честно.
Это где libglib.dll копировали в intl.dll? Я так и не понял, зачем.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

mevial

Цитата: zap от 01 Дек. 2011 в 19:15
Мм... а был способ решения? Я его не понял, если честно.
Это где libglib.dll копировали в intl.dll? Я так и не понял, зачем.
Вы плохо читаете, я его не копировал в родной intl.dll, который лежит в runtime/bin, я его копировал несколько раньше по поиску, т.е. у меня было 2 дллки, одна правильная и установленная питоном, другая неправильная и установленная другой софтиной(в данном случае мной). Ну да, для чистоты эксперимента и показательности надо было в windows/system32 фигню положить, результат был бы тот же.
А способ был постом раньше, тот, который вы обосрали(извините, накипело) даже не попробовав.

zap

Цитата: mevial от 01 Дек. 2011 в 19:50
Вы плохо читаете, я его не копировал в родной intl.dll, который лежит в runtime/bin, я его копировал несколько раньше по поиску, т.е. у меня было 2 дллки, одна правильная и установленная питоном, другая неправильная и установленная другой софтиной(в данном случае мной). Ну да, для чистоты эксперимента и показательности надо было в windows/system32 фигню положить, результат был бы тот же.
Я понял где мы разошлись в процессе мышления :). Дело в том, что WS2_32.DLL и WS2HELP.DLL это виндовая библиотека WinSock для работы с tcp/ip. Поэтому я не обратил внимание на то, что Вы сказали - совершенно нормально, что они подсосались из каталога C:\Windows\System, их больше нигде и нету.

Но вот то, что Питон поначалу ищет glib'овскую DLL'ку в C:\Python27\lib\site-packages\gtk-2.0\glib\ я упустил. Видимо, программа сначала пытается загрузить DLL'ку с полным путём, которые Вы указали, а потом уже ищет вдоль PATH.

Цитата: mevial от 01 Дек. 2011 в 19:50
А способ был постом раньше, тот, который вы обосрали(извините, накипело) даже не попробовав.
Хорошо бы для начала DarthGray просто глянул бы FileMon'ом, откуда какие DLL'ки подсасываются на самом деле.
Если они в любом случае берутся из правильных мест, пробовать нет смысла.
А если найдёт откуда подсасывается "не та" DLL'ка, тогда уже можно думать как заставить PyGTK найти правильную DLL.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

DarthGray

Цитата: mevial от 01 Дек. 2011 в 18:42
Т.е. мой способ решения настолько неадекватен, что даже пробовать не стали? Эх, жалко часа потраченного времени.

Никто не говорит о неадекватности. просто это не выход
Мы пытаемся найти ПРОСТОЕ решение, что бы XPD запускалась сразу после установки на ЛЮБОЙ винде

Цитата: zap от 01 Дек. 2011 в 23:35
Хорошо бы для начала DarthGray просто глянул бы FileMon'ом, откуда какие DLL'ки подсасываются на самом деле.
Если они в любом случае берутся из правильных мест, пробовать нет смысла.
А если найдёт откуда подсасывается "не та" DLL'ка, тогда уже можно думать как заставить PyGTK найти правильную DLL.

FileMon-а там уже нет. вместо него предлагается Process Monitor
Запустил я эту фигню. но честно говоря ничего не понял. слишкаммногабукаф
Вот маленький кусочек лога и на каждую строчку открывается ещё куча подробностей
Различие между теорией и практикой на практике гораздо больше, чем в теории.

zap

Вам надо установить фильтр по имени процесса (python.exe), затем очистить окно и запустить XPD.
После этого остановите сбор данных, и сохраните файл лога куда-нибудь.
Потом можете выложить его куда-нибудь, и я посмотрю.
Собственно, интересует из каких каталогов загружаются все нужные DLL'ки.
Подозреваю, что какой-то софт установил Вам куда-нибудь в System32 DLL'ку с пересекающимся именем.

На Вашем скриншоте список файлов, открываемых эксплорером (второй столбец), это ничего не даёт.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

DarthGray

Цитата: zap от 02 Дек. 2011 в 13:09
Вам надо установить фильтр по имени процесса (python.exe), затем очистить окно и запустить XPD.

Значитца так
XPD запускается таки через pythonW, а не просто python
Вот лог-файл

зы У меня форум третий день тормозит со страшной силой, страницы по несколько минут открываются
Различие между теорией и практикой на практике гораздо больше, чем в теории.