2

matplotlib をインポートとして含めると、exe にビルドされない wxpython アプリケーションがあります。たとえば、メインの py ファイルのインポートは次のようになります。

import os
import matplotlib
matplotlib.use('WX')
import wx
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from mpl_toolkits.basemap import Basemap
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import datetime
import copy
import wx.lib.scrolledpanel as scrolled
import wx.lib.agw.pybusyinfo as PBI

私は PyInstaller 1.5.1 を使用しています (自分のマシンに 2.0 または 2.1 を正しくインストールできないようです)。また、優れた GUI2EXE ファイルを使用して、すべての設定をガイドしています。コードをコンパイルすると、実行可能ファイルにコンパイルされますが、exe は実行されません。ただし、すべての matplotlib インポートをコメント アウトすると、exe が正常にビルドされて開きます (含まれているマップが表示されないだけです)。したがって、私の問題は matplotlib のインポートにあることがわかっています。

コンパイル時に添付される警告ファイルがあります。非常に長いですが、最初の数行は次のようになります。

W: no module named termios (top-level import by tty)
W: no module named matplotlib.rcParams (top-level import by matplotlib.figure)
W: no module named numpy.not_equal (top-level import by numpy.numarray.ufuncs)
W: no module named setuptools.Command (top-level import by setuptools.command.setopt)
W: no module named numpy.testing.Tester (top-level import by numpy.polynomial)
W: no module named numpy.compat.formatargspec (top-level import by numpy.ma.core)

一連の調査の結果、これは隠れたインポートの問題のようです (私が間違っている可能性もありますが)。私はドキュメント(http://www.pyinstaller.org/export/develop/project/doc/Manual.html#listing-hidden-imports)を見て、そこで例を実行しhooks-matplotlib.figure.py、そこで試しhiddenimports=['matplotlib','figure']. てみましたが、それでも同じ結果が得られましたエラー。また、フック フォルダーの下に既に Matplotlib があることを PyInstaller ディレクトリで確認しました。

PyInstaller を使用して正しくビルドしていない理由がわかりません。何かご意見は?

詳細については、pyinstaller のセットアップ スクリプトを次に示します。

data_files = [('AccesstoJson.py', 'C:\\Users\\Jacob\\Documents\\MyFolder\\AccesstoJson.py',
              'DATA'), ('pic2.png', 'C:\\Users\\Jacob\\Documents\\MyFolder\\pic1.png',
              'DATA'), ('Calculate_Distance.py', 'C:\\Users\\Jacob\\Documents\\MyFolder\\Calculate_Distance.py',
              'DATA'), ('pic2.jpg', 'C:\\Users\\Jacob\\Documents\\MyFolder\\pic2.jpg',
              'DATA'), ('pic3.png', 'C:\\Users\\Jacob\\Documents\\MyFolder\\pic3.png',
              'DATA'), ('Program_Data_2013.json', 'C:\\Users\\Jacob\\Documents\\MyFolder\\Program_Data_2013.json',
              'DATA'), ('pic4.ico', 'C:\\Users\\Jacob\\Documents\\MyFolder\\pic4.ico',
              'DATA')]

includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter']
packages = []
dll_excludes = []
dll_includes = []

options = [('v', '', 'OPTION')]

analysis = Analysis(['C:\\Python27\\Lib\\site-packages\\pyinstaller-1.5.1\\support\\_mountzlib.py',
           'C:\\Python27\\Lib\\site-packages\\pyinstaller-1.5.1\\support\\useUnicode.py',
           'C:\\Users\\Jacob\\Documents\\MyFolder\\Scheduler_25Oct2013.py'],
                    pathex=['C:\\Python27\\Lib\\site-packages\\mpl_toolkits\\*', 'C:\\Users\\Jacob\\Documents\\MyFolder'],
                    hookspath=['C:\\Python27\\Lib\\site-packages\\numpy-1.7.1-py2.7-win32.egg'],
                    excludes=excludes)

pyz = PYZ(analysis.pure, level=9)   

executable = EXE( pyz,
                 analysis.scripts + includes + packages + options,
                 analysis.binaries - dll_excludes + dll_includes + data_files,
                 name=r"Scheduler1.exe",
                 debug=False,
                 console=False,
                 strip=False,
                 upx=False,
                 icon=r'C:\Users\Jacob\Documents\MyFolder\pic4.ico',
                 version=None)
4

1 に答える 1

0

私も同じ問題を抱えていました。

http://www.py2exe.org/index.cgi/MatPlotLib

matplotlib を実行するには mpl-data フォルダーが必要であり、これを exe ファイルにパッケージ化することはできません。このフォルダーを site-packages から手動でコピーするか、次のようにします。

import matplotlib
...
setup(
    ...
    data_files=matplotlib.get_py2exe_datafiles(),
)

py2exe の setup.py で。data_files フォルダーがコピーされます。

于 2014-03-25T17:34:19.600 に答える