chore: 添加虚拟环境到仓库

- 添加 backend_service/venv 虚拟环境
- 包含所有Python依赖包
- 注意:虚拟环境约393MB,包含12655个文件
This commit is contained in:
2025-12-03 10:19:25 +08:00
parent a6c2027caa
commit c4f851d387
12655 changed files with 3009376 additions and 0 deletions

View File

@@ -0,0 +1,266 @@
Metadata-Version: 2.4
Name: graphviz
Version: 0.21
Summary: Simple Python interface for Graphviz
Author-email: Sebastian Bank <sebastian.bank@uni-leipzig.de>
License-Expression: MIT
Project-URL: Homepage, https://github.com/xflr6/graphviz
Project-URL: Documentation, https://graphviz.readthedocs.io
Project-URL: Changelog, https://graphviz.readthedocs.io/en/latest/changelog.html
Project-URL: Issue Tracker, https://github.com/xflr6/graphviz/issues
Project-URL: CI, https://github.com/xflr6/graphviz/actions
Project-URL: Coverage, https://codecov.io/gh/xflr6/graphviz
Keywords: graph,visualization,dot,render
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: Flake8-pyproject; extra == "dev"
Requires-Dist: pep8-naming; extra == "dev"
Requires-Dist: tox>=3; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest<8.1,>=7; extra == "test"
Requires-Dist: pytest-mock>=3; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: coverage; extra == "test"
Provides-Extra: docs
Requires-Dist: sphinx<7,>=5; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
Requires-Dist: sphinx-rtd-theme>=0.2.5; extra == "docs"
Dynamic: license-file
Graphviz
========
|PyPI version| |License| |Supported Python| |Downloads|
|Build| |Codecov| |Readthedocs-stable| |Readthedocs-latest|
|Binder-stable|
This package facilitates the creation and rendering of graph descriptions in
the DOT_ language of the Graphviz_ graph drawing software (`upstream repo`_)
from Python.
Create a graph object, assemble the graph by adding nodes and edges, and
retrieve its DOT source code string. Save the source code to a file and render
it with the Graphviz installation of your system.
Use the ``view`` option/method to directly inspect the resulting (PDF, PNG,
SVG, etc.) file with its default application. Graphs can also be rendered
and displayed within `Jupyter notebooks`_ (formerly known as
`IPython notebooks`_,
`example <notebook_>`_, `nbviewer <notebook-nbviewer_>`_)
as well as the `Jupyter QtConsole`_.
Links
-----
- GitHub: https://github.com/xflr6/graphviz
- PyPI: https://pypi.org/project/graphviz/
- Documentation: https://graphviz.readthedocs.io
- Changelog: https://graphviz.readthedocs.io/en/latest/changelog.html
- Issue Tracker: https://github.com/xflr6/graphviz/issues
- Download: https://pypi.org/project/graphviz/#files
- Development documentation: https://graphviz.readthedocs.io/en/latest/development.html
- Release process: https://graphviz.readthedocs.io/en/latest/release_process.html
Installation
------------
This package runs under Python 3.9+, use pip_ to install:
.. code:: bash
$ pip install graphviz
To render the generated DOT source code, you also need to install Graphviz_
(`download page <upstream-download_>`_,
`archived versions <upstream-archived_>`_,
`installation procedure for Windows <upstream-windows_>`_).
Make sure that the directory containing the ``dot`` executable is on your
systems' ``PATH``
(sometimes done by the installer;
setting ``PATH``
on `Linux <set-path-linux_>`_,
`Mac <set-path-darwin_>`_,
and `Windows <set-path-windows_>`_).
Anaconda_: see the conda-forge_ package
`conda-forge/python-graphviz <conda-forge-python-graphviz_>`_
(`feedstock <conda-forge-python-graphviz-feedstock_>`_),
which should automatically ``conda install``
`conda-forge/graphviz <conda-forge-graphviz_>`_
(`feedstock <conda-forge-graphviz-feedstock_>`_) as dependency.
Quickstart
----------
Create a graph object:
.. code:: python
>>> import graphviz # doctest: +NO_EXE
>>> dot = graphviz.Digraph(comment='The Round Table')
>>> dot #doctest: +ELLIPSIS
<graphviz.graphs.Digraph object at 0x...>
Add nodes and edges:
.. code:: python
>>> dot.node('A', 'King Arthur') # doctest: +NO_EXE
>>> dot.node('B', 'Sir Bedevere the Wise')
>>> dot.node('L', 'Sir Lancelot the Brave')
>>> dot.edges(['AB', 'AL'])
>>> dot.edge('B', 'L', constraint='false')
Check the generated source code:
.. code:: python
>>> print(dot.source) # doctest: +NORMALIZE_WHITESPACE +NO_EXE
// The Round Table
digraph {
A [label="King Arthur"]
B [label="Sir Bedevere the Wise"]
L [label="Sir Lancelot the Brave"]
A -> B
A -> L
B -> L [constraint=false]
}
Save and render the source code (skip/ignore any ``doctest_mark_exe()`` lines):
.. code:: python
>>> doctest_mark_exe() # skip this line
>>> dot.render('doctest-output/round-table.gv').replace('\\', '/')
'doctest-output/round-table.gv.pdf'
Save and render and view the result:
.. code:: python
>>> doctest_mark_exe() # skip this line
>>> dot.render('doctest-output/round-table.gv', view=True) # doctest: +SKIP
'doctest-output/round-table.gv.pdf'
.. image:: https://raw.github.com/xflr6/graphviz/master/docs/_static/round-table.svg
:align: center
:alt: round-table.svg
**Caveat:**
Backslash-escapes and strings of the form ``<...>``
have a special meaning in the DOT language.
If you need to render arbitrary strings (e.g. from user input),
check the details in the `user guide`_.
See also
--------
- pygraphviz_ |--| full-blown interface wrapping the Graphviz C library with SWIG
- graphviz-python_ |--| official Python bindings
(`documentation <graphviz-python-docs_>`_)
- pydot_ |--| stable pure-Python approach, requires pyparsing
License
-------
This package is distributed under the `MIT license`_.
.. _Graphviz: https://www.graphviz.org
.. _DOT: https://www.graphviz.org/doc/info/lang.html
.. _upstream repo: https://gitlab.com/graphviz/graphviz/
.. _upstream-download: https://www.graphviz.org/download/
.. _upstream-archived: https://www2.graphviz.org/Archive/stable/
.. _upstream-windows: https://forum.graphviz.org/t/new-simplified-installation-procedure-on-windows/224
.. _set-path-windows: https://www.computerhope.com/issues/ch000549.htm
.. _set-path-linux: https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux-unix
.. _set-path-darwin: https://stackoverflow.com/questions/22465332/setting-path-environment-variable-in-osx-permanently
.. _pip: https://pip.pypa.io
.. _Jupyter notebooks: https://jupyter.org
.. _IPython notebooks: https://ipython.org/notebook.html
.. _Jupyter QtConsole: https://qtconsole.readthedocs.io
.. _notebook: https://github.com/xflr6/graphviz/blob/master/examples/graphviz-notebook.ipynb
.. _notebook-nbviewer: https://nbviewer.org/github/xflr6/graphviz/blob/master/examples/graphviz-notebook.ipynb
.. _Anaconda: https://docs.anaconda.com/anaconda/install/
.. _conda-forge: https://conda-forge.org
.. _conda-forge-python-graphviz: https://anaconda.org/conda-forge/python-graphviz
.. _conda-forge-python-graphviz-feedstock: https://github.com/conda-forge/python-graphviz-feedstock
.. _conda-forge-graphviz: https://anaconda.org/conda-forge/graphviz
.. _conda-forge-graphviz-feedstock: https://github.com/conda-forge/graphviz-feedstock
.. _user guide: https://graphviz.readthedocs.io/en/stable/manual.html
.. _pygraphviz: https://pypi.org/project/pygraphviz/
.. _graphviz-python: https://pypi.org/project/graphviz-python/
.. _graphviz-python-docs: https://www.graphviz.org/pdf/gv.3python.pdf
.. _pydot: https://pypi.org/project/pydot/
.. _MIT license: https://opensource.org/licenses/MIT
.. |--| unicode:: U+2013
.. |PyPI version| image:: https://img.shields.io/pypi/v/graphviz.svg
:target: https://pypi.org/project/graphviz/
:alt: Latest PyPI Version
.. |License| image:: https://img.shields.io/pypi/l/graphviz.svg
:target: https://github.com/xflr6/graphviz/blob/master/LICENSE.txt
:alt: License
.. |Supported Python| image:: https://img.shields.io/pypi/pyversions/graphviz.svg
:target: https://pypi.org/project/graphviz/
:alt: Supported Python Versions
.. |Downloads| image:: https://img.shields.io/pypi/dm/graphviz.svg
:target: https://pypistats.org/packages/graphviz
:alt: Monthly downloads
.. |Build| image:: https://github.com/xflr6/graphviz/actions/workflows/build.yaml/badge.svg?branch=master
:target: https://github.com/xflr6/graphviz/actions/workflows/build.yaml?query=branch%3Amaster
:alt: Build
.. |Codecov| image:: https://codecov.io/gh/xflr6/graphviz/branch/master/graph/badge.svg
:target: https://codecov.io/gh/xflr6/graphviz
:alt: Codecov
.. |Readthedocs-stable| image:: https://readthedocs.org/projects/graphviz/badge/?version=stable
:target: https://graphviz.readthedocs.io/en/stable/
:alt: Readthedocs (stable)
.. |Readthedocs-latest| image:: https://readthedocs.org/projects/graphviz/badge/?version=latest
:target: https://graphviz.readthedocs.io/en/latest/
:alt: Readthedocs (latest)
.. |Binder-stable| image:: https://img.shields.io/badge/launch-binder%20(stable)-579ACA.svg?logo=data:image/png;base64,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
:target: https://mybinder.org/v2/gh/xflr6/graphviz/stable
:alt: Binder (stable)

