Как лучше всего создать диаграмму UML из исходного кода Python?

Коллега хочет сгенерировать диаграммы классов UML из кучи исходного кода Python. В первую очередь его интересуют отношения наследования и слегка интересуют отношения композиции, и его мало волнуют атрибуты класса, которые являются просто примитивами Python.

Исходный код довольно прямолинеен и не является чрезвычайно зловещим — например, он не использует какую-либо причудливую магию метаклассов. (В основном это со времен Python 1.5.2, с некоторыми вкраплениями «современных» вещей 2.3ish.)

Какое из существующих решений можно порекомендовать?


person Mike Pirnat    schedule 03.11.2008    source источник
comment
Модеры не сочли этот вопрос конструктивным. Я (и многие другие, кому это понравилось) нашел это полезным. Ну и что? это не более важно, чем неконструктивность!   -  person yati sagade    schedule 31.07.2013
comment
Не конструктивно, потому что это вызовет дебаты, аргументы, дискуссии ?????? Разве не этого мы хотим? Это очень актуальный вопрос..   -  person Bhushan    schedule 30.01.2014
comment
@yatisagade, если вы заметили, что он был закрыт, а не удален (и с таким количеством голосов, вероятно, практически никогда не может быть удален). Закрытие просто означает, что он не может получить новые ответы.   -  person tacaswell    schedule 09.04.2014
comment
@Bhushan Нет, мы не хотим обсуждения, нам нужны пары вопросов и ответов с четкими ответами. Это не суждение о том, что это интересный или полезный вопрос, это вопрос того, чтобы быть в теме для SO. Наверняка вы согласны с тем, что лучший редактор? (obs emacs) - неконструктивный вопрос, этот вопрос точно такой же формы.   -  person tacaswell    schedule 09.04.2014
comment
@tacaswell Некоторое обсуждение очень актуально, когда дело доходит до преобразования вопросов в формат вопросов и ответов.   -  person user32882    schedule 14.09.2019
comment
@tacaswell Я пришел сюда в поисках способа создания диаграмм UML, а не самого лучшего способа, и я уверен, что и другие тоже. Таким образом, вместо того, чтобы просто закрыть его, моды могут (должны?) предлагать альтернативные способы, которые лучше подходят. Это было бы более конструктивно, не так ли?   -  person antonimmo    schedule 03.07.2020
comment
Вместо того, чтобы пытаться заставить людей перестать задавать очевидные нормальные вопросы, они должны перестроить свои правила, чтобы разрешить подобные вопросы. Может быть, просто поместить их в раздел мнений вместо того, чтобы ставить большое НЕТ?   -  person wamster    schedule 18.11.2020


Ответы (10)


Возможно, вы слышали о Pylint, который помогает статически проверять код Python. Мало кто знает, что он поставляется с инструментом под названием Pyreverse, который рисует диаграммы UML из кода Python, который он читает. . Pyreverse использует graphviz в качестве серверной части.

Он используется следующим образом:

pyreverse -o png -p yourpackage .

где . также может быть одним файлом.

person Nicolas Chauvat    schedule 26.09.2011
comment
Вы знаете, как визуализировать частные методы, начинающиеся с _ - person gustavz; 29.06.2018
comment
К сожалению, диаграммы пакетов pyreverse огромны, поскольку все размещено горизонтально (больше ограничений графической визуализации, но все же). Бесполезно для включения в документы. - person oarfish; 10.10.2018
comment
@oarfish в качестве обходного пути, вы можете выбрать модули, которые хотите включить, и создать несколько отдельных графиков. - person jjmontes; 12.04.2019
comment
должен ли очевидный выбор для типа вывода не быть -o pdf? масштабируемый, с возможностью поиска. - person schlimmchen; 01.03.2021
comment
Есть много старых ссылок, которые указывают на ручную загрузку и установку старой версии pylint. Актуальную версию можно найти через pip install pylint или conda install pylint, если у вас есть conda-forge в качестве одного из ваших каналов. - person Jim Pivarski; 05.03.2021
comment
@gustavz Просто передайте опцию --filter-mode=ALL - person craymichael; 18.06.2021

Epydoc – это инструмент для создания документации API из исходного кода Python. Он также генерирует диаграммы классов UML, причудливо используя Graphviz. Вот пример диаграммы, сгенерированной из исходного кода Epydoc. сам.

Поскольку Epydoc выполняет как самоанализ объекта, так и анализ исходного кода, он может собирать больше информации относительно статических анализаторов кода, таких как Doxygen: он может проверять достаточное количество динамически сгенерированных классов и функций, но также может использовать комментарии или неназначенные строки в качестве источника документации, например. для переменных и общедоступных атрибутов класса.

