From: Zwicky,
William R ERDC-CERL-IL C. <Wil...@us...> - 2009-08-05 02:39:52
|
I can't include numpy in my app, py2exe is refusing to load it correctly. I'm using Python 2.5 and the Numpy 1.3.0 "superpack" under Windows. When I run the script below (the referenced "cli.py" is empty) I get: ImportError: No module named numpy.distutils.tests Technically that's true; numpy.distutils.tests is actually a package. And if you examine the setup.py, you'll see that exact package listed under excludes. Why is py2exe loading that package incorrectly, and why is it ignoring my excludes? -Bill import distutils.core import os import py2exe import sys def build_windist(): windows_opts = [{ "script": "cli.py", }] setup_opts = { "py2exe": { "packages": [ 'numpy', ], "excludes": [ "numpy.distutils.tests" ], } } distutils.core.setup( options = setup_opts, console = windows_opts, ) if __name__ == '__main__': print "\n".join(sorted(sys.path)) # If run without args, build executable in quiet mode. if len(sys.argv) == 1: sys.argv = [sys.argv[0], "py2exe", "-q"] build_windist() |
From: Mark H. <ski...@gm...> - 2009-08-05 07:59:05
|
On 5/08/2009 12:39 PM, Zwicky, William R ERDC-CERL-IL Contractor wrote: > I can't include numpy in my app, py2exe is refusing to load it > correctly. I'm using Python 2.5 and the Numpy 1.3.0 "superpack" under > Windows. When I run the script below (the referenced "cli.py" is empty) > I get: > > ImportError: No module named numpy.distutils.tests So something is attempting to import numpy.distutils.tests... > > Technically that's true; numpy.distutils.tests is actually a package. > And if you examine the setup.py, you'll see that exact package listed > under excludes. But you have excluded it. The trick will be to determine why it is getting imported, and if that can be prevented. If not, you are probably forced to not exclude it. Cheers, Mark |
From: Zwicky,
William R ERDC-CERL-IL C. <Wil...@us...> - 2009-08-05 22:27:02
|
One of us is missing the point ... > > ImportError: No module named numpy.distutils.tests > > So something is attempting to import numpy.distutils.tests... Yes - Numpy itself is doing that. > But you have excluded it. Yes - but the exclusion is ignored. I get that message whether or not I exclude that package. Is 'packages' processed after excludes? And as I mentioned last time, the error is *false* -- that package does indeed exist, but py2exe is refusing to see it. -Bill // William R. Zwicky // USA-CERL, Champaign, IL // (800) USA-CERL xPLSR |
From: Mark H. <mha...@sk...> - 2009-08-06 01:02:29
|
On 6/08/2009 8:26 AM, Zwicky, William R ERDC-CERL-IL Contractor wrote: > One of us is missing the point ... > >>> ImportError: No module named numpy.distutils.tests >> >> So something is attempting to import numpy.distutils.tests... > > Yes - Numpy itself is doing that. > >> But you have excluded it. > > Yes - but the exclusion is ignored. I get that message whether or not I > exclude that package. Is 'packages' processed after excludes? I'm still a little lost here - numpy will fail with an import error if that module doesn't exist, but you are explicitly listing it in excludes? But either way... > And as I mentioned last time, the error is *false* -- that package does > indeed exist, but py2exe is refusing to see it. Does exist where? What does 'refusing to see it' mean? Not trying to be pedantic, but numpy is the thing failing to 'see' it as witnessed by the ImportError. The question is whether py2exe is putting that package, in the correct location, in the .zip file used at runtime by Python when in a py2exe environment. Looking inside the .zip file might help, as would looking for any messages relating to that package when py2exe is run with -v. The PY2EXE_VERBOSE environment variable can be used in place of PYTHON_VERBOSE for a py2exe executable, so should then dump lots of noise about the import process at runtime... Cheers, Mark |
From: Zwicky,
William R ERDC-CERL-IL C. <Wil...@us...> - 2009-08-06 01:08:36
|
> I'm still a little lost here - numpy will fail with an import > error if that module doesn't exist, but you are explicitly > listing it in excludes? But either way... No no - py2exe is producing the import error. Nothing is being run; the cli.py file referenced in my setup.py is *empty*. Only the "packages: numpy" line actually calls for numpy, and only py2exe goes looking for it. I'm guessing it finds some of it, but fails on that one package. When the excludes line is *missing*, py2exe fails on that one package. And when present, it *still* fails on that package. But it's worse than that - I finally looked at that package, and it's not a package at all. It's a directory, but there's no __init__.py inside. So it's not a module, not a package, not being imported by anyone anywhere, and explicitly listed under excludes. And yet py2exe still goes looking for it. Here is setup.py with no excludes: import distutils.core import os import py2exe import sys def build_windist(): windows_opts = [{ "script": "cli.py", }] setup_opts = { "py2exe": { "packages": [ 'numpy' ], } } distutils.core.setup( options = setup_opts, console = windows_opts, ) if __name__ == '__main__': # If run without args, build executable in quiet mode. if len(sys.argv) == 1: sys.argv = [sys.argv[0], "py2exe", "-q"] build_windist() Here's the entire output of that file: C:> python setup.py running py2exe *** searching for required modules *** Traceback (most recent call last): File "setup.py", line 32, in <module> build_windist() File "setup.py", line 22, in build_windist console = windows_opts, File "C:\Programs\Python25wrz\lib\distutils\core.py", line 151, in setup dist.run_commands() File "C:\Programs\Python25wrz\lib\distutils\dist.py", line 974, in run_commands self.run_command(cmd) File "C:\Programs\Python25wrz\lib\distutils\dist.py", line 994, in run_command cmd_obj.run() File "C:\Programs\Python25wrz\lib\site-packages\py2exe\build_exe.py", line 243, in run self._run() File "C:\Programs\Python25wrz\lib\site-packages\py2exe\build_exe.py", line 296, in _run self.find_needed_modules(mf, required_files, required_modules) File "C:\Programs\Python25wrz\lib\site-packages\py2exe\build_exe.py", line 1342, in find_needed_modules mf.import_hook(package, None, ["*"]) File "C:\Programs\Python25wrz\lib\site-packages\py2exe\mf.py", line 719, in import_hook return Base.import_hook(self,name,caller,fromlist,level) File "C:\Programs\Python25wrz\lib\site-packages\py2exe\mf.py", line 137, in import_hook m = self.load_tail(q, tail) File "C:\Programs\Python25wrz\lib\site-packages\py2exe\mf.py", line 217, in load_tail raise ImportError, "No module named " + mname ImportError: No module named numpy.distutils.tests -Bill |