2011-01-24 8 views
5

का उपयोग कर py2exe के साथ विफल रहता है मैं py2exe का उपयोग करके एक स्टैंडअलोन एप्लिकेशन बनाने की कोशिश कर रहा हूं जो matplotlib और numpy पर निर्भर करता है।bundle_files = 1 matplotlib

import numpy as np 
import pylab as plt 

plt.figure() 
a = np.random.random((16,16)) 
plt.imshow(a,interpolation='nearest') 
plt.show() 

py2exe (http://www.py2exe.org/index.cgi/MatPlotLib से संशोधित) के लिए सेटअप कोड यह है:: आवेदन के कोड यह है

from distutils.core import setup 
import py2exe 
import sys 

sys.argv.append('py2exe') 

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

setup(console=[{"script" : "matplotlib_test.py"}], 
          zipfile=None,options=opts) 

अब, जब bundle_files सेट किया गया है = 3 या अनुपस्थित है, सब ठीक काम करता है , लेकिन परिणामस्वरूप exe को ऐसी मशीन पर वितरित नहीं किया जा सकता है जो पाइथन, आदि के समान संस्करण के साथ कॉन्फ़िगर नहीं किया गया है। यदि मैं bundle_files = 1 सेट करता हूं, तो यह एक उपयुक्त बड़ी exe फ़ाइल बनाता है जिसमें सब कुछ बंडल होना चाहिए, लेकिन यह स्थानीय रूप से चलाने में विफल रहता है या वितरित। इस मामले में, मैं विंडोज 7 मशीन पर पाइथन 2.6.6 के साथ सब कुछ बना रहा हूं और पाइथन 2.6.4 के साथ स्थानीय रूप से और एक्सपी मशीन पर चलाने की कोशिश कर रहा हूं।

एक्सपी मशीन पर चलने पर मुझे मिली त्रुटियां अजीब लगती हैं, बंडल किए बिना, मुझे विन 7 पर कोई त्रुटि नहीं मिलती है। बंडलिंग के साथ, विन 7 ट्रेसबैक जानकारी की रिपोर्ट नहीं करता है, इसलिए मुझे यकीन नहीं है कि त्रुटियां हैं वही। अगर कोई मुझे एक दिशा है कि इस ठीक कर देंगे में इंगित कर सकते हैं

Traceback (most recent call last): 
    File "matplotlib_test.py", line 2, in <module> 
    File "zipextimporter.pyc", line 82, in load_module 
    File "pylab.pyc", line 1, in <module> 
    File "zipextimporter.pyc", line 82, in load_module 
    File "matplotlib\__init__.pyc", line 709, in <module> 
    File "matplotlib\__init__.pyc", line 627, in rc_params 
    File "matplotlib\__init__.pyc", line 565, in matplotlib_fname 
    File "matplotlib\__init__.pyc", line 240, in wrapper 
    File "matplotlib\__init__.pyc", line 439, in _get_configdir 
RuntimeError: Failed to create C:\Documents and Settings\mnfienen/.matplotlib; c 
onsider setting MPLCONFIGDIR to a writable directory for matplotlib configuratio 
n data 

अग्रिम में बहुत धन्यवाद: किसी भी मामले में, यहाँ XP पर त्रुटि संदेश है!

संपादित करें 1:

मैं विलियम की सलाह का पालन और MPLCONFIGDIR साथ समस्या तय है, लेकिन अब एक नया त्रुटि मिलती है:

:Traceback (most recent call last): 
    File "matplotlib\__init__.pyc", line 479, in _get_data_path 
RuntimeError: Could not find the matplotlib data files 

संपादित करें 2: मैं का उपयोग करके डेटा फ़ाइलों समस्या तय:

data_files=matplotlib.get_py2exe_datafiles() 

यह एक नया त्रुटि की ओर जाता है:

Traceback (most recent call last): 
    File "matplotlib_test.py", line 5, in <module> 
    import matplotlib.pyplot as plt 
    File "matplotlib\pyplot.pyc", line 78, in <module> 
    File "matplotlib\backends\__init__.pyc", line 25, in pylab_setup 
ImportError: No module named backend_wxagg 

उत्तर

1

खैर मिशा फिएन, मुझे लगता है कि ऐसा लगता है कि यह आपके उपयोगकर्ता फ़ोल्डर को लिखने में असफल रहा है, जिसे आप शायद पहले ही जानते थे। अंधेरे में बस एक स्टैब लेकिन क्या आपने परीक्षण करने की कोशिश की है यदि आप सलाह का पालन करते हैं और MPLCONFIGDIR को कुछ और बुनियादी (उदाहरण के लिए "सी: \ matlibplotcfg \") में बदलते हैं तो क्या होता है?

+0

धन्यवाद विलियम। तो, मैंने MPLCONFIGDIR को बदलने की कोशिश की लेकिन यह एक लाल हेरिंग था। बाहर निकलता है, यहां तक ​​कि आधार परीक्षण भी .py कोड XPLCONFIGDIR के बिना XP लिखने पर एक लिखने योग्य स्थान पर नहीं चलाया जाएगा, लेकिन अब मुझे एक नई त्रुटि मिलती है। उपरोक्त मूल प्रश्न में संपादित करें ..... – mishaF

+0

ऐसा लगता है कि यह पहली बार ऐसा लगता है की तुलना में यह एक और गंभीर समस्या है। आपकी नई वर्तमान त्रुटि के लिए आप अपनी सूची में "matplotlib.backends.backend_tkagg" जोड़ने का प्रयास कर सकते हैं, लेकिन कुछ मुझे बता रहा है कि एक आसान और अधिक ठोस समाधान है जो चारों ओर तैर रहा है =/ – William

+0

मजेदार- मैंने "matplotlib.backends.backend_tkagg डालने का प्रयास किया "शामिल नहीं है, लेकिन इसमें शामिल नहीं है। मैं मानता हूं, सोचा, वहां कहीं फ्राइंग करने के लिए एक बड़ी मछली है। – mishaF

2

मुझे एक ही समस्या थी। मुझे लगता है कि समस्या matplotlib में pylab के कारण हुई थी, py2exe को खोजने में परेशानी होती है और पिलैब से जुड़े सभी बैकएंड प्राप्त होते हैं।

मुझे पिलैब के बजाय matplotlib.figure का उपयोग करने के लिए मेरे सभी एम्बेडेड प्लॉट्स को बदलकर समस्या का सामना करना पड़ा। यहाँ कैसे matplotlib.figure साथ एक साजिश बनाने के लिए पर एक साधारण उदाहरण है:

import matplotlib.figure as fg 
import numpy as np 
fig = fg.Figure() 
ax = fig.add_subplot(111) 
lines = ax.plot(range(10), np.random.randn(10), range(10), np.random.randn(10)) 

आप इस के साथ सीधे) fig.show उपयोग नहीं कर सकते (है, लेकिन यह GUIs में एम्बेड किया जा सकता है। मैंने टिंकीर का इस्तेमाल किया:

canvas = FigureCanvasTkAgg(fig, canvas_master) 
canvas.show() 
0

समस्या को हल करने के दो तरीके हैं।

1.- अपने matplotlib.rc फ़ाइल उपयोग में:

backend : TkAgg

2.- वैकल्पिक रूप से, अपने सेटअप में।py "भी शामिल है" कुंजी जोड़ने:

"matplotlib.backends.backend_wxagg"

दोनों तरीकों से अजगर 2.6 में परीक्षण आंकड़ा उत्पादन, खिड़कियां XP