2011-06-27 17 views
8

के साथ py2exe का उपयोग कर मैं एक python स्क्रिप्ट से एक .exe फ़ाइल उत्पन्न करने का प्रयास कर रहा हूं जो wxPython और Matplotlib का उपयोग करता है और यह असंभव प्रतीत होता है।wxPython और Matplotlib

आयात मैं कर रहा हूँ (matplotlib के साथ संबंधित) निम्नलिखित हैं:

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 डेटा फ़ाइलों को नहीं मिला", जिस तरह से, सफलतापूर्वक बनाया गया है।

अतिरिक्त जानकारी: मैं पहले से अजगर 2.6, matplotlib 0.99.3, wxPython 2.8.11.0 उपयोग कर रहा हूँ Windows XP पर

धन्यवाद। किसी भी मदद की सराहना की जाएगी!

चीयर्स, 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

py2exe बजाय PyInstaller का उपयोग करें। यह WxPython और matplotlib के लिए पूर्ण समर्थन है। और यह सक्रिय विकास में है, py2exe के विपरीत।

+0

मैं इस सिफारिश को दूसरा करता हूं। PyInstaller WxPython और matplotlib के लिए बहुत अच्छा काम करता है, और कुछ अन्य लोगों ने उनके [समर्थित पैकेज] (http://www.pyinstaller.org/wiki/SupportedPackages) सूची जैसे [xlrd] (http://pypi.python.org) पर उल्लेख नहीं किया है/pypi/xlrd)। मैं एक परियोजना पर पिछले कुछ हफ्तों के लिए PyInstaller और इन सभी 3 पैकेजों का उपयोग कर रहा हूं और यह केवल दर्द रहित है। – ChrisC

+0

@ChrisC मैंने [cx_freeze] (http://cx-freeze.sourceforge.net/) का भी उपयोग किया है, क्योंकि PyInstaller 1.4 ने Python 2.6 का समर्थन नहीं किया है। मैं थोड़ा आश्चर्यचकित हूं कि py2exe का उपयोग बहुत अधिक किया जा रहा है क्योंकि इसे 2008 से अपडेट नहीं किया गया है। – Velociraptors

+1

ईमानदार होने के लिए, मुझे लंबे समय तक py2exe और PyInstaller के बीच कोई अंतर नहीं दिखाई देता और बस इसे डिफ़ॉल्ट py2exe ...जब तक मुझे पता चला कि PyInstaller ने MSVCR * डीएलएल वितरण silliness संभाला और matplotlib लपेट सकता है। तब से पीछे नहीं देखा है। – ChrisC

1

एक साधारण परीक्षण के लिए, आप बस अपने साइट फ़ोल्डर में 'साइट-पैकेज \ matplotlib' में 'mpl-data' फ़ोल्डर कॉपी कर सकते हैं। जहां तक ​​मुझे पता है, 'mpl-data' को एकल निष्पादन योग्य में बंडल नहीं किया जा सकता है, इसलिए इसे आपके बाइनरी वितरण में फ़ोल्डर के रूप में शामिल किया जाना चाहिए।

मैंने GUI2Exe के माध्यम से py2exe का उपयोग किया और मेरे ऐप को फ्रीज कर सकता था जो matplotlib + numpy/scipy + wx (तो स्पष्ट रूप से wxagg बैकएंड) का उपयोग करता है। मुझे _tkagg को शामिल करने की आवश्यकता नहीं थी (जिसे स्पष्ट रूप से GUI2Exe डिफ़ॉल्ट सेटिंग में शामिल किया गया है जो मेरे लिए काम करता है)।

0

Py2exe दस्तावेज़ समस्या का स्रोत बताता है और समाधान देता है। यह मेरे लिए काम किया। (Matplotlib संस्करण 1.1.0, अजगर 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 
)