首页 > 其他 > 详细

py2exe 打包scipy时遇到的问题

时间:2015-12-30 19:33:47      阅读:2009      评论:0      收藏:0      [点我收藏+]

最近写了个小程序,用PyQt5做的界面,写完之后用py2exe打包成独立的exe文件,运行正常。

后来由于需要,调用SciPy.io.loadmat,改写setup.py,打包之后运行错误,提示:

Traceback (most recent call last):
  File "comtrade.py", line 7, in <module>
  File "C:\Anaconda3\lib\site-packages\scipy\io\__init__.py", line 85, in <module>
    from .matlab import loadmat, savemat, whosmat, byteordercodes
  File "C:\Anaconda3\lib\site-packages\scipy\io\matlab\__init__.py", line 13, in <module>
    from .mio import loadmat, savemat, whosmat
  File "C:\Anaconda3\lib\site-packages\scipy\io\matlab\mio.py", line 12, in <module>
    from .miobase import get_matfile_version, docfiller
  File "C:\Anaconda3\lib\site-packages\scipy\io\matlab\miobase.py", line 22, in <module>
    from scipy.misc import doccer
  File "C:\Anaconda3\lib\site-packages\scipy\misc\__init__.py", line 47, in <module>
    from scipy.special import comb, factorial, factorial2, factorialk
  File "C:\Anaconda3\lib\site-packages\scipy\special\__init__.py", line 586, in <module>
    from ._ufuncs import *
  File "<loader>", line 10, in <module>
  File "<loader>", line 8, in __load
ImportError: (No module named scipy.special._ufuncs_cxx) D:\\work\\comtrade\\dist\\scipy.special._ufuncs.pyd

可是找了下 \Anaconda3\Lib\site-packages\scipy\special里面,是有_ufuncs_cxx.pyd的,

也就是说py2exe在打包的时候没有把scipy.special._ufuncs_cxx打进来,需要在"includes" 里面加进去。

这个加进来之后,运行仍然会提示 (No module named "scipy.integrate")等,缺什么就一并"includes" 进来。

1 "includes" : [  scipy.special._ufuncs_cxx,
2                      "scipy.integrate",
3                      "scipy.integrate.quadpack",
4                      "scipy.sparse.csgraph._validation"],

最终setup.py如下:

 1 # -*- coding: utf-8 -*-
 2 #py2exe:setup.py
 3 
 4 from distutils.core import setup
 5 import py2exe
 6 #We need to import the glob module to search for all files.
 7 import glob
 8 import sys
13 #this allows to run it with a simple double click.
14 sys.argv.append(py2exe)
15 
16 # We need to exclude matplotlib backends not being used by this executable. You may find
17 # that you need different excludes to create a working executable withyour chosen backend.
18 # We also need to include include various numerix libraries that the other functions call.
19 opts= {
20 py2exe:{ "includes" : [ "sip", "matplotlib.backends", "matplotlib.backends.backend_tkagg",
21                           "matplotlib.figure","numpy", "matplotlib.pyplot", "pylab", "six",
22                           "matplotlib.backend_bases", scipy.special._ufuncs_cxx,
23                           "scipy.integrate","scipy.integrate.quadpack","scipy.sparse.csgraph._validation"],
24            "excludes" : [_gtkagg, _tkagg, _agg2, _cairo, _cocoaagg,
25                          _fltkagg,_gtk, _gtkcairo],
26 
27           "dll_excludes":[libgdk-win32-2.0-0.dll,libgobject-2.0-0.dll,"MSVCP90.dll",]
28          }
29       }
30 
31 #Save matplotlib-data to mpl-data ( It is located in thematplotlib\mpl-data
32 #folder and the compiled programs will look for it in \mpl-data
33 #note: using matplotlib.get_mpldata_info
34 data_files= [(rmpl-data,glob.glob(rC:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\*.*)),
35             #Because matplotlibrc does not have an extension, glob does not findit (at least I think that‘s why)
36             #So add it manually here:
37             (rmpl-data,[rC:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc]),
38             (rmpl-data\images,glob.glob(rC:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\images\*.*)),
39             (rmpl-data\stylelib,glob.glob(rC:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\stylelib\*.*)),
40             (rmpl-data\fonts,glob.glob(rC:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\*.*)),
41             ("",[r"C:\Anaconda3\Lib\site-packages\PyQt5\libEGL.dll"]),
42             ("platforms",[r"C:\Anaconda3\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll"])]
43 
44 #for console program use ‘console = [{"script" :"comtrade.py"}]
45 setup(
46     #console = [{"script" : ‘comtrade.py‘}], 
47     name = comtrade,
48     version = 1.0,
49     windows = [{"script":"comtrade.py", "icon_resources": [(1, "logo.ico")]} ],
50     options=opts, data_files=data_files)

运行时仍然出错,提示(No module named "linalg"),找来找去也没找到 linalg.pyd这个文件,只好把有 import linalg的地方删掉,运行ok。

 

py2exe 打包scipy时遇到的问题

原文:http://www.cnblogs.com/cxt212/p/5089712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!