person piro    schedule 03.11.2008
comment
Есть ли способ вывести векторную графику вместо гифок? Я не нашел документации по этому поводу, и графики совершенно бесполезны для чего-либо, кроме html-документа. - person oarfish; 22.02.2016
comment
В настоящее время epydoc не может генерировать графики. Ознакомьтесь с этим отчетом об ошибке. - person Luís de Sousa; 20.07.2016
comment
не работает с питоном 3 - person tomsv; 15.03.2017
comment
Я только что протестировал Python 3.7.1 и смог создать несколько диаграмм. - person may; 06.02.2021

Проверьте этот список из семи инструментов uml для python.

person Jordi Cabot    schedule 07.07.2011
comment
Мой инструмент UML с открытым исходным кодом Pynsource pynsource.com, упомянутый на странице выше, претерпел множество изменений версии с момента его упоминания. Теперь он анализирует Python 3, имеет поддержку масштабирования, макета, ASCII UML и рендеринга PlantUML. Pynsource также, насколько мне известно, является единственным инструментом UML, который распознает атрибуты экземпляра Python (а не только атрибуты класса). Это означает, что такие выражения, как self.myattr, приведут к правильному атрибуту «myattr» в результирующем классе UML. Готовые к запуску двоичные файлы доступны для Mac, Windows, Ubuntu 18 и 16, а также в репозитории Github с открытым исходным кодом. - person abulka; 15.03.2019

Некоторые классы корректных программ могут быть представлены в виде диаграмм, но в общем случае это невозможно. Объекты Python могут быть расширены во время выполнения, а объекты любого типа могут быть назначены любой переменной экземпляра. Выяснение того, на какие классы объект может содержать указатели (композицию), потребует полного понимания поведения программы во время выполнения.

Возможности метаклассов Python означают, что для рассуждений о структуре наследования также потребуется полное понимание поведения программы во время выполнения.

Чтобы доказать, что это невозможно, вы утверждаете, что если бы такой UML-диаграммер существовал, то вы могли бы взять произвольную программу, преобразовать операторы «остановки» в операторы, которые повлияли бы на UML-диаграмму, и использовать UML-диаграммер для решения проблемы остановки. что, как известно, невозможно.

person Andru Luvisi    schedule 03.11.2008
comment
Кое-что хорошее, но махание рукой, позволяющее решить остановку, все портит. Патологические случаи здесь не при чем. Достаточно хорошего поведения. - person ddaa; 04.11.2008
comment
Что ты имеешь в виду под рукой? Я не выписывал полные доказательства, но дал достаточно информации, чтобы любой, кто видел подобные доказательства, мог их создать, одно для композиции и одно для наследования. - person Andru Luvisi; 04.11.2008
comment
Вот аналогия: diff/patch может дать сбой множеством разных способов, некоторые из них тривиальны. Это по-прежнему очень полезно во многих реальных случаях. В разумных случаях построение диаграмм наследования тривиально. Делегирование более сложное, но выполнимое путем вывода типа в пределах пакета. - person ddaa; 04.11.2008

Если вы используете eclipse, возможно, PyUML. Однако не использовал его.

person David Arcos    schedule 03.11.2008
comment
Это действительно хорошее предложение, но FWIW я заметил на сайте проекта PyUML, что они еще не поддерживают Eclipse 3.4 (Ganymede). Я с нетерпением жду, чтобы попробовать это, когда они решат это. - person Bill Karwin; 04.11.2008
comment
Удалось ли вам заставить PyUML работать с 3.4? - person anijhaw; 04.02.2011
comment
Последние коммиты этого проекта датируются 2009 годом. Он не отображается в Marketplace, и Eclipse не может установить его из архива .zip. - person Luís de Sousa; 20.07.2016

Стоит упомянуть Gaphor. Инструмент моделирования/UML Python.

person Ali Afshar    schedule 04.11.2008

Амбрелло тоже так делает. в меню перейдите в «Код» -> «Импортировать проект», а затем укажите корневой каталог вашего проекта. тогда он переворачивает код для тебя...

person Hosane    schedule 07.07.2011
comment
знаете ли вы способ заставить Umbrello генерировать полную диаграмму классов (и отношения между ними, а не только классы сами по себе - не помню, как эта диаграмма называется) - person vlad-ardelean; 25.06.2013
comment
Аааа, вам нужно импортировать файлы, а затем, когда вы перетаскиваете классы в область рисования, соединения добавляются автоматически. - person Hosane; 29.06.2013

vipera — это небольшой дизайнер приложений, в который включен uml. Вы можете увидеть это в:

гадюка

С наилучшими пожеланиями.

person Ángel Luis    schedule 09.12.2011

SPE IDE имеет встроенный генератор UML. Просто откройте файлы в SPE и щелкните вкладку UML.

Я не знаю, насколько он подходит для ваших нужд, но для его использования не требуется никаких дополнительных загрузок или настроек.

person crystalattice    schedule 04.11.2008
comment
к сожалению, он перестал развиваться, но все еще работает здесь! (2013) - person Abdelouahab; 05.06.2013

Enterprise Architect от Sparx выполняет циклический обход исходного кода Python. У них есть бесплатная ограниченная по времени пробная версия.

person chimp    schedule 04.11.2008