2016-10-27 4 views
0

Я пытаюсь заставить Pygraphviz работать с Python3 на Mac, и я не могу решить TypeError.Pygraphviz/Python3/Mac: TypeError

В частности, выходной сигнал следующего кода (python3/Eclipse, неонового/MacOS 10.10.5, адаптированный учебник от here)

import networkx as nx 
import queueing_tool as qt 
import pygraphviz as pgv 

a = pgv.AGraph() 
print(a._get_prog('fdp')) 

g = qt.generate_random_graph(200, seed=3) 
q = qt.QueueNetwork(g, seed=3) 
q.max_agents = 20000 
q.initialize(100) 
q.simulate(10000) 

pos = nx.nx_agraph.graphviz_layout(g.to_undirected(), prog='neato') 

является следующая ошибка:

/usr/local/bin/fdp //<-- this shows that Eclipse finds 'fdp' after adding /usr/local/bin to $PATH, ERROR in the following: 
Traceback (most recent call last): 
    File "/Users/flurin/Documents/workspace/pedQN/main.py", line 14, in <module> 
    pos = nx.nx_agraph.graphviz_layout(g.to_undirected(), prog='neato') 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/networkx/drawing/nx_agraph.py", line 228, in graphviz_layout 
    return pygraphviz_layout(G,prog=prog,root=root,args=args) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/networkx/drawing/nx_agraph.py", line 262, in pygraphviz_layout 
    A.layout(prog=prog,args=args) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pygraphviz/agraph.py", line 1358, in layout 
    data = self._run_prog(prog, ' '.join([args, "-T", fmt])) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pygraphviz/agraph.py", line 1338, in _run_prog 
    warnings.warn(b"".join(errors), RuntimeWarning) 
TypeError: cannot use a string pattern on a bytes-like object 

Если я бегу тот же код с использованием Python 2.7.x (требуется только изменение «print (arg)» на «print arg»). Я получаю следующий вывод (тонны предупреждений, но он работает):

/usr/local/bin/fdp 
/usr/local/lib/python2.7/site-packages/pygraphviz/agraph.py:1338: RuntimeWarning: Warning: node 0, position [ 5.50797903 7.08147823], expected two floats 
Warning: node 12, position [ 5.44649018 7.80314765], expected two floats 
[... here other warnings of the same kind] 
Warning: Overlap value "prism" unsupported - ignored 

    warnings.warn(b"".join(errors), RuntimeWarning) 

Так что мой вопрос: как я могу получить pygraphviz для работы с Python3? Я понятия не имею, где искать. Обратите внимание: нет никакой разницы в ошибках, которые я получаю при запуске вышеуказанного кода с терминала или из Eclipse.

Есть ли несовместимость с Python3? Я помню, как несколько лет назад было сказано, что для «научных целей» все же лучше использовать Python2.x. Это все еще так?

Большое спасибо за вашу помощь заранее!

+1

Обратите внимание на ответ Арика. – Joel

+0

Кроме того, эта ошибка возникает только в том случае, если код создает предупреждение во время выполнения. Я решил причину предупреждения времени выполнения. Теперь мой скрипт завершен без указанной выше ошибки. –

ответ

3

Ошибка в обработке байтов/строк ошибок из графического объекта, появившегося с помощью Python 3. Исправление было включено (https://github.com/pygraphviz/pygraphviz/pull/104) в ветку master-сервера pygraphviz github. Вы можете загрузить его с https://github.com/pygraphviz/pygraphviz, пока не сделаете новый выпуск.

n.b. pygraphviz корректно работает с Python3.