View File

@@ -0,0 +1,73 @@
graphviz-0.21.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
graphviz-0.21.dist-info/METADATA,sha256=-EyTZkm10_Z-WRTdijfvjRqmgtRvC40QfNdIbThqb1Y,12306
graphviz-0.21.dist-info/RECORD,,
graphviz-0.21.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
graphviz-0.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
graphviz-0.21.dist-info/licenses/LICENSE.txt,sha256=DPe4CYZjPrbu9mFhfCo266VuxnmyGT0odncGrqwz7W0,1107
graphviz-0.21.dist-info/top_level.txt,sha256=Ee90R0icUEXS0AvIJbqVuNvagnakuhP5Wips0LDkQuw,9
graphviz/__init__.py,sha256=u7Dz6-a1UhQRhnQIoCOG8UGWEWBpV8l7r7kGNwHbhV8,3502
graphviz/__pycache__/__init__.cpython-313.pyc,,
graphviz/__pycache__/_compat.cpython-313.pyc,,
graphviz/__pycache__/_defaults.cpython-313.pyc,,
graphviz/__pycache__/_tools.cpython-313.pyc,,
graphviz/__pycache__/base.cpython-313.pyc,,
graphviz/__pycache__/copying.cpython-313.pyc,,
graphviz/__pycache__/dot.cpython-313.pyc,,
graphviz/__pycache__/encoding.cpython-313.pyc,,
graphviz/__pycache__/exceptions.cpython-313.pyc,,
graphviz/__pycache__/graphs.cpython-313.pyc,,
graphviz/__pycache__/jupyter_integration.cpython-313.pyc,,
graphviz/__pycache__/piping.cpython-313.pyc,,
graphviz/__pycache__/quoting.cpython-313.pyc,,
graphviz/__pycache__/rendering.cpython-313.pyc,,
graphviz/__pycache__/saving.cpython-313.pyc,,
graphviz/__pycache__/sources.cpython-313.pyc,,
graphviz/__pycache__/unflattening.cpython-313.pyc,,
graphviz/_compat.py,sha256=zYSJbbAIXu7Erloclogllx0m1AmQJg2fsf6nziqRrjQ,793
graphviz/_defaults.py,sha256=B1YQTDzyep8Aw_xNfeW69XnWfHuMfAmngs7n9KcltBM,2255
graphviz/_tools.py,sha256=Ex4Ps3ohuQ16pdS3pITlvn-brX6ETIblveWbX3yn5dw,6641
graphviz/backend/__init__.py,sha256=i9582Ayyo46FN-7qMG4gaC9_wXJa8lpB27cbf1UMdZE,778
graphviz/backend/__pycache__/__init__.cpython-313.pyc,,
graphviz/backend/__pycache__/dot_command.cpython-313.pyc,,
graphviz/backend/__pycache__/execute.cpython-313.pyc,,
graphviz/backend/__pycache__/mixins.cpython-313.pyc,,
graphviz/backend/__pycache__/piping.cpython-313.pyc,,
graphviz/backend/__pycache__/rendering.cpython-313.pyc,,
graphviz/backend/__pycache__/unflattening.cpython-313.pyc,,
graphviz/backend/__pycache__/upstream_version.cpython-313.pyc,,
graphviz/backend/__pycache__/viewing.cpython-313.pyc,,
graphviz/backend/dot_command.py,sha256=xCcGNEmA48fyMcLEbbyq-CSo14j4H2_vZ7RayWon4zU,1473
graphviz/backend/execute.py,sha256=aOpkVJGZbWdu8RDPylGc-j5Umv4OVPJyRH15cGgzke0,4458
graphviz/backend/mixins.py,sha256=87fGYqR40hFQCp7c-1lZa-Ab-OzLFVR6W9XpjFNObjA,2319
graphviz/backend/piping.py,sha256=-1LfE4wLQuZE25uMiCwP11YCy3C5eIrw8pGKUs93sVY,8982
graphviz/backend/rendering.py,sha256=sH5tqRziduMNI7xawhoiSHCaR8u5SndYN1t1ZgsWCbA,13409
graphviz/backend/unflattening.py,sha256=hpPSkK3lbsZYBXCX80kcAiBxIfN-3QoWT5w5eQBcXYQ,2140
graphviz/backend/upstream_version.py,sha256=_f9_LslTbyOj6qdHcZMeJ-7h5YvYABXHVzUIhfvgUzg,2015
graphviz/backend/viewing.py,sha256=tit9D2IsRMdRd0zsh3UMn-1lbRK_G1-jEnlBoFlrZvE,2255
graphviz/base.py,sha256=8ec9cCmF5qlFcOL8PLiB-XYSx8uyDlL3L_Sl_pXi_hQ,965
graphviz/copying.py,sha256=TVz3GUC4-z_T0bEUFUNwzUDKWBnlcjpkbr3Gp4xlLmU,565
graphviz/dot.py,sha256=-1iNyWK0VWl3zGptjrcvT37J41ZEDiIrDKlTMP730jg,13365
graphviz/encoding.py,sha256=LVp7W5rAI-8bgaX_QRci7NfoUJ5PXNKXJbuPLIasQfo,1107
graphviz/exceptions.py,sha256=XinkoZh9NDTwVYT4-2qp-p6ZKlmVkYChokbM-WLkH3g,1073
graphviz/graphs.py,sha256=3V0JDfnS8Xqa3KqA2HEnhDg76j9C0aQPaumB35DeZEQ,4444
graphviz/jupyter_integration.py,sha256=5aTzWnWNF-C40cq2ohkJ84f-putNyDCkZ6D8aGvsqsM,4451
graphviz/parameters/__init__.py,sha256=xQE5N2FDaTML0MmZP1J8ETD4wDMSTicgwflL05Q4YIM,482
graphviz/parameters/__pycache__/__init__.cpython-313.pyc,,
graphviz/parameters/__pycache__/base.cpython-313.pyc,,
graphviz/parameters/__pycache__/engines.cpython-313.pyc,,
graphviz/parameters/__pycache__/formats.cpython-313.pyc,,
graphviz/parameters/__pycache__/formatters.cpython-313.pyc,,
graphviz/parameters/__pycache__/mixins.cpython-313.pyc,,
graphviz/parameters/__pycache__/renderers.cpython-313.pyc,,
graphviz/parameters/base.py,sha256=K-t4_oYberxA8ps2KM2Ccrofkl_AsFP26T1R-VBBGjY,465
graphviz/parameters/engines.py,sha256=rciuGFFO7SjIw9YkYzerhH-j5znF0sdLg0SXWHCf8cM,1716
graphviz/parameters/formats.py,sha256=hDp9zy_dWB9MxExnXsA6-9EbWH3zOmNGWQDQQ_uAplQ,2479
graphviz/parameters/formatters.py,sha256=BYhS7xPOOyaPD7fP9ZenfbfjC3zTN15M-H6hqTvfxFs,1867
graphviz/parameters/mixins.py,sha256=BDv50E7rsIqxwj01qSA6GJZyCObu6miCh0w69q3q-ao,1446
graphviz/parameters/renderers.py,sha256=7m8pHTXNp_6ZVwmgOJzqqCiOrg1GHs29nluaC9sEA0U,2001
graphviz/piping.py,sha256=f99ovFJs_JRsxQdnQPghd19nSMQuaR5MPAK2CQp_ghE,7156
graphviz/quoting.py,sha256=7dd1aMLNP62cuC2vVpaHMb648UII3bP93lvDUcq2cFs,6564
graphviz/rendering.py,sha256=g6qxhU9PE4QuL0ctURg56czDNzl4NkkLtWkhBoiLr5k,8236
graphviz/saving.py,sha256=KocaUB8IGvuHs4z3VSTGcOV0olboRORQdhWFAL7UpUw,2757
graphviz/sources.py,sha256=ZQe7KDf_lEeuFDEJdW18wDVRPXMncrhqXTrYbaUpDS0,6237
graphviz/unflattening.py,sha256=24KKXvAjkkNnxKH3eWjUtddooHHWaKUZZ1k33OKGAcQ,2517

View File

@@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (80.9.0)
Root-Is-Purelib: true
Tag: py3-none-any

View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2013-2025 Sebastian Bank
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.