Search code examples
python-3.xdllcx-freezegobject

What DLL's I have to load for Gobject in cx_freeze


I have a little problem with cx_freeze and hoping one of you can help me. I have searched trough this wonderfull forum but I can't find the answer. I have used cx_freeze before with python 3.3 and ktinker and that worked flawless. Now I made a little tool with a bit more complex gui and tried Glade. Building the gui with Glade works perfect for me and on Linux and Windows 7 the application I have made works fine (in python interpreter).

When I run python setup.py bdist_msi I don't see any faults but when I try to run the exe in windows I get this error window: (I can't post images jet) The last 4 lines are:

_load_backward_compatible
File "ExtentionLoader_gi_gi.py", line 22, in <module
File "ExtentionLoader_gi_gi.py", line 14, in_bootstrap_
ImportError: DLL load failed: The specified module could not be found

I don't use any plugins, exotic imports so the dll's I have to load are only the dll's for Gobject. The setup file I have made from an example on this forum. For my ktinker app I did not have to import any dll.

Finally the question: Is there a list of dll's somewhere that tells me what dll's I have to add?
And is there something wrong with my setup.py?

The code is nothing special but if you want to check it: https://github.com/EddenBeer/CodeGenerator

The imports in Python:

import csv import sys import datetime  
from gi.repository import Gtk

Installed on Windows 7:

Python-3.4.2

cx_Freeze-4.3.3.win32-py3.4

pygi-aio-3.14.0_rev6-setup

Setup.py:

import os, site, sys
from cx_Freeze import setup, Executable

## Get the site-package folder, not everybody will install
## Python into C:\PythonXX
site_dir = site.getsitepackages()[1]
include_dll_path = os.path.join(site_dir, "gnome")

## Collect the list of missing dll when cx_freeze builds the app
missing_dll = ['libgtk-3-0.dll',
               'libgdk-3-0.dll',
               'libatk-1.0-0.dll',
               'libcairo-gobject-2.dll',
               'libgdk_pixbuf-2.0-0.dll',
               'libjpeg-8.dll',
               'libpango-1.0-0.dll',
               'libpangocairo-1.0-0.dll',
               'libpangoft2-1.0-0.dll',
               'libpangowin32-1.0-0.dll',
               'libgnutls-26.dll',
               'libgcrypt-11.dll',
               'libp11-kit-0.dll'
]

## We also need to add the glade folder, cx_freeze will walk
## into it and copy all the necessary files
glade_folder = 'glade'

## We need to add all the libraries too (for themes, etc..)
gtk_libs = ['etc', 'lib', 'share']

## Create the list of includes as cx_freeze likes
include_files = []
for dll in missing_dll:
    include_files.append((os.path.join(include_dll_path, dll), dll))

## Let's add glade folder and files
include_files.append((glade_folder, glade_folder))

## Let's add gtk libraries folders and files
for lib in gtk_libs:
    include_files.append((os.path.join(include_dll_path, lib), lib))

base = None

## Lets not open the console while running the app
if sys.platform == "win32":
    base = "Win32GUI"

executables = [
    Executable("CodeGenerator.py",
               base=base
    )
]

buildOptions = dict(
    compressed = False,
    includes = ["gi", "csv", "datetime",],
    packages = ["gi"],
    include_files = include_files
    )

setup(
    name = "Code Generator",
    author = "Ed den Beer",
    version = "1.0",
    description = "Generating copy instructions for RsLogix5000 out of a list with tags in a CSV file",
    options = dict(build_exe = buildOptions),
    executables = executables
)

Solution

  • My problem is solved. Looking for an answer if found a utility called ListDlls.exe. In this link is explaned how to use it: https://bitbucket.org/anthony_tuininga/cx_freeze/issue/92/pygi-and-cx_freeze-error