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