Невозможно импортировать matplotlib в движок Google Flexible App с flask и python 3.6

Я запускаю службу на движке Google Flexible App с Flask и python 3.6. Поскольку мне приходится использовать pandas, numpy и многие другие подобные расширения, я не могу использовать стандарт GAE.

Мой app.yaml начинается так

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

runtime_config:
   python_version: 3

мой основной файл python перестал работать (т.е. разворачиваться), когда я попытался добавить matplotlib, чтобы сделать png и хранить отдельно в моем ведре. Мне не нужно ничего отображать, я просто сохраняю файл

У меня есть импортная линия

import matplotlib.pyplot as plt

stacktrace из облака Google показывает следующее

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

Последняя строка кажется показательной, здесь https://wiki.python.org/moin/TkInter это говорит

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.

Но как я могу настроить python3 на движке гибких приложений Google? Могу ли я установить какой-нибудь дополнительный файл в свой "requirements.txt"? Это текстовый файл, который содержит имена всех внешних зависимостей, таких как pandas, numpy, scipy и т. д., Которые могут быть установлены с помощью pip

Обновлено: я нашел это Создание PNG с помощью matplotlib, когда DISPLAY не определен

по сути

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

Однако я все еще не могу найти, где GAE flex сохраняет файл, созданный fig.savefig, чтобы я мог переместить его в корзину или что-то в этом роде.

Для Stack Overflow предпочтительнее размещать ваш последний вопрос отдельно.

A.Queue 25.05.2018 12:23

@ A. Поставить ссылку, которую вы указываете, как дублирующую, записано в самом вопросе. На второй вопрос ... я надеялся, что кто-то даст лучший ответ. Мне удалось это сделать следующим образом: вызывается fig.savefig(filename), затем я получаю к нему доступ с помощью path = os.getcwd()' 'blob.upload_from_filename(os.path.join(path,filename)), так что, очевидно, все сохранения находятся в cwd .... но как мне контролировать, где сохранять?

Vipluv 25.05.2018 12:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
110
0

Другие вопросы по теме