Reputation: 2123
So, here's my problem.
I'm making a game in Pygame and Python 3.3, using Ubuntu 12.10. Fine. I'm gonna bundle a bunch of Python scripts into one executable, then distribute it. Also fine. I'm going with cx_freeze, because since I'm using Python 3 I have no other options.
This is where my problem comes in. I've Googled around, but haven't seen anything like it. My setup.py
is as follows:
from cx_Freeze import setup, Executable
import sys
includes = ['sys', 'pygame.display', 'pygame.event', 'pygame.mixer', 'core', 'game']
build_options = {
'optimize' : 2,
'compressed': True,
'packages': ['pygame', 'core', 'game'],
'includes': includes,
'path': sys.path + ['core', 'game'],
}
executable = Executable('__init__.py',
copyDependentFiles=True,
targetDir='dist',
)
setup(name='Invasodado',
version='0.8',
description='wowza!',
options = {'build_exe': build_options},
executables=[executable])
My __init__.py
is as follows:
from sys import argv
import pygame.display
import pygame.event
import pygame.mixer
pygame.mixer.init()
pygame.display.init()
pygame.font.init()
from core import gsm
#Omitted for brevity
The rest of my code (including the full __init__.py
) can be found at https://github.com/CorundumGames/Invasodado, in case it's relevant.
I get a long-ass stack trace, which can be found here http://pastebin.com/Aej05wGE . The last 10 lines of it is this;
File "/usr/local/lib/python3.3/dist-packages/cx_Freeze/finder.py", line 421, in _RunHook
method(self, *args)
File "/usr/local/lib/python3.3/dist-packages/cx_Freeze/hooks.py", line 454, in load_scipy
finder.IncludePackage("scipy.lib")
File "/usr/local/lib/python3.3/dist-packages/cx_Freeze/finder.py", line 536, in IncludePackage
self._ImportAllSubModules(module, deferredImports)
File "/usr/local/lib/python3.3/dist-packages/cx_Freeze/finder.py", line 211, in _ImportAllSubModules
recursive)
File "/usr/local/lib/python3.3/dist-packages/cx_Freeze/finder.py", line 209, in _ImportAllSubModules
if subModule.path and recursive:
AttributeError: 'NoneType' object has no attribute 'path'
In case it's relevant, I'm using Pydev and Eclipse. Now, the last line stands out because Googling it reveals nothing. I have no idea where subModule
could have become None
, and I can't easily check because cx_freeze has shit documentation.
I've never really used cx_freeze or distutils before, so I don't know what the hell I'm doing! Any help would be greatly appreciated.
Upvotes: 0
Views: 1750
Reputation: 40340
Having dug into this, it's a bug in cx_Freeze, that can only hit when you have more than one Python version since PEP 3149 installed - i.e. it wouldn't have come up before 3.3.
I've filed a bug report for it: https://bitbucket.org/anthony_tuininga/cx_freeze/issue/22/error-when-scanning-for-modules-with-a
In the mean time, you can probably avoid the problem by using Python 3.2 for now, because that's the default in Ubuntu 12.10. Python 3.3 will be the default in 13.04.
Upvotes: 1