PyGObject (PyGI)

November 8, 2015
New builds version 3.18 started.
Go to http://sourceforge.net/projects/pygobjectwin32/files/

November 4, 2015
A long delay (should be done October), I'm excited that gcc 5.2 paired with mingw-w64 4.0.4 doing great at first (definitely better than 4.9.x)... till everything built then I give a random test... there are failures (miscompiles)!.
Maybe my excitement was attributed to mingw-w64 4.0.4 need to rebuild with the gcc 4.8.x especially older libs...
OTOH Glib/GTK is as usual piling more regression but fortunately with much more Windows bugfixes.

October 6, 2014
New builds version 3.14 started.

April 20, 2014
New builds version 3.12 started.

October 25, 2013
New builds version 3.10 started.

Mar 9: Switched to gcc 4.8.3 mingw-w64 and no longer use mingw.org winapi due to misc compiling issues.
Feb 9: Rev18!, 64bit port started!
Nov 22: Rev7. See SF page. LFS disabled by default, use separate runtime dll for each python, more libraries added, added GTK 3.8 dll as alternative for those who have problem with GDK 3.10
Nov 5: Found out that -msse2 can be nasty one. Rev3 uploaded with tuned down optimization, fix gtk's bidi icon not displayed bug and fix fontconfig's APPSHAREFONTDIR.
Thanks to G.M. Tagliaretti for the encouragement to continue this and linked my build to PyGobject homepage. I'll consider the upcoming guide as an alternative to https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack.

April 5, 2013
pygi-aio-3.4.2rev11.7z (binary only, for python 2.6, 2.7 and 3.3)
pygi-aio-3.4.2rev10_opt.7z (locales, docs, gi, devel files, other data)
Warning: I just realize that python 3.3 is using msvc 2010 (msvcr100.dll), while my build is using msvcr90.dll, A more proper build will need complete recompile. Oops.

January 27, 2013
pygi-3.4.2_gtk+-3.6.4.7z

September 15, 2012
Experimental builds:
PyGI 3.3.91 for python 2.6, 2.7, 3.3 for Windows 32bit/64bit
GIRepo and typelibs
Runtime win32 Bundle
Runtime win64 bundle (GTK2/3 only)
Gobject Introspection 1.33.10 (static build) for python 2.6/2.7

These are PyGI, do not confused it with PyGTK see http://live.gnome.org/PyGObject/IntrospectionPorting

Example available at http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Minimal debug environment available (with mypaint as test-case): http://opensourcepack.blogspot.com/2013/01/mypaint-and-pygi.html
 

