Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
holoviz
GitHub Repository: holoviz/panel
Path: blob/main/pyproject.toml
3245 views
1
[build-system]
2
requires = [
3
"hatchling",
4
"hatch-vcs",
5
"param >=2.1.0",
6
"bokeh >=3.7.0,<3.9.0",
7
"pyviz_comms >=0.7.4",
8
"requests",
9
"packaging",
10
]
11
build-backend = "hatchling.build"
12
13
[project]
14
name = "panel"
15
dynamic = ["version"]
16
description = 'The powerful data exploration & web app framework for Python.'
17
readme = "README.md"
18
license = { text = "BSD" }
19
requires-python = ">=3.10"
20
authors = [{ name = "HoloViz developers", email = "[email protected]" }]
21
maintainers = [
22
{ name = "HoloViz developers", email = "[email protected]" },
23
]
24
classifiers = [
25
"License :: OSI Approved :: BSD License",
26
"Development Status :: 5 - Production/Stable",
27
"Programming Language :: Python :: 3",
28
"Programming Language :: Python :: 3.10",
29
"Programming Language :: Python :: 3.11",
30
"Programming Language :: Python :: 3.12",
31
"Programming Language :: Python :: 3.13",
32
"Programming Language :: Python :: 3.14",
33
"Operating System :: OS Independent",
34
"Intended Audience :: Developers",
35
"Intended Audience :: Science/Research",
36
"Intended Audience :: Financial and Insurance Industry",
37
"Intended Audience :: Healthcare Industry",
38
"Intended Audience :: Information Technology",
39
"Intended Audience :: Legal Industry",
40
"Intended Audience :: Other Audience",
41
"Natural Language :: English",
42
"Topic :: Scientific/Engineering",
43
"Topic :: Scientific/Engineering :: Visualization",
44
"Topic :: Scientific/Engineering :: Information Analysis",
45
"Topic :: Office/Business",
46
"Topic :: Office/Business :: Financial",
47
"Topic :: Software Development :: Libraries",
48
]
49
50
dependencies = [
51
'bokeh >=3.7.0,<3.9.0',
52
'param >=2.1.0,<3.0',
53
'pyviz_comms >=2.0.0',
54
'markdown',
55
'markdown-it-py',
56
'linkify-it-py',
57
'mdit-py-plugins',
58
'narwhals >=2',
59
'requests',
60
'bleach',
61
'typing_extensions',
62
'pandas >=1.2',
63
'packaging',
64
'tqdm', # TODO: Should this be optional?
65
]
66
67
[project.urls]
68
Homepage = "https://panel.holoviz.org"
69
Source = "https://github.com/holoviz/panel"
70
HoloViz = "https://holoviz.org/"
71
72
[project.optional-dependencies]
73
recommended = [
74
'jupyterlab',
75
'holoviews >=1.18.0',
76
'matplotlib',
77
'pillow',
78
'plotly',
79
]
80
fastapi = [
81
'bokeh-fastapi >= 0.1.5,<0.2.0',
82
'fastapi[standard]',
83
]
84
dev = [
85
'watchfiles',
86
]
87
tests = [
88
'psutil' ,
89
'pytest',
90
'pytest-asyncio',
91
'pytest-rerunfailures <16.0',
92
'pytest-xdist',
93
]
94
mypy = [
95
"mypy",
96
"pandas-stubs",
97
"types-bleach",
98
"types-croniter",
99
"types-Markdown",
100
"types-psutil",
101
"types-requests",
102
"types-tqdm",
103
"typing-extensions",
104
]
105
106
[project.scripts]
107
panel = "panel.command:main"
108
109
[tool.hatch.version]
110
source = "vcs"
111
raw-options = { version_scheme = "no-guess-dev" }
112
113
[tool.hatch.build.targets.wheel]
114
include = ["panel"]
115
exclude = ["panel/node_modules"]
116
117
[tool.hatch.build.targets.wheel.force-include]
118
"panel/dist" = "panel/dist"
119
120
[tool.hatch.build.targets.wheel.shared-data]
121
"scripts/jupyter-config/notebook.json" = "etc/jupyter/jupyter_notebook_config.d/panel-client-jupyter.json"
122
"scripts/jupyter-config/server.json" = "etc/jupyter/jupyter_server_config.d/panel-client-jupyter.json"
123
124
[tool.hatch.build.targets.sdist]
125
include = ["panel", "scripts", "examples"]
126
exclude = ["scripts/jupyterlite", "panel/node_modules"]
127
128
[tool.hatch.build.targets.sdist.force-include]
129
"panel/dist" = "panel/dist"
130
131
[tool.hatch.build.hooks.vcs]
132
version-file = "panel/_version.py"
133
134
[tool.hatch.build.hooks.custom]
135
path = 'hatch_build.py'
136
137
[tool.ruff]
138
exclude = [
139
".git",
140
"__pycache__",
141
".tox",
142
".eggs",
143
"*.egg",
144
"doc",
145
"dist",
146
"build",
147
"_build",
148
"examples",
149
".ipynb_checkpoints",
150
"node_modules",
151
"apps",
152
]
153
line-length = 165
154
fix = true
155
156
[tool.ruff.lint]
157
ignore = [
158
"E402", # Module level import not at top of file
159
"E712", # Avoid equality comparisons to True; use if {cond}: for truth checks
160
"E731", # Do not assign a lambda expression, use a def
161
"E741", # Ambiguous variable name
162
"W605", # Invalid escape sequence
163
"E701", # Multiple statements on one line
164
"B006", # Do not use mutable data structures for argument defaults
165
"B905", # `zip()` without an explicit `strict=` parameter
166
]
167
select = [
168
"B",
169
"E",
170
"F",
171
"W",
172
"PIE",
173
"T20",
174
"RUF006",
175
"UP004",
176
"UP006",
177
"UP020",
178
"UP028",
179
"UP030",
180
"UP031",
181
"UP032",
182
"UP034",
183
"UP036",
184
]
185
unfixable = [
186
"F401", # Unused imports
187
"F841", # Unused variables
188
]
189
190
[tool.ruff.lint.per-file-ignores]
191
"panel/tests/ui/jupyter_server_test_config.py" = ["F821"]
192
"panel/compiler.py" = ["T201"]
193
"panel/io/convert.py" = ["T201"]
194
"panel/pane/vtk/synchronizable_*.py" = ["T201"]
195
"scripts/*.py" = ["T201"]
196
"hatch_build.py" = ["T201"]
197
198
[tool.isort]
199
force_grid_wrap = 4
200
multi_line_output = 5
201
combine_as_imports = true
202
lines_between_types = 1
203
include_trailing_comma = true
204
205
[tool.codespell]
206
ignore-words-list = "nd,doubleclick,ser"
207
skip = "doc/generate_modules.py,examples/reference/templates/FastGridTemplate.ipynb,panel/.eslintrc.js,panel/package-lock.json,panel/package.json"
208
write-changes = true
209
210
[tool.pytest.ini_options]
211
# addopts = "-v --pyargs --doctest-ignore-import-errors --color=yes"
212
addopts = "--pyargs --doctest-ignore-import-errors --color=yes"
213
norecursedirs = "doc .git dist build _build .ipynb_checkpoints panel/examples"
214
asyncio_mode = "auto"
215
asyncio_default_fixture_loop_scope = "function"
216
xfail_strict = true
217
minversion = "7"
218
log_cli_level = "INFO"
219
filterwarnings = [
220
"error",
221
# 2023-11: `pkg_resources` is deprecated
222
"ignore:Deprecated call to `pkg_resources.+?'zope:DeprecationWarning", # https://github.com/zopefoundation/meta/issues/194
223
"ignore: pkg_resources is deprecated as an API:DeprecationWarning:streamz.plugins", # https://github.com/python-streamz/streamz/issues/460
224
# 2024-06: Adding error to the filterwarnings
225
"ignore:Jupyter is migrating its paths to use standard platformdirs:DeprecationWarning", # OK
226
"ignore:distutils Version classes are deprecated:DeprecationWarning:ipywidgets_bokeh.kernel", # OK
227
"ignore:unclosed file <_io.TextIOWrapper name='(/dev/null|nul)' mode='w':ResourceWarning", # OK
228
"ignore:Deprecated in traitlets 4.1, use the instance .metadata dictionary directly", # OK (ipywidgets internal)
229
# 2024-11
230
"ignore:websockets.legacy is deprecated:DeprecationWarning", # https://github.com/encode/uvicorn/issues/1908
231
"ignore:websockets.server.WebSocketServerProtocol is deprecated:DeprecationWarning", # https://github.com/encode/uvicorn/issues/1908
232
# 2025-01 `plotly` 6.0 triggers warnings
233
"ignore:\\*scattermapbox\\* is deprecated! Use \\*scattermap\\* instead", # https://github.com/plotly/plotly.py/issues/4997
234
# 2025-06
235
"ignore:Failed to generate report", # OK, CovReportWarning: Failed to generate report: No data to report.
236
"ignore:Couldn't parse", # OK, CoverageWarning: Couldn't parse
237
"ignore:unclosed <socket.socket:ResourceWarning", # Windows Python 3.10 test-example
238
# 2025-10
239
"ignore:'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16::starlette",
240
"ignore:'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16::fastapi",
241
"ignore:Implicitly cleaning up <_TemporaryFileWrapper:ResourceWarning",
242
]
243
244
[tool.coverage.run]
245
disable_warnings = [
246
"module-not-imported",
247
"couldnt-parse",
248
"no-data-collected",
249
]
250
251
[tool.mypy]
252
namespace_packages = true
253
explicit_package_bases = true
254
disable_error_code = "attr-defined"
255
mypy_path = ""
256
exclude = []
257
258
[[tool.mypy.overrides]]
259
module = [
260
"anywidget.*",
261
"bokeh_django.*",
262
"bokeh_fastapi.*",
263
"bokeh.*",
264
"cachecontrol.*",
265
"cryptography.*",
266
"diskcache.*",
267
"flask.*",
268
"fsspec.*",
269
"holoviews.*",
270
"hvplot.*",
271
"ipympl.*",
272
"ipywidgets_bokeh.*",
273
"ipywidgets.*",
274
"js.*",
275
"jupyter_bokeh.*",
276
"langchain.*",
277
"lumen.*",
278
"magic.*",
279
"matplotlib.*",
280
"mdit_py_emoji.*",
281
"memray.*",
282
"myst_parser.*",
283
"pamela.*",
284
"param.*",
285
"playwright.*",
286
"plotly.*",
287
"pydeck.*",
288
"pyecharts.*",
289
"pyodide_http.*",
290
"pyodide.*",
291
"pyscript.*",
292
"pyvista.*",
293
"pyviz_comms.*",
294
"rpy2.*",
295
"s3fs.*",
296
"scipy.*",
297
"setuptools_scm.*",
298
"snakeviz.*",
299
"streamz.*",
300
"traitlets.*",
301
"tranquilizer.*",
302
"uvicorn.*",
303
"vtk.*",
304
"watchfiles.*"
305
]
306
ignore_missing_imports = true
307
308