2011-06-27 13 views
8

wxPythonとMatplotlibを使用するpythonスクリプトから.exeファイルを生成しようとしていますが、これは不可能と思われます。私は(matplotlibのに関連)やっているwxPythonとMatplotlibでpy2exeを使用する

輸入は、以下の通りである:私は

from distutils.core import setup 
import py2exe 
import matplotlib 

opts = { 
'py2exe': {"bundle_files" : 3, 
      "includes" : [ "matplotlib", 
      "matplotlib.backends", 
      "matplotlib.backends.backend_wxagg", 
         "numpy", 
         "matplotlib.ticker", 
         "matplotlib.figure", "_wxagg"], 
      'excludes': ['_gtkagg', '_tkagg', '_agg2', 
         '_cairo', '_cocoaagg', 
         '_fltkagg', '_gtk', '_gtkcairo', ], 
      'dll_excludes': ['libgdk-win32-2.0-0.dll', 
         'libgobject-2.0-0.dll'] 
      } 
    } 

setup(


    windows=[{'script':'starHunter.py', 'icon_resources':[(1, 'icon.ico')]}], 

    data_files=matplotlib.get_py2exe_datafiles(), 

    options=opts, 

    zipfile=None 
) 

from numpy import *
import matplotlib
matplotlib.interactive(True)
matplotlib.use("WXAgg")
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
from matplotlib.ticker import MultipleLocator

ここで私が使用しようとしているsetup.pyファイルであり、ところで、.exeファイルを実行しようとした後、常に「matplotlibデータファイルが見つかりませんでした」というメッセージが表示されます。

追加情報:私は、事前にWindows XP上

おかげでPythonの2.6、matplotlibの0.99.3、wxPythonの2.8.11.0を使用しています。 ご協力いただければ幸いです!

乾杯、 Andressa Sivolella

答えて

0

それが働いていた場合、それは可能でしょうとして便利matplotlib.get_py2exe_datafiles()、と多くの問題があります。また、使用するバックエンドを指定することもお勧めします。ここで私は最近使用した作業matplotlibのインポートです:

from distutils.core import setup 
import py2exe 
from glob import glob 

import matplotlib  #Import then use get_py2exe_datafiles() to collect numpy datafiles. 
matplotlib.use('wxagg') #Specify matplotlib backend. tkagg must still be included else error is thrown. 

data_files = [ 
      ("Stuff", glob(r'C:\ProjectFolder\Stuff\*.*')) 
      ,("dlls", glob(r'C:\ProjectFolder\dlls\*.dll')) 
      ,("pyds", glob(r'C:\ProjectFolder\pyds\*.pyd')) # py2exe specified pyd's 
      ] 
# Extend the tuple list because matplotlib returns a tuple list.  
data_files.extend(matplotlib.get_py2exe_datafiles()) #Matplotlib - pulls it's own files 

options = {'py2exe':{#'bundle_files': 1,         # Bundle files to exe 
         'includes': ["matplotlib.backends.backend_tkagg"] # Specifically include missing modules 
         ,'excludes': ['_gtkagg', 'tkagg']     # Exclude dependencies. Reduce size. 
         } 
      } 

setup(
name='ProjectName' 
,options = options 
,data_files=data_files 
,console=['projectname.py'] 
) 
9

PyInstallerではなく、py2exeを使ってみてください。 wxPythonとmatplotlibを完全にサポートしています。 py2exeとは異なり、開発中です。

+0

これは2番目の推奨です。 PyInstallerはwxPythonとmatplotlib、そして[xlrd](http://pypi.python.org)のような[Supported Packages](http://www.pyinstaller.org/wiki/SupportedPackages)のリストには記載されていないいくつかのものでうまくいきます/ pypi/xlrd)。私はPyInstallerとこれらのパッケージの3つすべてを過去数週間にわたってプロジェクトで使用してきました。 – ChrisC

+0

@ChrisC PyInstaller 1.4はPython 2.6をサポートしていなかったので、[cx_freeze](http://cx-freeze.sourceforge.net/)も使用しました。私は、py2exeが2008年以来更新されていないので、あまり使用されていないことにちょっと驚いています。 – Velociraptors

+1

正直言って、私はpy2exeとPyInstallerの間に大きな違いは見当たりませんでした。 py2exe ...私はPyInstallerがMSVCR * .DLL配布の愚かさを処理し、matplotlibをラップできることを発見しました。それ以来振り返っていない。 – ChrisC

1

単純にテストするには、 'site-packages \ matplotlib'の 'mpl-data'フォルダをアプリフォルダにコピーするだけです。私が知る限り、 'mpl-data'は単一の実行可能ファイルにバンドルすることはできませんので、これはバイナリディストリビューションにフォルダとして含める必要があります。

私はGUI2Exe経由でpy2exeを使用し、matplotlib + numpy/scipy + wx(これは明らかにwxaggバックエンド)を使用するアプリケーションをフリーズする可能性があります。私は_tkaggを含める必要はありませんでした(私のために働いたGUI2Exeのデフォルト設定では明示的に除外されています)。

0

Py2exeのマニュアルは、問題の原因と解決策を説明しています。それは私のために働いた。私は他の回答をコメントしたり評価する一切の権限を持っていないので(matplotlibのバージョン1.1.0、Pythonの2.7)

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

は、私は自分のものを記述する必要があります。カークの答えは私の最も貴重な助けでした。 PyInstallerは回避策かもしれませんが(テストしていない)、問題の技術的解決策ではありません。

from distutils.core import setup 
import py2exe 
from distutils.filelist import findall 
import os 
import matplotlib 
matplotlibdatadir = matplotlib.get_data_path() 
matplotlibdata = findall(matplotlibdatadir) 
matplotlibdata_files = [] 
for f in matplotlibdata: 
    dirname = os.path.join('matplotlibdata', f[len(matplotlibdatadir)+1:]) 
    matplotlibdata_files.append((os.path.split(dirname)[0], [f])) 


setup(
    console=['test.py'], 
    options={ 
      'py2exe': { 
         'includes': ["sip", "PyQt4.QtGui"], 
         'packages' : ['matplotlib', 'pytz'], 
         'excludes': ['_gtkagg', '_tkagg'] 
         } 
      }, 
    data_files=matplotlibdata_files 
) 
関連する問題