84 comments:

  1. Hi, Thanks for doing this. It seems the installer needs taskkill.exe that is not shipped in Windows XP Home. I downloaded from http://web.archive.org/web/20070125030456/http://home.wanadoo.nl/gigajosh/files/taskkill_en.zip and put in the Windows path.

    ReplyDelete
    Replies
    1. Oops my bad...
      I will bundling taskkill.exe from reactos for rev11. It only used to kill zenity's progress window after setup finished copying.

      Delete
  2. Hi, thanks for this! I'm having trouble using the installer - when I run it, I get an error saying installation requires admin privileges. I do have admin privileges but the UAC pop does not appear. I am not very familiar with Zenity.

    ReplyDelete
    Replies
    1. Hi, in XP it's "normal" that an installer will fail if not run by admin because XP dont recognize manifest (embedded nor paired autoelevate manifest). Yes, it's also possible to auto-elevate (pop up runas dialog) in XP but it require source code change in the 7zipSFX (which setup.exe based on).

      In vista or later it will use heuristic autoelevate since the filename is "setup.exe". Admin privilege needed to install documentation in all users appdata because of its huge size and that's the only recognized shared location by devhelp too.

      btw, sorry for the late reply it was 2:00 here when you post it :D

      Delete
    2. just read your mail, I dont realize that setup.exe already embedded with "asInvoker" manifest so the heuristic elevation ignored. Will fix this in rev11

      Delete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hi, Thank you for this great work.
    There is a bug i want to feedback.
    I am using python 2.7 with vs2010 installed. When I install the pygobject-aio, it install the vs10.x runtime which version does not support 2.7. I think it's about the setup.exe.

    ReplyDelete
    Replies
    1. Correct, there is typo in setup.bat. will fix that in rev11
      thanks

      Delete
    2. Expecting rev11. :)
      Will it come before Chistmas Day?

      Delete
    3. Yes, I suppose as early as Friday or as late as Sunday. It will have some upstream updates and a fix for annoying "missing icons" issue that plagued win32 platform.

      Tagliaretti plan to make gtk3-demo in python, would be great if it could be included in rev11 though.

      Delete
    4. Merry Chistmas!
      and rev11 is wonderful

      Delete
  5. I installed rev15. the gtk-demo works fine. Then I skip and install rev17, the gtk-demo will not work on gtk3.8 because missing Gtk.Stack (gtk-demo also not in gi folder as shown in the installation GUI). After re-install gtk3.10, then only gtk-demo can run but failed on treemodel_large.py :
    File "C:\Python27\Lib\site-packages\gtkdemo\demos\TreeView\treemodel_large.py", line 117, in main
    view = Gtk.TreeView(fixed_height_mode=True, headers_visible=False)
    TypeError: __init__() got an unexpected keyword argument 'headers_visible'

    ReplyDelete
    Replies
    1. I think both rev15 and rev17 got the same error in that test, the demos is taken from pygobject 3.11.x trunk so it may still in development or designated for 3.12 release but since there is no prior version I guess it's better than nothing. Just to give an updated sample over existing tutorial.

      In rev18 I put the demo alongside the old tutorial, it's bad idea to put it in site-packages anyway.

      Thanks for your report.

      PS: I still strongly recommend to use 3.8 whenever possible though

      Delete
  6. Hi, I'm just doing some research on best platform for my software project, and have some problem with webkit - I put together few lines of code, and it works perfectly, yet... on Windows initialization is slow, as in painfully slow. But not always.
    http://nopaste.info/4d3837610d.html
    This tiny bit of code starts in between 1 and 41 seconds - and I have no idea why. Any tips how to find culprit of this behavior? On my ubuntu it always works instantly, on windows sometimes so, and sometimes it waits and waits and waits. There is simple way to find what is wrong? I've tried python 2.7 and 3.3, and r17 r18.

    ReplyDelete
    Replies
    1. You mean fontconfig initialization?

      Delete
    2. the one in my build is configured with freetype (other option is pango which may skip fontconfig init). However I have unicode problem and text rendering defect under windows with pango,

      Delete
    3. I am not sure - windows is just not responding, and I don't know Python very well - as long as things works it's fine, but no debug experience beyond tracing my own mistakes in idle step by step. Is there something I can do to narrow it down?

      Delete
    4. try this pango version:
      http://sourceforge.net/projects/pygobjectwin32/files/temp/webkitpangodll.7z/download

      copy and overwrite existing dll in [python]\lib\site-packages\gnome

      it should not have fontconfig initialization at the cost of unicode/text rendering issue

      Delete
    5. I know it's late, assuming fontconfig initialization is the problem (it's not really a culprit, linux is faster because it's probably already initialized e.g. by gnome deskop). If your app distributed by installer you could run fc-cache at post-install stage so fontconfig won't initialized again. I will run this in my installer too.

      Delete
  7. Hi,
    Just tried the rev18 installed on 64 bit windows 7. I get a crash during installation, after I have selected which python to install:

    - On this computer I have to use popup and enter an admin user..

    ReactOS Command Processor has stopped working

    Problem signature:
    Problem Event Name: APPCRASH
    Application Name: rcmd.exe
    Application Version: 0.3.15.0
    Application Timestamp: 5197cfd1
    Fault Module Name: msvcrt.dll
    Fault Module Version: 7.0.7601.17744
    Fault Module Timestamp: 4eeaf722
    Exception Code: c0000005
    Exception Offset: 00010959
    OS Version: 6.1.7601.2.1.0.256.4
    Locale ID: 2057
    Additional Information 1: 6059
    Additional Information 2: 605913065dd0009e67123fc05800b5a1
    Additional Information 3: 6258
    Additional Information 4: 62582bdf4ad9d7b231c419c665e685f5

    Read our privacy statement online:
    http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

    If the online privacy statement is not available, please read our privacy statement offline:
    C:\windows\system32\en-US\erofflps.txt

    ReplyDelete
  8. Any idea how I can debug this?

    ReplyDelete
    Replies
    1. Sorry for the late reply, you could open the installer with 7zip and check setup\setup.bat file
      Currently it's not in readable condition (no comment etc..)

      Delete
    2. I tried the latest 32 bit version and it worked. Is there a 64 bit build of the newest version somewhere ?

      Delete
    3. It was not worked properly in more complex test, and will need msys 64bit to generate gir (i think) because of 32bit -> 64bit fork didn't worked. I could provide 64bit build as bulk archive though

      Delete
  9. I have install rev18 on my windows7 64bit box.
    The problem is when my python code runs, it reported as below.
    ---------------------------------------------
    'D:\Python27\Lib\site-packages\gnome\lib/gio/modules\libgiognutls.dll': �̉²���ָ����Ä£�é¡£
    Failed to load module: D:\Python27\Lib\site-packages\gnome\lib/gio/modules\libgiognutls.dll
    'D:\Python27\Lib\site-packages\gnome\lib/gio/modules\libgiolibproxy.dll': �̉²���ָ����Ä£�é¡£
    Failed to load module: D:\Python27\Lib\site-packages\gnome\lib/gio/modules\libgiolibproxy.dll
    ----------------------------------------------------------
    I'm using 32bit version python2.7, and gtk3.8 as the installer suggested.

    ReplyDelete
    Replies
    1. Thanks Yindong,
      Next time I will make sure the installer to run gio-querymodules at the end

      atm, you need to remove the missing modules from D:\Python27\Lib\site-packages\gnome\lib/gio/modules/giomodule.cache file

      Delete
    2. Unfortunately, it is still there.
      And, I did not find gio-querymodules in gnome dir.

      Delete
    3. sorry gio-querymodules is missing :(
      basically it does the same as I told before, giomodule.cache is just a plain text enlist dlls to be loaded.

      Delete
    4. actually, those two files has already been installed in the same diretory of giomodule.cache.

      Delete
    5. Ohh I misunderstand, may I know what apps you're run? it's not missing dependencies right?

      Delete
    6. It is a custom coded app.
      I found that it shows the notice while a gtkbuider object call its add_from_file method.

      Delete
  10. This comment has been removed by the author.

    ReplyDelete
  11. Hello I'm developping using Pygobject 3.10.2 rev14 and Gtk 3.6.4 and Gst 1.2.3

    I notice that my handler of the signal "message" for GstBus is never called
    even with Gst1.0.10 and Gst1.0.9 is there any solution for that? thanks

    ReplyDelete
  12. This comment has been removed by the author.

    ReplyDelete
  13. Hi ! Thanks for your work on PyGI for Windows !

    I have an issue regarding GStreamer... The following commands make Python.exe crash without any error message (at Gst.init(None)).

    import gi
    gi.require_version('Gst', '1.0')
    from gi.repository import Gst
    Gst.init(None)

    GStreamer in itself seems to ok though, gst-inspect and friends work nicely when called directly from the command-line. Gtk examples do work too. This is with pygi-aio-3.12.2-win32_rev3-setup, installed on Windows 8.1 64 bits, with Python 2.7.6 32 bits from python(x,y). Could you please help me to solve this ? Thanks !!

    ReplyDelete
    Replies
    1. Can't reproduce this with Win2003, don't have Win8.1 :(
      Could you try test it under DependencyWalker which plugin died out using "-C "from gi.repository import Gst;Gst.init(None)" argument to python.exe?

      Delete
  14. Amazing work bundling up these libraries. Unfortunately, there seems to be an issue when working with GtkClutter.

    import sys
    from gi.repository import Gtk, GtkClutter, Clutter, Cogl, GObject

    def main ():
    Clutter.init(sys.argv)

    window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
    vbox = Gtk.VBox(False, 6)
    window.add(vbox)
    vbox.show()

    # Error happens here:
    clutter_widget = GtkClutter.Embed()
    clutter_widget.show()

    window.show()

    Gtk.main()

    return 0

    if __name__ == '__main__':
    sys.exit(main())

    The program crashes with the message:
    "The procedure entry point gtk_widget_get_scale_factor could not be located in the dynamic link library libgtk-3-0.dll."

    There is also some output on the console:
    "** WARNING **: Failed to load shared library 'libclutter-gtk-
    1.0-0.dll' referenced by the typelib: 'libclutter-gtk-1.0-0.dll': The specified
    procedure could not be found."

    Anyway, thanks for the hard work!

    ReplyDelete
    Replies
    1. I should mention that this is with Gtk+ 3.8.9, as recommended during installation. You can get further with Gtk 3.10.9, but eventually the program crashes without error message (possibly due to instability of the latest version of Gtk+ on Windows).

      Delete
    2. Thanks, 1.5.2 need gtk_widget_get_scale_factor(), if I can't backport this I will switch to stable version 1.4.4 in next rev.

      You may use pygi 3.10.2 rev18 if you want to test clutter-gtk 1.4.4

      Delete
    3. correction, while the function is called it is not actually used in win32, 1.6.0 will come soon according to ebassi, will see which one better.

      Delete
    4. Hey, I am just wondering: Do you know a good place to ask clutter related questions? Neither the mailing list nor IRC seem particularly active.

      Delete
    5. I don't know about active clutter community either, I used to get answer from ebassi (the author) from IRC.

      Delete
  15. Excellent, sounds like there will be a fix in the not too far future. Many thanks again!

    ReplyDelete
  16. Hello.
    Do you plan on releasing x64 binaries for PyGI?

    ReplyDelete
    Replies
    1. maybe a preview for the next pygi 3.14.x and it probably contain minimal libraries

      Delete
    2. I see, thank you.
      They'll come in handy when Windows 9 arrives.

      Delete
  17. I have noticed that new versions of PyGI are roughly released on a monthly basis. Can we expect an update soon and what are the chances of it containing an updated version of clutter? (In particular, I am interested in version 1.19.6, since it adds a GType for ClutterEventSequence, which I assume exposes the struct to python?)

    ReplyDelete
    Replies
    1. I suppose it won't be a month since GTK 3.14.x has been released. I hope by this weekend.

      Delete
    2. That is great news, I am looking forward to try it. Thank you again for the excellent work!

      Delete
    3. The new version works great! However, I had to add ".../Lib/site-packages/gnome" to my path in order for gi to find the dlls. As far as I can remember, I don't think this was the case for previous versions. Either way, many thanks!

      Delete
    4. Did you get rpath.pth in your site-packages folder? this file responsible for the PATH insertion during python startup. If the file exist and python still can't find dll please file a bugreport. Thanks

      Delete
    5. Yes, the file is in the folder. Sorry for the false alarm, I am not sure what was wrong initially. In the meantime I did rerun the setup to install additional libraries, so maybe that fixed it.

      Delete
  18. GdkPixbuf.Pixbuf.new_from_file() seems to be pointing to gdk_pixbuf_new_from_file_at_size() instead of gdk_pixbuf_new_from_file_at_size_utf8(). Any ideas why?

    ReplyDelete
    Replies
    1. for Windows 32bit, several "function" are renamed as "function_utf8" with a shim called "function" that perform locale conversion after retrieved from "function_utf8". Thats what C source said.

      Could you clarify your question with an example?

      Delete
  19. I think initial 64 bit build will be ready tomorrow, turn out the problem so far was related with the redefinition of "function" to "function_utf8" which in 64bit build don't have shim equivalent as in 32bit build. Thus users should really specify "function_utf8" instead of "function". I bring back the shims in 64bit build (I maybe be wrong though). But now gtk-demo works.

    ReplyDelete
  20. I am having a problem with GdkPixbuf and I am wondering whether it is specific to this build. See here:

    http://stackoverflow.com/questions/26813495/gdkpixbuf-saving-pixel-data-to-file-from-python

    I wish I had another operating system to test on.

    ReplyDelete
    Replies
    1. I link your report here https://sourceforge.net/p/pygobjectwin32/tickets/6/

      Delete
    2. Thank you! Meanwhile, I have tested it on OS X and I encounter similar problems. Therefore, it is probably a bug related to the Python bindings for GdkPixbuf. Possibly this:

      https://bugzilla.gnome.org/show_bug.cgi?id=721497

      It looks like the version of GdkPixbuf does not contain the mentioned gdk_pixbuf_new_from_bytes yet. In the meanwhile, I have just switched to PIL as a replacement for GdkPixbuf.

      Delete
  21. Hi, thanks for this great work! I have a trouble with missing file libjasper-1.dll installing pygi-aio-3.14.0_rev10-setup.exe.

    ReplyDelete
    Replies
    1. Whoops, sorry!
      fixed in next rev (today or tommorow).

      Delete
  22. Hello
    I have a problem with the rev16 version on Win8.1.
    gst-launch crashes when I try:
    gst-launch playbin uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm
    and the Gst debug shows:
    0:00:00.056752523 5992 030B1C00 ERROR omx gstomx.c:2674:plugin_init: Failed to load configuration file: Valid key file could not be found in search dirs (searched in: C:\Users\tom\AppData\Local:C:\ProgramData as per GST_OMX_CONFIG_DIR environment variable, the xdg user config directory (or XDG_CONFIG_HOME) and the system config directory (or XDG_CONFIG_DIRS)
    0:00:00.092240912 5992 030B1C00 WARN GST_PLUGIN_LOADING gstplugin.c:525:gst_plugin_register_func: plugin "C:\Python27\Lib\site-packages\gnome\lib\gstreamer-1.0\libgstomx.dll" failed to initialise
    Setting pipeline to PAUSED ...
    Pipeline is PREROLLING ...
    0:00:02.803975382 5992 03596460 WARN ebmlread ebml-read.c:141:gst_ebml_peek_id_length: peek failed, ret = eos
    I installed all of the GStreamer libraries, and also tried with or without GEGL*, GConfg and GTK+

    Thanks in advance, Tom

    ReplyDelete
    Replies
    1. is this 32bit or 64bit python installation?

      Delete
    2. 32 bit
      In the meantime I installed tried gst-launch from the GStreamer 1.4.5 32bit installation, and it seems to work OK.

      Delete
  23. Hello
    I reinstalled everything and tried the rev17 build, and it seems that there's a problem playing sintel-trailer video. I tried a few local audio and video files, and it worked OK. I also downloaded sintel-trailer and tried from the local dir, but it crashes. Here's a debug log:
    gst-launch.exe playbin uri="file:///U:/Video/sintel_trailer-480p.webm"
    Setting pipeline to PAUSED ...
    0:00:00.105328181 4024 02BE2120 WARN basesrc gstbasesrc.c:3470:gst_base_src_start_complete: pad not activated yet
    0:00:00.119306894 4024 02BE2120 WARN basesrc gstbasesrc.c:3470:gst_base_src_start_complete: pad not activated yet
    Pipeline is PREROLLING ...

    ReplyDelete
    Replies
    1. The problem is I can't reproduce this since your first report (I could play it from url). Your first error about seek() by matroska muxer, I think it was related to optimized zlib in rev16.

      BTW please re-report this at https://sourceforge.net/p/pygobjectwin32/tickets/ so I can track it.

      Delete
    2. I have reported this here:
      https://sourceforge.net/p/pygobjectwin32/tickets/16/

      Delete
  24. I've said it before and I'll say it again, this package is a godsend if you're developing on Windows. Is there any chance we might get *.lib files, too? I am working with cython and I would like to implement some parts of the application in C, but I don't want to get into the dreaded DLL hell.

    ReplyDelete
    Replies
    1. Usually you can use gendef/pexports to generate .def from dll then use ms lib to make .lib file or try use Japhet's jwlib if you dont have msvc.

      That's the common route for C library.

      Delete
    2. Ok, cool. I even wrote a simple GUI for doing just that a while ago (https://github.com/kloffy/dll2lib), but I figured maybe it is best to get them straight from the source. Anyway, seems to be working great so far, thanks again!

      Delete
  25. Hello,
    We wrote an IM app:https://github.com/twstrike/coyim, it's based on GTK+3, and it turns out the windows runtime for 3.x version ssems quite hard to achieve(no gnome official binary any more), I was lead to your project PyGI for windows, and it seems to be the only stable and actively maintained project right now, a big Thank first.
    But since we were using Golang as our binding lang of GTK instead of Python: https://github.com/gotk3/gotk3
    I'm wondering is there a good way to just build/get the GTK+3 runtime chains like what you have now, and is it easy to be bundled into application on windows?

    Thanks in advance,
    Fan

    ReplyDelete
    Replies
    1. Hi Fan,

      I'm afraid can't give good answer, not familiar with gotk3
      the installer is 7zip SFX so you can extract its content with 7zip then:
      - extract paired [package].bin.7z and [package].data.7z
      - iterate its depends.txt (under noarch\[package]) to solve dependencies

      There is precaution though, the runtime are either linked to msvcr90.dll (rtvc9) or msvcr100.dll (rtvc10). I don't know if this will work with golang runtime... If it works fine, then I recommend to use the rtvc10 one as it doesn't require special WinSxS manifest.

      Delete
    2. I forgot, the "Base" package should be extracted too.

      Delete
  26. Hello. GREAT work on this packaging -- an AIO installer for pygi has been sorely needed for a long time.

    -----------
    Minor bug fix: in pygtkcompat/pygtkcompat.py:192

    return orig_get_origin(self)[1:]

    should be changed to :

    return orig_get_origin(self)[-2:]

    Reason: this is being invoked twice in a single call chain somewhere along the line, and each time, it strips off an element from the front of the tuple, so that by the time it returns to the original caller, the returned coordinate tuple has one element instead of the two that would be expected. The fix always returns the final two elements regardless of how many times the invocation is nested.

    ReplyDelete
    Replies
    1. Thanks for your contribution, will apply that in next revision.

      Delete
  27. This AIO Installer was a _huge_ boon. I had delayed literally for years migrating my old PyGTK apps and development environment due to the extreme difficulty in getting PyGObject installed on Windows platforms.

    There is one thing you may want to correct. I had been having difficulty installing just the PyGI modules onto deployment systems on which only the Python application I developed would be executed. No matter what I tried, importing the gi.repository failed. I had no such problems on my development system.

    (This was with the rev3 installer.)

    Finally, I tracked the problem down to a dependency on Glade: once I checked that checkbox, everything worked fine. I'm thinking you don't want that latent dependency...

    FYI in repro-ing this, I only installed the base package and Pango, no other modules. And, of course now, Glade.

    Thanks again, and good work!

    ReplyDelete
    Replies
    1. I did try your case but unable to reproduce. What exactly did you try to import? Installer supposedly install GLib, GObject, Gio, GModule, Pango* and Harfbuzz. Adding Glade would eventually adds GTK, GDK, ATK, RSVG, GDKPixbuf.

      Delete
  28. Here's a typical example that fails:
    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk <--- fails here
    from gi import pygtkcompat
    pygtkcompat.enable()
    pygtkcompat.enable_gtk(version='3.0')

    It fails on the import of Gtk. Same for Gdk. It wasn't intuitive to me that I would need to install Glade to get those modules -- and I'm thinking that dependency probably wasn't your intent.

    ReplyDelete
    Replies
    1. Because you don't select Gtk, of course you can't import Gtk :) The list intentionally meant to be exhaustive give user complete control of what they really want.

      Delete
    2. Keep in mind the installer is called PyGI not PyGTK

      Delete
  29. Hi,
    Would it be possible to include a cairo dll with this? I've ported an app from pygtk to gtk3, + having a cairo dll would probably be quite useful (my code uses Gtk3 + cairocffi).

    S

    ReplyDelete
    Replies
    1. The one you're looking for is cairo-gobject.dll in pygi-aio. I have intentionally merge it to avoid possible clash with others requiring/call cairo-2.dll as cairo itself is highly configurable library.

      Delete
  30. Hi, I just started getting my feet a bit wet with GTK.
    Could it be possible that you include MyPaintGegl?
    I wanted to test this project on windows, which needs that:
    https://github.com/manuq/xsheet

    ReplyDelete
  31. Hello
    No more update
    Is it possible to install 'pip' ?

    ReplyDelete
    Replies
    1. Nah its never registered in pypi or other repo, the dependencies is too much make python wheel

      Delete