matplotlib 导入错误:没有名为mpl_toolkits的模块与maptlotlib 1.3.0和py2exe一起使用

gajydyqb  于 2022-11-24  发布在  其他
关注(0)|答案(5)|浏览(195)

我不知道如何能够通过py2exe打包这个现在:
我正在运行命令:

python setup2.py py2exe

通过python 2.7.5和matplotlib 1.3.0以及py2exe 0.6.9和0.6.10dev实现
这适用于matplotlib 1.2.x
我已经阅读了http://www.py2exe.org/index.cgi/ExeWithEggs,并尝试实现处理mpl_toolkits的建议,因为它已经成为一个命名空间包。
我也想知道答案http://matplotlib.1069221.n5.nabble.com/1-3-0-and-py2exe-regression-td41723.html
向mpl_toolkits添加一个空的__init__.py可以使它工作,但这只是解决问题的一种方法。

有人能建议我需要什么来使py2exe与matplotlib 1.3.0中的mpl_toolkits.axes_grid1一起工作吗?:

test_mpl.py的值为:

from mpl_toolkits.axes_grid1 import make_axes_locatable, axes_size

if __name__ == '__main__':
    print make_axes_locatable, axes_size

setup2.py 是:

import py2exe
import distutils.sysconfig
from distutils.core import setup

# attempts to get it to work
import modulefinder
import matplotlib
import mpl_toolkits.axes_grid1
__import__('pkg_resources').declare_namespace("mpl_toolkits")
__import__('pkg_resources').declare_namespace("mpl_toolkits.axes_grid1")
modulefinder.AddPackagePath("mpl_toolkits", matplotlib.__path__[0])
modulefinder.AddPackagePath("mpl_toolkits.axes_grid1", mpl_toolkits.axes_grid1.__path__[0])

# end of attempts to get it to work

options={'py2exe': {'packages' : ['matplotlib', 'mpl_toolkits.axes_grid1', 'pylab', 'zmq'],
                    'includes': ['zmq', 'six'],
                    'excludes': ['_gdk', '_gtk', '_gtkagg', '_tkagg', 'PyQt4.uic.port_v3', 'Tkconstants', 'Tkinter', 'tcl'],
                    'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                     'libgdk_pixbuf-2.0-0.dll',
                                     'libgobject-2.0-0.dll',
                                     'tcl85.dll',
                                     'tk85.dll'],
                    'skip_archive': True },}

setup(console=['test_mpl.py'], options=options)

输出为:

running py2exe
*** searching for required modules ***
Traceback (most recent call last):
  File "setup2.py", line 23, in <module>
    setup(console=['test_mpl.py'], options=options)
  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 243, in run
    self._run()
  File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 296, in _run
    self.find_needed_modules(mf, required_files, required_modules)
  File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 1308, in find_needed_modules
    mf.import_hook(f)
  File "C:\Python27\lib\site-packages\py2exe\mf.py", line 719, in import_hook
    return Base.import_hook(self,name,caller,fromlist,level)
  File "C:\Python27\lib\site-packages\py2exe\mf.py", line 136, in import_hook
    q, tail = self.find_head_package(parent, name)
  File "C:\Python27\lib\site-packages\py2exe\mf.py", line 204, in find_head_package
    raise ImportError, "No module named " + qname
ImportError: No module named mpl_toolkits
ddhy6vgd

ddhy6vgd1#

这个问题有一个非常简单的解决方法。找到导入mpl_tools的目录,然后在该目录中添加一个名为__init__.py的空文本文件。py2exe现在将找到并包含这个模块,而不需要在安装文件中进行任何特殊的导入。
您可以在python控制台中键入以下命令来找到mpl_tools目录:

import importlib
importlib.import_module('mpl_toolkits').__path__

我在这里找到了https://stackoverflow.com/a/11632115/2166823的解决方案,它似乎适用于一般的命名空间包。

pu3pd22g

pu3pd22g2#

这个问题发生在我从El Capitan更新MacOS到Sierra之后。

sudo pip install -U matplotlib

解决了我的问题。
此页https://github.com/JuliaPy/PyPlot.jl/issues/294可能也会对您有所帮助。

pcww981p

pcww981p3#

Python安装的site-packages目录中的大多数文件夹都是包(它们有一个__init__.py文件)。如果没有__init__.py文件,那么这个包被称为 namespace package。cx_Freeze有一个选项来指示mpl_toolkits是一个命名空间包,这样就可以找到子包。

2vuwiymt

2vuwiymt4#

现在有一个模块

conda install basemap
rjzwgtxy

rjzwgtxy5#

在我的情况下,我有这个错误“没有模块命名为'mpl_toolkits.axes_grid'“,这是因为此行“从mpl_toolkits.axes_grid.inset_locator导入inset_axes“
我发现在以前的版本中,工具箱只有一个名称空间“axes_grid”,而在最近的版本中(自svn r8226以来),工具箱被分成了两个独立的名称空间(“axes_grid1”和“axisartist”).
所以我改成了“从mpl_toolkits.axes_grid1.inset_locator导入inset_axes“,问题就解决了!

相关问题