Почему draw() в pygraphviz/agraph не работает на сервере (но локально)?

У меня есть приложение Python, использующее Pygraphviz, который отлично работает локально, но на сервере draw Функция выдает ошибку. Это происходит в make_svg, Следующие строки являются соответствующей частью ошибок, которые я получаю. (Полный след здесь.)

File "/path/to/app/utils/make_svg.py", line 17, in make_svg
  prog='dot'
File "/path/to/pygraphviz/agraph.py", line 1477, in draw
  fh = self._get_fh(path, 'w+b')
File "/path/to/pygraphviz/agraph.py", line 1506, in _get_fh
  fh = open(path, mode=mode)
FileNotFoundError: [Errno 2] No such file or directory: 'app/svg_files/nope.svg'

логирование type(g) дает <class 'pygraphviz.agraph.AGraph'> как и ожидалось.

Я работаю в virtualenv в mod_wsgi 4.6.5/Python3.7 среда на сервере Webfaction.
Локально я использую virtualenv с Python 3.5.
Версия Pygraphviz является 1.3.1.
(Сначала у меня было 1,5 на сервере. Ошибка была точно такой же, за исключением номеров строк.)

Что я могу сделать?

Та же ошибка описана в этом отчете об ошибках прошлого года.
Я не понимаю, какой каталог я должен создать. svg_files существует и имеет права 777.

draw функция в конце make_svg должен создать SVG.
(И в конце extract_coordinates_from_svg файл снова удален.)
Имя файла - это хеш, созданный в connected_dag (svg_name).

1 ответ

Решение

На сервере app/svg_files кажется, не описать то же место, что и на местном уровне.
Я определил путь однозначно, и теперь он работает.

file_path = '{grandparent}/svg_files/{name}.svg'.format(
    grandparent=os.path.dirname(os.path.dirname(__file__)),
    name=name
)
g.draw(file_path, prog='dot')
Другие вопросы по тегам