में matplotlib का उपयोग करना मेरे टैग और शीर्षक मेरी समस्या को स्पष्ट रूप से बताते हैं। मैं Google App Engine में रीयल-टाइम प्लॉट बनाने के लिए matplotlib का उपयोग करना चाहता हूं। मैंने documentation पढ़ा है और एसओ और Google पर खोज की है। मुझे this working demo पर इशारा करते हुए एक पोस्ट मिली। लेकिन जब मैं इसे अपने आप कोशिश करता हूं, तो यह मेरे लिए काम नहीं करता है।GAE
मैं एक साधारण आवेदन बनाया है, केवल एक हैंडलर स्क्रिप्ट hello_world.py
import numpy as np
import os
import sys
import cStringIO
print "Content-type: image/png\n"
os.environ["MATPLOTLIBDATA"] = os.getcwdu() # own matplotlib data
os.environ["MPLCONFIGDIR"] = os.getcwdu() # own matplotlibrc
import matplotlib.pyplot as plt
plt.plot(np.random.random((20))) #imshow(np.random.randint((10,10)))
sio = cStringIO.StringIO()
plt.savefig(sio, format="png")
sys.stdout.write(sio.getvalue())
और आ विन्यास फाइल app.yaml से मिलकर
application: helloworldtak
version: 1
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /.*
script: hello_world.py
libraries:
- name: numpy
version: "latest"
- name: matplotlib
version: "latest"
मैं कुछ प्लॉट करने के लिए चाहते हैं और फिर सामग्री को पीएनजी-छवि के रूप में वापस करें। यह प्रक्रिया अपाचे या आईआईएस जैसे सामान्य वेब-सर्वर के लिए ठीक काम करती है, मैंने इसे दस लाख बार किया था।
समस्या यह है कि: जब मैं विकास सर्वर के भीतर स्थानीय रूप से अपनी स्क्रिप्ट चलाता हूं, तो मुझे एक त्रुटि मिलती है जो शायद मेरे एमपीएल संस्करण 1.1.1 के कारण है, जो जीएई में केवल "प्रयोगात्मक" है। लेकिन जब मैं अपने ऐप को जीएई में तैनात करता हूं, तो मुझे पूरी तरह से अलग, असंबद्ध त्रुटि मिलती है।
दिखता है को देखते हुए, ट्रैस है:
Traceback (most recent call last):
File "/base/data/home/apps/s~helloworldtak/1.364765672279579252/hello_world.py", line 16, in <module>
import matplotlib.pyplot as plt
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/pyplot.py", line 23, in <module>
from matplotlib.figure import Figure, figaspect
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/figure.py", line 18, in <module>
from axes import Axes, SubplotBase, subplot_class_factory
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/axes.py", line 14, in <module>
import matplotlib.axis as maxis
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/axis.py", line 10, in <module>
import matplotlib.font_manager as font_manager
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/font_manager.py", line 1324, in <module>
_rebuild()
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/font_manager.py", line 1278, in _rebuild
fontManager = FontManager()
File "/python27_runtime/python27_lib/versions/third_party/matplotlib-1.1.1/matplotlib/font_manager.py", line 995, in __init__
self.defaultFont['ttf'] = self.ttffiles[0]
IndexError: list index out of range
यह एमपीएल के फोंट-कैश के साथ कुछ करने के लिए लगता है। मैंने दस्तावेज़ों में पढ़ा है कि कैशिंग और फ़ाइल-पहुंच जीएई में एमपीएल के साथ समस्याओं में से एक है, लेकिन जाहिर है, आयात दूसरों के लिए काम करता है।
मैं क्या गलत कर रहा हूं?
संपादित नीचे जवाब के आधार पर, मैं
import numpy as np
import cStringIO
import matplotlib.pyplot as plt
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
plt.plot(np.random.random((20)),"r-")
sio = cStringIO.StringIO()
plt.savefig(sio, format="png")
self.response.headers['Content-Type'] = 'image/png'
self.response.out.write(sio.getvalue())
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
और इस तरह, यह काम कर रहा होने के लिए मेरी कोड बदल दिया है।
स्पष्ट होने के लिए, यह स्थानीयहोस्ट के तहत विफल रहता है? और आपने अपनी ऐप.यामल फ़ाइल कहां से प्राप्त की? (पायथन 7 सामान्य रूप से मुख्य स्क्रिप्ट को hello_world.app के रूप में कॉल करता है) –
मैंने इसे "प्रारंभ करना" मार्गदर्शिका के अनुसार बनाया है। मैं मैनुअल के अनुसार इसे 2.7-संस्करण में माइग्रेट कर दिया। –
यह लोकहोस्ट के तहत विफल रहता है और जब GAE पर तैनात किया जाता है। लेकिन: अपवाद और ट्रेसबैक अलग है। मैंने स्थानीय को शामिल नहीं किया क्योंकि मैं स्थानीय असंगतताओं को समस्या की संभावित उत्पत्ति के रूप में बाहर करना चाहता था। –