Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Python][Pygtk][py2exe]
Forum PHP.pl > Inne > Hydepark
qba10
Witam
Wiem że niektórzy z was "bawią się" w pythonie. Ja kilka tygodni temu też zacząłem. Muszę skompilować pewien programik w pytchonie by działał z pliku wykonywalnego na Windowsie. Niestety podczas uruchomienia pliku exe stworzonego przez py2exe wywala mi do loga taki błąd:
Kod
Traceback (most recent call last):
  File "szkola.py", line 9, in <module>
  File "gtk\glade.pyc", line 12, in <module>
  File "gtk\glade.pyc", line 10, in __load
ImportError: DLL load failed: Nie można odnaleźć określonego modułu.


Oto mój plik dla py2exe:
[PYTHON] pobierz, plaintext
  1. from distutils.core import setup
  2. import py2exe
  3.  
  4. setup(
  5. name = 'handytool',
  6. description = 'Some handy tool',
  7. version = '1.0',
  8.  
  9. windows = [
  10. {
  11. 'script': 'szkola.py',
  12. }
  13. ],
  14.  
  15. options = {
  16. 'py2exe': {
  17. 'packages':'encodings',
  18. 'includes': 'cairo, pango, pangocairo, atk, gobject, gio',
  19.  
  20. }
  21. },
  22.  
  23. data_files=[
  24. 'interfejs.glade']
  25. )
[PYTHON] pobierz, plaintext

A oto plik do skompilowania:
[PYTHON] pobierz, plaintext
  1. # -*- coding: utf-8 -*-
  2. import sys
  3. # import PyGTK
  4. import pygtk
  5. if not sys.platform == 'win32':
  6. pygtk.require('2.0')
  7.  
  8. import gtk
  9. import gtk.glade
  10.  
  11.  
  12. # bazowa klasa
  13. class Interfejes:
  14. button = {}
  15. entryp = {}
  16. entry = {}
  17. widget = {}
  18. def __init__(self):
  19. # wybieramy plik *glade
  20. self.gladefile = "interfejs.glade"
  21. self.wTree = gtk.glade.XML(self.gladefile)
  22. # pobieramy główne okno
  23. self.window = self.wTree.get_widget("window1")
  24. if (self.window):
  25. self.window.connect("destroy", gtk.main_quit)
  26. def ladujWidgety(self):
  27. for i in range (1,10):
  28. Core.Pole[i] = 0
  29. self.entry[i] = self.wTree.get_widget("entry"+str(i))
  30. self.entryp[i] = self.wTree.get_widget("entryp"+str(i))
  31. self.button[i] = self.wTree.get_widget("button"+str(i))
  32. self.button[i].connect("button_release_event", Core.ObslugaKlikniecia, i )
  33. self.widget["all"] = self.wTree.get_widget("label17")
  34. self.widget["ostatnie"] = self.wTree.get_widget("label19")
  35. self.widget["najwiecej"] = self.wTree.get_widget("label18")
  36. class Core:
  37. Pole = {}
  38. klikniecia = 0;
  39.  
  40. def ObslugaKlikniecia(self,widget, event, data):
  41. self.Pole[data] = self.Pole[data]+1
  42. self.klikniecia = self.klikniecia+1
  43. #wynik = float(self.Pole[data])/float(self.klikniecia)*100
  44. Interfejes.widget["all"].set_text(str(self.klikniecia))
  45. Interfejes.widget["ostatnie"].set_text(str(data))
  46. Interfejes.entry[data].set_text(str(self.Pole[data]))
  47. #Interfejes.entryp[data].set_text(str(int(wynik))+"%")
  48. self.OdswierzWyniki()
  49. def OdswierzWyniki(self):
  50. klucz = 0
  51. wartosc = 0
  52.  
  53. #por["naj"] = 0;
  54. for i in range (1,10):
  55. wynik = float(self.Pole[i])/float(self.klikniecia)*100
  56. Interfejes.entryp[i].set_text(str(int(wynik))+"%")
  57. if wartosc < self.Pole[i]:
  58. klucz = i
  59. wartosc = self.Pole[i]
  60. Interfejs.widget["najwiecej"].set_text(str(klucz))
  61.  
  62.  
  63. # wywołanie aplikacji
  64. if __name__ == "__main__":
  65. Interfejs = Interfejes();
  66. Core = Core();
  67. Interfejs.ladujWidgety();
  68.  
  69. gtk.main()
[PYTHON] pobierz, plaintext


Na linuskie działa normalnie, zresztą na windowsie spod interpretatora też. Jednak z tym exe nie mogę sobie poradzić.....
kwiateusz
daawno temu sie bawiłem py2exe no i specjalista jakimś w py nie jestem, ale w includes nie powinieneś przypadkiem zawrzeć gtk, coby były odpowiednie dllki do stworzenia GUI? (nawet komunikat wskazuje ze brakuje Ci plikow z katalogu gtk)
qba10
Plik setup.py stworzyłem na podstawie tutrialu z internetu (użycie pygtk+glade) i wydaje mi się że wszytkie dll'ki są:
Kod
freetype6.dll
intl.dll
libatk-1.0.0.dll
libcairo-2.dll
libexpat-1.dll
libfontconfig-1.dll
libgdk_pixbuf-2.0-0.dll
libgdk-win32-2.0-0.dll
libgio-2.0-0.dll
libglade-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgobject-2.0-0.dll
libgthread-2.0-0.dll
libgtk-win32-2.0-0.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangogoft2-1.0-0.dll
libpangowin32-1.0-0.dll
libpng14-14.dll
oython26.dll
zlib1.dll

plus wiele bilbiotek pyc i pyd

Skąd mam wiedzieć czego brakuje?

Edytowałem nawet skrypt setup.py i nadal to samo......

[PYTHON] pobierz, plaintext
  1. from distutils.core import setup
  2. import py2exe
  3.  
  4. setup(
  5. name = 'handytool',
  6. description = 'Some handy tool',
  7. version = '1.0',
  8.  
  9. windows = [
  10. {
  11. 'script': 'szkola.py',
  12. }
  13. ],
  14.  
  15. options = {
  16. "py2exe": {
  17. "includes": ["pango", "cairo", "gio", "pangocairo", "atk", "gobject", "gtk","gtk.glade"],
  18. "dll_excludes": ["iconv.dll", "intl.dll",
  19. "libatk-1.0-0.dll", "libgdk_pixbuf-2.0-0.dll",
  20. "libgdk-win32-2.0-0.dll", "libglib-2.0-0.dll",
  21. "libgmodule-2.0-0.dll", "libgobject-2.0-0.dll",
  22. "libgthread-2.0-0.dll", "libgtk-win32-2.0-0.dll",
  23. "libpango-1.0-0.dll", "libpangowin32-1.0-0.dll",
  24. "libxml2", "libglade-2.0-0", "zlib1"]
  25. }
  26.  
  27. },
  28.  
  29. data_files=[
  30. 'interfejs.glade']
  31. )
  32.  
[PYTHON] pobierz, plaintext
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.