{"id":16480585,"url":"https://github.com/fabricesalvaire/pydvi","last_synced_at":"2025-03-21T07:30:28.821Z","repository":{"id":8280181,"uuid":"9799036","full_name":"FabriceSalvaire/PyDVI","owner":"FabriceSalvaire","description":"PyDvi is a Python library to read and process DVI (DeVice Independent) files, the native output of LaTeX. The library provides a DVI machine as a base class which can be extended by the user and plugged to a TeX daemon in order to render contents on-the-fly. Also the source code provides a DVI viewer featuring an hardware accelerated rendering on GPU.","archived":false,"fork":false,"pushed_at":"2014-09-22T19:23:09.000Z","size":4464,"stargazers_count":15,"open_issues_count":13,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-17T22:23:53.474Z","etag":null,"topics":["dvi","latex","python","python-library","tex"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FabriceSalvaire.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-05-01T20:02:24.000Z","updated_at":"2024-08-19T12:38:27.000Z","dependencies_parsed_at":"2022-08-07T01:01:01.249Z","dependency_job_id":null,"html_url":"https://github.com/FabriceSalvaire/PyDVI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabriceSalvaire%2FPyDVI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabriceSalvaire%2FPyDVI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabriceSalvaire%2FPyDVI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabriceSalvaire%2FPyDVI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FabriceSalvaire","download_url":"https://codeload.github.com/FabriceSalvaire/PyDVI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244757074,"owners_count":20505323,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dvi","latex","python","python-library","tex"],"created_at":"2024-10-11T13:04:41.661Z","updated_at":"2025-03-21T07:30:28.383Z","avatar_url":"https://github.com/FabriceSalvaire.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /\u003e\n\u003cmeta name=\"generator\" content=\"Docutils 0.11: http://docutils.sourceforge.net/\" /\u003e\n\u003ctitle\u003e\u003c/title\u003e\n\u003cstyle type=\"text/css\"\u003e\n\n/*\n:Author: David Goodger (goodger@python.org)\n:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $\n:Copyright: This stylesheet has been placed in the public domain.\n\nDefault cascading style sheet for the HTML output of Docutils.\n\nSee http://docutils.sf.net/docs/howto/html-stylesheets.html for how to\ncustomize this style sheet.\n*/\n\n/* used to remove borders from tables and images */\n.borderless, table.borderless td, table.borderless th {\n  border: 0 }\n\ntable.borderless td, table.borderless th {\n  /* Override padding for \"table.docutils td\" with \"! important\".\n     The right padding separates the table cells. */\n  padding: 0 0.5em 0 0 ! important }\n\n.first {\n  /* Override more specific margin styles with \"! important\". */\n  margin-top: 0 ! important }\n\n.last, .with-subtitle {\n  margin-bottom: 0 ! important }\n\n.hidden {\n  display: none }\n\na.toc-backref {\n  text-decoration: none ;\n  color: black }\n\nblockquote.epigraph {\n  margin: 2em 5em ; }\n\ndl.docutils dd {\n  margin-bottom: 0.5em }\n\nobject[type=\"image/svg+xml\"], object[type=\"application/x-shockwave-flash\"] {\n  overflow: hidden;\n}\n\n/* Uncomment (and remove this text!) to get bold-faced definition list terms\ndl.docutils dt {\n  font-weight: bold }\n*/\n\ndiv.abstract {\n  margin: 2em 5em }\n\ndiv.abstract p.topic-title {\n  font-weight: bold ;\n  text-align: center }\n\ndiv.admonition, div.attention, div.caution, div.danger, div.error,\ndiv.hint, div.important, div.note, div.tip, div.warning {\n  margin: 2em ;\n  border: medium outset ;\n  padding: 1em }\n\ndiv.admonition p.admonition-title, div.hint p.admonition-title,\ndiv.important p.admonition-title, div.note p.admonition-title,\ndiv.tip p.admonition-title {\n  font-weight: bold ;\n  font-family: sans-serif }\n\ndiv.attention p.admonition-title, div.caution p.admonition-title,\ndiv.danger p.admonition-title, div.error p.admonition-title,\ndiv.warning p.admonition-title, .code .error {\n  color: red ;\n  font-weight: bold ;\n  font-family: sans-serif }\n\n/* Uncomment (and remove this text!) to get reduced vertical space in\n   compound paragraphs.\ndiv.compound .compound-first, div.compound .compound-middle {\n  margin-bottom: 0.5em }\n\ndiv.compound .compound-last, div.compound .compound-middle {\n  margin-top: 0.5em }\n*/\n\ndiv.dedication {\n  margin: 2em 5em ;\n  text-align: center ;\n  font-style: italic }\n\ndiv.dedication p.topic-title {\n  font-weight: bold ;\n  font-style: normal }\n\ndiv.figure {\n  margin-left: 2em ;\n  margin-right: 2em }\n\ndiv.footer, div.header {\n  clear: both;\n  font-size: smaller }\n\ndiv.line-block {\n  display: block ;\n  margin-top: 1em ;\n  margin-bottom: 1em }\n\ndiv.line-block div.line-block {\n  margin-top: 0 ;\n  margin-bottom: 0 ;\n  margin-left: 1.5em }\n\ndiv.sidebar {\n  margin: 0 0 0.5em 1em ;\n  border: medium outset ;\n  padding: 1em ;\n  background-color: #ffffee ;\n  width: 40% ;\n  float: right ;\n  clear: right }\n\ndiv.sidebar p.rubric {\n  font-family: sans-serif ;\n  font-size: medium }\n\ndiv.system-messages {\n  margin: 5em }\n\ndiv.system-messages h1 {\n  color: red }\n\ndiv.system-message {\n  border: medium outset ;\n  padding: 1em }\n\ndiv.system-message p.system-message-title {\n  color: red ;\n  font-weight: bold }\n\ndiv.topic {\n  margin: 2em }\n\nh1.section-subtitle, h2.section-subtitle, h3.section-subtitle,\nh4.section-subtitle, h5.section-subtitle, h6.section-subtitle {\n  margin-top: 0.4em }\n\nh1.title {\n  text-align: center }\n\nh2.subtitle {\n  text-align: center }\n\nhr.docutils {\n  width: 75% }\n\nimg.align-left, .figure.align-left, object.align-left {\n  clear: left ;\n  float: left ;\n  margin-right: 1em }\n\nimg.align-right, .figure.align-right, object.align-right {\n  clear: right ;\n  float: right ;\n  margin-left: 1em }\n\nimg.align-center, .figure.align-center, object.align-center {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.align-left {\n  text-align: left }\n\n.align-center {\n  clear: both ;\n  text-align: center }\n\n.align-right {\n  text-align: right }\n\n/* reset inner alignment in figures */\ndiv.align-right {\n  text-align: inherit }\n\n/* div.align-center * { */\n/*   text-align: left } */\n\nol.simple, ul.simple {\n  margin-bottom: 1em }\n\nol.arabic {\n  list-style: decimal }\n\nol.loweralpha {\n  list-style: lower-alpha }\n\nol.upperalpha {\n  list-style: upper-alpha }\n\nol.lowerroman {\n  list-style: lower-roman }\n\nol.upperroman {\n  list-style: upper-roman }\n\np.attribution {\n  text-align: right ;\n  margin-left: 50% }\n\np.caption {\n  font-style: italic }\n\np.credits {\n  font-style: italic ;\n  font-size: smaller }\n\np.label {\n  white-space: nowrap }\n\np.rubric {\n  font-weight: bold ;\n  font-size: larger ;\n  color: maroon ;\n  text-align: center }\n\np.sidebar-title {\n  font-family: sans-serif ;\n  font-weight: bold ;\n  font-size: larger }\n\np.sidebar-subtitle {\n  font-family: sans-serif ;\n  font-weight: bold }\n\np.topic-title {\n  font-weight: bold }\n\npre.address {\n  margin-bottom: 0 ;\n  margin-top: 0 ;\n  font: inherit }\n\npre.literal-block, pre.doctest-block, pre.math, pre.code {\n  margin-left: 2em ;\n  margin-right: 2em }\n\npre.code .ln { color: grey; } /* line numbers */\npre.code, code { background-color: #eeeeee }\npre.code .comment, code .comment { color: #5C6576 }\npre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }\npre.code .literal.string, code .literal.string { color: #0C5404 }\npre.code .name.builtin, code .name.builtin { color: #352B84 }\npre.code .deleted, code .deleted { background-color: #DEB0A1}\npre.code .inserted, code .inserted { background-color: #A3D289}\n\nspan.classifier {\n  font-family: sans-serif ;\n  font-style: oblique }\n\nspan.classifier-delimiter {\n  font-family: sans-serif ;\n  font-weight: bold }\n\nspan.interpreted {\n  font-family: sans-serif }\n\nspan.option {\n  white-space: nowrap }\n\nspan.pre {\n  white-space: pre }\n\nspan.problematic {\n  color: red }\n\nspan.section-subtitle {\n  /* font-size relative to parent (h1..h6 element) */\n  font-size: 80% }\n\ntable.citation {\n  border-left: solid 1px gray;\n  margin-left: 1px }\n\ntable.docinfo {\n  margin: 2em 4em }\n\ntable.docutils {\n  margin-top: 0.5em ;\n  margin-bottom: 0.5em }\n\ntable.footnote {\n  border-left: solid 1px black;\n  margin-left: 1px }\n\ntable.docutils td, table.docutils th,\ntable.docinfo td, table.docinfo th {\n  padding-left: 0.5em ;\n  padding-right: 0.5em ;\n  vertical-align: top }\n\ntable.docutils th.field-name, table.docinfo th.docinfo-name {\n  font-weight: bold ;\n  text-align: left ;\n  white-space: nowrap ;\n  padding-left: 0 }\n\n/* \"booktabs\" style (no vertical lines) */\ntable.docutils.booktabs {\n  border: 0px;\n  border-top: 2px solid;\n  border-bottom: 2px solid;\n  border-collapse: collapse;\n}\ntable.docutils.booktabs * {\n  border: 0px;\n}\ntable.docutils.booktabs th {\n  border-bottom: thin solid;\n  text-align: left;\n}\n\nh1 tt.docutils, h2 tt.docutils, h3 tt.docutils,\nh4 tt.docutils, h5 tt.docutils, h6 tt.docutils {\n  font-size: 100% }\n\nul.auto-toc {\n  list-style-type: none }\n\n\u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv class=\"document\"\u003e\n\n\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c!-- |PyDviUrl|\n|PyDviHomePage|_\n|PyDviDoc|_\n|PyDvi@github|_\n|PyDvi@readthedocs|_\n|PyDvi@readthedocs-badge|\n|PyDvi@pypi|_ --\u003e\n\u003c!-- .. _PyDvi@github: https://github.com/FabriceSalvaire/PyDVI --\u003e\n\u003c!-- .. _PyDvi@readthedocs: http://pydvi.readthedocs.org --\u003e\n\u003c!-- .. _PyDvi@pypi: https://pypi.python.org/pypi/PyDVI --\u003e\n\u003c!-- End --\u003e\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c!-- an extended version of pdfTeX using Lua as an embedded scripting language --\u003e\n\u003c!-- A DVI-to-PNG converter --\u003e\n\u003c!-- End --\u003e\n\u003cdiv class=\"section\" id=\"pydvi\"\u003e\n\u003ch1\u003ePyDvi\u003c/h1\u003e\n\u003cp\u003eThe official PyDvi Home Page is located at \u003ca class=\"reference external\" href=\"http://fabricesalvaire.github.io/PyDVI\"\u003ehttp://fabricesalvaire.github.io/PyDVI\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe latest documentation build from the git repository is available at readthedocs.org \u003ca class=\"reference external\" href=\"http://pydvi.readthedocs.org/en/latest\"\u003e\u003cimg alt=\"PyDvi\u0026#64;readthedocs-badge\" src=\"https://readthedocs.org/projects/pydvi/badge/?version=latest\" /\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWritten by \u003ca class=\"reference external\" href=\"http://fabrice-salvaire.pagesperso-orange.fr\"\u003eFabrice Salvaire\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca class=\"reference external\" href=\"https://travis-ci.org/FabriceSalvaire/PyDVI\"\u003e\u003cimg alt=\"PyDvi build status \u0026#64;travis-ci.org\" src=\"https://travis-ci.org/FabriceSalvaire/PyDVI.svg?branch=master\" /\u003e\u003c/a\u003e\u003c/p\u003e\n\u003chr class=\"docutils\" /\u003e\n\u003cimg alt=\"https://raw.github.com/FabriceSalvaire/PyDvi/master/doc/sphinx/source/images/dvi-gl-viewer.scaled.png\" src=\"https://raw.github.com/FabriceSalvaire/PyDvi/master/doc/sphinx/source/images/dvi-gl-viewer.scaled.png\" /\u003e\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"introduction\"\u003e\n\u003ch1\u003eIntroduction\u003c/h1\u003e\n\u003c!-- link to TUG --\u003e\n\u003c!-- library versus module --\u003e\n\u003cp\u003ePyDvi is a \u003ca class=\"reference external\" href=\"http://python.org\"\u003ePython\u003c/a\u003e library to read and process DVI (DeVice Independent) files, the native output\nof the famous TeX typesetting program implemented by \u003ca class=\"reference external\" href=\"http://www-cs-faculty.stanford.edu/~uno\"\u003eDonald E. Knuth\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePyDvi is also able to read most of the file formats associated to the TeX world like packed font,\nvirtual font, TeX font metric, font map and font encoding. It can also read Adobe Font Metrics files.\u003c/p\u003e\n\u003cp\u003eBasically a DVI file describes the layout of a page by a list of opcodes that interact with a\nregister machine to update the position on the page, to load fonts and to paint glyphs and rules. In\nshort it contains the glyphs and their positions on the page. Since TeX was designed to layout the\nseries of books \u003cem\u003eThe Art of Computer Programming\u003c/em\u003e at the beginning of the eighties, it focuses on\ntexts and mathematical expressions. Thus DVI is much simpler than Postscript or its successor PDF\nwhich are designed for graphics. However we can extend the capabilities of DVI using the \u003cem\u003especial\u003c/em\u003e\nopcode which can contain any text like Postscript snippets.\u003c/p\u003e\n\u003cp\u003eA DVI stream can come from a file or a TeX daemon in order to render TeX inputs on-the-fly.\u003c/p\u003e\n\u003cp\u003eThe DVI parser of PyDvi builds a program from a DVI stream that could be later processed by the\nprovided DVI machine which is designed to be subclassed by the user.\u003c/p\u003e\n\u003cp\u003eThe source code includes an experimental DVI viewer as exemple which uses the OpenGL API for the\nrendering and thus feature an hardware accelerated rendering. PyDvi and the viewer can be used as a\nplatform to experiment complex text rendering on GPU.\u003c/p\u003e\n\u003cp\u003eThe source code includes also a clone of the dvipng tool to render DVI to PNG image. This tool is\nmainly intended to check the compliance of PyDvi by image comparison.\u003c/p\u003e\n\u003c!-- The aim of PyDvi is multiple --\u003e\n\u003cp\u003ePyDvi can be used for several purpose, we will review them in the followings:\u003c/p\u003e\n\u003cp\u003eTeX is a major and historical typesetting program. PyDvi can serve to read and process its output\nusing Python. The user can be a curious pearson who want to lean TeX or somebody interested by TeX\npostprocessing.\u003c/p\u003e\n\u003cp\u003eTeX is one of the oldest computer program still in activity. The reason is quite simple, these\nalgorithms do the right job, its ecosystem is rich and its code is not so simple. Thus nobody\nsucceeds to reimplement it up to now, excepted its mathematical layout algorithms by the \u003ca class=\"reference external\" href=\"http://www.mathjax.org\"\u003eMathJax\u003c/a\u003e\nJavascript library which is intended to bring Mathematical layout to web browser. Before the\ndelivery of Mathjax, the only solution to render properly mathematical content was to generate an\nimage using a program like \u003ca class=\"reference external\" href=\"http://savannah.nongnu.org/projects/dvipng\"\u003edvipng\u003c/a\u003e. It is what does the engine of Wikipedia behind the scene.\nUsually these programs like \u003ca class=\"reference external\" href=\"http://asymptote.sourceforge.net\"\u003eAsymptote\u003c/a\u003e or \u003ca class=\"reference external\" href=\"https://ece.uwaterloo.ca/~aplevich/Circuit_macros\"\u003eCircuit_macros\u003c/a\u003e generate the graphics as a PDF\ndocument and then include this document in a LaTeX document which contains the labels placed at\nabsolute positions in the page. With PyDvi we can try another approach which consists to send TeX\ncontent to a daemon and get back the glyphs and their positions. \u003ca class=\"reference external\" href=\"http://matplotlib.org\"\u003eMatplotlib\u003c/a\u003e uses this approach to\nrender LaTeX labels.\u003c/p\u003e\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c!-- End --\u003e\n\u003c!-- End --\u003e\n\u003c!-- -*- Mode: rst -*- --\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"installation\"\u003e\n\u003cspan id=\"installation-page\"\u003e\u003c/span\u003e\u003ch1\u003eInstallation\u003c/h1\u003e\n\u003cp\u003eThe installation of PyDvi by itself is quite simple. However it will be easier to get the\ndependencies on a Linux desktop.\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"dependencies\"\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cp\u003ePyDvi requires the following dependencies:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://python.org\"\u003ePython\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://www.numpy.org\"\u003eNumpy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"https://github.com/rougier/freetype-py\"\u003efreetype-py\u003c/a\u003e for Type1 font rendering\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe OpenGL DVI viewer requires these additional dependencies:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://www.riverbankcomputing.co.uk/software/pyqt/intro\"\u003epyqt\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"https://github.com/FabriceSalvaire/PyOpenGLng\"\u003ePyOpenGLng\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe DVI to PNG tool requires these additional dependencies:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://pillow.readthedocs.org/en/latest/index.html\"\u003epillow\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAlso it is recommanded to have these Python modules:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003epip\u003c/li\u003e\n\u003cli\u003evirtualenv\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eFor development, you will need in addition:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://sphinx-doc.org\"\u003eSphinx\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"installation-from-pypi-repository\"\u003e\n\u003ch2\u003eInstallation from PyPi Repository\u003c/h2\u003e\n\u003cp\u003ePyDvi is made available on the \u003ca class=\"reference external\" href=\"https://pypi.python.org/pypi\"\u003ePyPI\u003c/a\u003e repository at \u003ca class=\"reference external\" href=\"https://pypi.python.org/pypi/PyDVI\"\u003ehttps://pypi.python.org/pypi/PyDVI\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eRun this command to install the last release:\u003c/p\u003e\n\u003cpre class=\"code sh literal-block\"\u003e\npip install PyDvi\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"installation-from-source\"\u003e\n\u003ch2\u003eInstallation from Source\u003c/h2\u003e\n\u003cp\u003eThe PyDvi source code is hosted at \u003ca class=\"reference external\" href=\"https://github.com/FabriceSalvaire/PyDVI\"\u003ehttps://github.com/FabriceSalvaire/PyDVI\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTo clone the Git repository, run this command in a terminal:\u003c/p\u003e\n\u003cpre class=\"code sh literal-block\"\u003e\ngit clone git\u0026#64;github.com:FabriceSalvaire/PyDvi.git\n\u003c/pre\u003e\n\u003cp\u003eThen to build and install PyDvi run these commands:\u003c/p\u003e\n\u003cpre class=\"code sh literal-block\"\u003e\npython setup.py build\npython setup.py install\n\u003c/pre\u003e\n\u003c!-- End --\u003e\n\u003c!-- End --\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabricesalvaire%2Fpydvi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabricesalvaire%2Fpydvi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabricesalvaire%2Fpydvi/lists"}