Почему draw () в pygraphviz / agraph не работает на сервере (но локально)? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть приложение 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 Ответ

0 голосов
/ 25 ноября 2018

На сервере 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')
...