0

I am running a service on Google Flexible App engine with Flask and python 3.6. As I have to use pandas and numpy and many other such extensions, I can't use GAE standard.

My app.yaml starts like this

service: my_service
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
   python_version: 3

my main python file stopped working (i.e deploying), when i tried to add matplotlib to make a png and store seperately on my bucket. I dont need to display anything but just store the file

I have an import line

import matplotlib.pyplot as plt

the stacktrace from Google cloud shows the following

import matplotlib.pyplot as plt
  File "/env/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/env/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
[backend_name], 0)
  File "/env/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 4, in <module>
    from . import tkagg  # Paint image to Tk photo blitter extension.
  File "/env/lib/python3.6/site-packages/matplotlib/backends/tkagg.py", line 5, in <module>
    from six.moves import tkinter as Tk
  File "/env/lib/python3.6/site-packages/six.py", line 92, in __get__
    result = self._resolve()
  File "/env/lib/python3.6/site-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/env/lib/python3.6/site-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/opt/python3.6/lib/python3.6/tkinter/__init__.py", line 36, in <module>
   import _tkinter # If this fails your Python may not be configured for Tk
ImportError: libBLT.2.5.so.8.6: cannot open shared object file: No such file or directory

The last line seems telling, here https://wiki.python.org/moin/TkInter it says

If it fails with "No module named _tkinter", your Python configuration needs to be modified to include this module (which is an extension module implemented in C). Do not edit Modules/Setup (it is out of date). You may have to install Tcl and Tk (when using RPM, install the -devel RPMs as well) and/or edit the setup.py script to point to the right locations where Tcl/Tk is installed. If you install Tcl/Tk in the default locations, simply rerunning "make" should build the _tkinter extension.

But how can I configure python3 on the google flexible app engine? Is there some additional file I can install in my 'requirements.txt'? That's the text file which contains the names of all the external dependencies like pandas, numpy, scipy etc that can be pip-installed

EDIT: I found this Generating a PNG with matplotlib when DISPLAY is undefined

basically

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

However, I still can't find where GAE flex is saving the file so created by fig.savefig so I can move it to a bucket or something.

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Vipluv
  • 884
  • 7
  • 23
  • It's preferable for Stack Overflow to post your last question separately. – A.Queue May 25 '18 at 10:23
  • @A.Queue the link you point as duplicate is written in the question itself. For the second question...i was hoping someone would give a better answer . I succeeded as follows: `fig.savefig(filename)` is called, i then get access to it by `path = os.getcwd()' 'blob.upload_from_filename(os.path.join(path,filename))` so apparently all saves are in cwd....but how do i control where to save ? – Vipluv May 25 '18 at 10:34

0 Answers0