This question concerns an app built with Kivy: http://kivy.org/ but I think it 
could be answered with general knowledge of the way Cython and cx_Freeze 
interact.

After some effort I've assembled a virtualenv that contains all the modules my 
Kivy app needs, and uses a locally built Python 3.4.3 executable. I then wrote 
a tiny test script that just imports a foundational Kivy class:


import kivy.event


if __name__ == '__main__':
    kivy.event.ObjectWithUid()


And made a setup.py:


import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

build_exe_options = {
    "packages": [
        "kivy"
    ]
}

setup(
    name="cxtest",
    executables=[Executable("run.py", base=base)],
    options={"build_exe": build_exe_options}
)


Run as python3 setup.py build (w. my virtualenv activated), this creates the 
expected output files under build/exe.linux-x86_64-3.4 -- including all of the 
Cython-generated .so files, like kivy._event.so, which contains ObjectWithUid. 
Yet, when I try actually running the resulting executable (with or without the 
virtualenv), it seems not to understand what I've done:

...
   File 
"/home/sanotehu/src/Python-3.4.3/lib/python3.4/importlib/_bootstrap.py", 
line 1161, in _load_backward_compatible
     spec.loader.load_module(spec.name)
   File "ExtensionLoader_kivy_properties.py", line 22, in <module>
   File "ExtensionLoader_kivy_properties.py", line 14, in __bootstrap__
   File "kivy/_event.pxd", line 3, in init kivy.properties 
(kivy/properties.c:30308)
 AttributeError: 'module' object has no attribute 'ObjectWithUid'


To begin with, it's using paths that aren't in the build directory, nor in my 
PATH or PYTHONPATH. Perhaps that's normal?

But more worryingly, it seems like kivy.properties.so can't see inside of 
kivy._event.so. I tried moving the libs around and renaming them and nothing 
really seemed to make a difference.

I'm not all that familiar with Cython. It's possible there's something I need 
to do to make its modules keep working when they've been moved and 
renamed by cx_Freeze. Or maybe I need to tell cx_Freeze to move those 
particular modules in a different way.

Please help me find a way to proceed.

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
cx-freeze-users mailing list
cx-freeze-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cx-freeze-users

Reply via email to