From baa2c2c2d5961c468c9217625463da0d31b95786 Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Wed, 28 Aug 2024 11:56:22 -0700 Subject: [PATCH 01/10] WIP: add pyproject.toml targeting to fix: issue #256 --- pyproject.toml | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..f12fc647 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,71 @@ +[build-system] +requires = [ + "setuptools", + "pathlib" +] +build-backend = "setuptools.build_meta" + +[project] +name = "policyengine-core" +version = "3.6.0" +dependencies = [ + "pytest>=8,<9", + "numpy~=1.26.4", + "black", + "linecheck<1", + "yaml-changelog<1", + "coverage", + "sortedcontainers<3", + "numexpr<3", + "dpath<3", + "psutil<6", + "wheel<1", + "h5py>=3,<4", + "requests>=2.27.1,<3", + "pandas>=1", + "plotly>=5.6.0,<6", + "ipython>=7.17.0,<8", + "pyvis>=0.3.2", +] +requires-python = ">=3.9" +authors = [ + {name = "PolicyEngine", email = "hello@policyengine.org"} +] +description = "Core microsimulation engine enabling country-specific policy models." +readme = "README.md" +license = {file = "LICENSE"} +keywords = ["tax", "benefit", "microsimulation", "framework"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "License :: OSI Approved :: GNU Affero General Public License v3", + "Operating System :: POSIX", + "Programming Language :: Python", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Scientific/Engineering :: Information Analysis", +] + +[project.optional-dependencies] +dev = [ + "jupyter-book<1", + "furo<2023", + "markupsafe==2.0.1", + "coverage", + "furo", + "mypy<2", + "sphinx==5.0.0", + "sphinx-argparse==0.4.0", + "sphinx-math-dollar==1.2.1", + "types-PyYAML==6.0.12.2", + "types-requests==2.28.11.7", + "types-setuptools==65.6.0.2", + "types-urllib3==1.26.25.4", +] + +[project.urls] +Homepage = "https://github.com/policyengine/policyengine-core" + +[project.entry-points.console_scripts] +policyengine-core = "policyengine_core.scripts.policyengine_command:main" \ No newline at end of file From 996737ae09b476ab655823401b138432460fa6d0 Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Tue, 3 Sep 2024 18:39:17 -0700 Subject: [PATCH 02/10] WIP: add pyproject.toml, test_toml.py; edited setup.py to avoid overwriting with pyproject.toml target to fix: issue #256 --- pyproject.toml | 14 +++++---- setup.py | 78 +++++++++++++++++++++++++------------------------- test_toml.py | 51 +++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 44 deletions(-) create mode 100644 test_toml.py diff --git a/pyproject.toml b/pyproject.toml index f12fc647..6461ed05 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,10 @@ [build-system] -requires = [ - "setuptools", - "pathlib" -] +requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "policyengine-core" -version = "3.6.0" +version = "3.6.3" dependencies = [ "pytest>=8,<9", "numpy~=1.26.4", @@ -46,6 +43,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Information Analysis", ] +dynamic = ["scripts"] [project.optional-dependencies] dev = [ @@ -67,5 +65,11 @@ dev = [ [project.urls] Homepage = "https://github.com/policyengine/policyengine-core" +[tool.setuptools.packages.find] +exclude = ["tests*"] + +[tool.setuptools] +include-package-data = true + [project.entry-points.console_scripts] policyengine-core = "policyengine_core.scripts.policyengine_command:main" \ No newline at end of file diff --git a/setup.py b/setup.py index 55e82b6d..a9f103be 100644 --- a/setup.py +++ b/setup.py @@ -9,41 +9,41 @@ # Please make sure to cap all dependency versions, in order to avoid unwanted # functional and integration breaks caused by external code updates. -general_requirements = [ - "pytest>=8,<9", - "numpy~=1.26.4", - "black", - "linecheck<1", - "yaml-changelog<1", - "coverage", - "sortedcontainers<3", - "numexpr<3", - "dpath<3", - "psutil<6", - "wheel<1", - "h5py>=3,<4", - "requests>=2.27.1,<3", - "pandas>=1", - "plotly>=5.6.0,<6", - "ipython>=7.17.0,<8", - "pyvis>=0.3.2", -] - -dev_requirements = [ - "jupyter-book<1", - "furo<2023", - "markupsafe==2.0.1", - "coverage", - "furo", - "mypy<2", - "sphinx==5.0.0", - "sphinx-argparse==0.4.0", - "sphinx-math-dollar==1.2.1", - "types-PyYAML==6.0.12.2", - "types-requests==2.28.11.7", - "types-setuptools==65.6.0.2", - "types-urllib3==1.26.25.4", -] +# general_requirements = [ +# "pytest>=8,<9", +# "numpy~=1.26.4", +# "black", +# "linecheck<1", +# "yaml-changelog<1", +# "coverage", +# "sortedcontainers<3", +# "numexpr<3", +# "dpath<3", +# "psutil<6", +# "wheel<1", +# "h5py>=3,<4", +# "requests>=2.27.1,<3", +# "pandas>=1", +# "plotly>=5.6.0,<6", +# "ipython>=7.17.0,<8", +# "pyvis>=0.3.2", +# ] +# +# dev_requirements = [ +# "jupyter-book<1", +# "furo<2023", +# "markupsafe==2.0.1", +# "coverage", +# "furo", +# "mypy<2", +# "sphinx==5.0.0", +# "sphinx-argparse==0.4.0", +# "sphinx-math-dollar==1.2.1", +# "types-PyYAML==6.0.12.2", +# "types-requests==2.28.11.7", +# "types-setuptools==65.6.0.2", +# "types-urllib3==1.26.25.4", +# ] setup( name="policyengine-core", @@ -74,10 +74,10 @@ ], }, python_requires=">=3.9", - extras_require={ - "dev": dev_requirements, - }, + # extras_require={ + # "dev": dev_requirements, + # }, include_package_data=True, # Will read MANIFEST.in - install_requires=general_requirements, + # install_requires=general_requirements, packages=find_packages(exclude=["tests*"]), ) diff --git a/test_toml.py b/test_toml.py new file mode 100644 index 00000000..7d60111b --- /dev/null +++ b/test_toml.py @@ -0,0 +1,51 @@ +import os +import subprocess +import tomli +import pytest +from packaging import version + +@pytest.fixture(scope="module") +def toml_data(): + file_path = "pyproject.toml" + if not os.path.exists(file_path): + pytest.fail("pyproject.toml not found in the current directory.") + with open(file_path, "rb") as f: + return tomli.load(f) + +def test_toml_syntax(): + file_path = "pyproject.toml" + try: + with open(file_path, "rb") as f: + tomli.load(f) + except tomli.TOMLDecodeError as e: + pytest.fail(f"TOML syntax error: {e}") + +def test_required_fields(toml_data): + required_fields = ["name", "version", "description"] + for field in required_fields: + assert field in toml_data.get("project", {}), f"Missing required field: {field}" + +def test_build_system(toml_data): + build_system = toml_data.get("build-system", {}) + assert "requires" in build_system, "Build system 'requires' is missing." + assert "build-backend" in build_system, "Build system 'build-backend' is missing." + +def test_package_build(): + try: + subprocess.run(["python", "-m", "build"], check=True) + except subprocess.CalledProcessError: + pytest.fail("Failed to build package.") + +def test_package_installation(): + try: + subprocess.run(["pip", "install", "."], check=True) + except subprocess.CalledProcessError: + pytest.fail("Failed to install package.") + +def test_run_tests(): + try: + subprocess.run(["pytest"], check=True) + except subprocess.CalledProcessError: + pytest.fail("Some tests failed.") + except FileNotFoundError: + pytest.skip("pytest not found. Make sure it's installed and in your PATH.") \ No newline at end of file From a828427646a8861a3788fbdeddb7e81af675475d Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Tue, 3 Sep 2024 19:57:32 -0700 Subject: [PATCH 03/10] WIP: add pyproject.toml, test_toml.py; edited setup.py to avoid overwriting with pyproject.toml target to fix: issue #256 --- changelog_entry.yaml | 7 +++++++ test_toml.py | 19 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29b..f96edf0e 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,7 @@ +- bump: minor + changes: + added: + - pyproject.toml, transforming from setup.py + - testing for pyproject.toml + changed: + - edited dependencies in setup.py to avoid overwriting \ No newline at end of file diff --git a/test_toml.py b/test_toml.py index 7d60111b..5df94b7c 100644 --- a/test_toml.py +++ b/test_toml.py @@ -4,6 +4,7 @@ import pytest from packaging import version + @pytest.fixture(scope="module") def toml_data(): file_path = "pyproject.toml" @@ -12,6 +13,7 @@ def toml_data(): with open(file_path, "rb") as f: return tomli.load(f) + def test_toml_syntax(): file_path = "pyproject.toml" try: @@ -20,15 +22,22 @@ def test_toml_syntax(): except tomli.TOMLDecodeError as e: pytest.fail(f"TOML syntax error: {e}") + def test_required_fields(toml_data): required_fields = ["name", "version", "description"] for field in required_fields: - assert field in toml_data.get("project", {}), f"Missing required field: {field}" + assert field in toml_data.get( + "project", {} + ), f"Missing required field: {field}" + def test_build_system(toml_data): build_system = toml_data.get("build-system", {}) assert "requires" in build_system, "Build system 'requires' is missing." - assert "build-backend" in build_system, "Build system 'build-backend' is missing." + assert ( + "build-backend" in build_system + ), "Build system 'build-backend' is missing." + def test_package_build(): try: @@ -36,16 +45,20 @@ def test_package_build(): except subprocess.CalledProcessError: pytest.fail("Failed to build package.") + def test_package_installation(): try: subprocess.run(["pip", "install", "."], check=True) except subprocess.CalledProcessError: pytest.fail("Failed to install package.") + def test_run_tests(): try: subprocess.run(["pytest"], check=True) except subprocess.CalledProcessError: pytest.fail("Some tests failed.") except FileNotFoundError: - pytest.skip("pytest not found. Make sure it's installed and in your PATH.") \ No newline at end of file + pytest.skip( + "pytest not found. Make sure it's installed and in your PATH." + ) From ef8f1b4a7cfd20d7f55a6added79b4df3ceb3c99 Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Tue, 3 Sep 2024 20:00:25 -0700 Subject: [PATCH 04/10] WIP: add pyproject.toml, test_toml.py; edited setup.py to avoid overwriting with pyproject.toml target to fix: issue #256 --- changelog_entry.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index f96edf0e..a95257f6 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -4,4 +4,4 @@ - pyproject.toml, transforming from setup.py - testing for pyproject.toml changed: - - edited dependencies in setup.py to avoid overwriting \ No newline at end of file + - edited dependencies in setup.py to avoid overwriting From 14683704dbb454ee322e2aede02cc03787ad639d Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Tue, 3 Sep 2024 20:01:11 -0700 Subject: [PATCH 05/10] WIP: add pyproject.toml, test_toml.py; edited setup.py to avoid overwriting with pyproject.toml target to fix: issue #256 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6461ed05..e707777a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,4 +72,4 @@ exclude = ["tests*"] include-package-data = true [project.entry-points.console_scripts] -policyengine-core = "policyengine_core.scripts.policyengine_command:main" \ No newline at end of file +policyengine-core = "policyengine_core.scripts.policyengine_command:main" From 1161dca52cd9d71ac2ca4be9db5dfc6eeafa3706 Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Thu, 5 Sep 2024 18:12:36 -0700 Subject: [PATCH 06/10] WIP: add pyproject.toml, test_toml.py; deleted setup.py to avoid overwriting with pyproject.toml target to fix: issue #256 --- pyproject.toml | 3 - setup.py | 83 ------------------------- test_toml.py => tests/core/test_toml.py | 30 +-------- 3 files changed, 2 insertions(+), 114 deletions(-) delete mode 100644 setup.py rename test_toml.py => tests/core/test_toml.py (55%) diff --git a/pyproject.toml b/pyproject.toml index e707777a..47ca43d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,9 +65,6 @@ dev = [ [project.urls] Homepage = "https://github.com/policyengine/policyengine-core" -[tool.setuptools.packages.find] -exclude = ["tests*"] - [tool.setuptools] include-package-data = true diff --git a/setup.py b/setup.py deleted file mode 100644 index a9f103be..00000000 --- a/setup.py +++ /dev/null @@ -1,83 +0,0 @@ -from pathlib import Path - -from setuptools import find_packages, setup - -# Read the contents of our README file for PyPi -this_directory = Path(__file__).parent -long_description = (this_directory / "README.md").read_text() - -# Please make sure to cap all dependency versions, in order to avoid unwanted -# functional and integration breaks caused by external code updates. - -# general_requirements = [ -# "pytest>=8,<9", -# "numpy~=1.26.4", -# "black", -# "linecheck<1", -# "yaml-changelog<1", -# "coverage", -# "sortedcontainers<3", -# "numexpr<3", -# "dpath<3", -# "psutil<6", -# "wheel<1", -# "h5py>=3,<4", -# "requests>=2.27.1,<3", -# "pandas>=1", -# "plotly>=5.6.0,<6", -# "ipython>=7.17.0,<8", -# "pyvis>=0.3.2", -# ] -# -# dev_requirements = [ -# "jupyter-book<1", -# "furo<2023", -# "markupsafe==2.0.1", -# "coverage", -# "furo", -# "mypy<2", -# "sphinx==5.0.0", -# "sphinx-argparse==0.4.0", -# "sphinx-math-dollar==1.2.1", -# "types-PyYAML==6.0.12.2", -# "types-requests==2.28.11.7", -# "types-setuptools==65.6.0.2", -# "types-urllib3==1.26.25.4", -# ] - -setup( - name="policyengine-core", - version="3.6.6", - author="PolicyEngine", - author_email="hello@policyengine.org", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "License :: OSI Approved :: GNU Affero General Public License v3", - "Operating System :: POSIX", - "Programming Language :: Python", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Scientific/Engineering :: Information Analysis", - ], - description="Core microsimulation engine enabling country-specific policy models.", - keywords="tax benefit microsimulation framework", - license="https://www.fsf.org/licensing/licenses/agpl-3.0.html", - license_files=("LICENSE",), - url="https://github.com/policyengine/policyengine-core", - long_description=long_description, - long_description_content_type="text/markdown", - entry_points={ - "console_scripts": [ - "policyengine-core=policyengine_core.scripts.policyengine_command:main", - ], - }, - python_requires=">=3.9", - # extras_require={ - # "dev": dev_requirements, - # }, - include_package_data=True, # Will read MANIFEST.in - # install_requires=general_requirements, - packages=find_packages(exclude=["tests*"]), -) diff --git a/test_toml.py b/tests/core/test_toml.py similarity index 55% rename from test_toml.py rename to tests/core/test_toml.py index 5df94b7c..4f106da9 100644 --- a/test_toml.py +++ b/tests/core/test_toml.py @@ -2,12 +2,11 @@ import subprocess import tomli import pytest -from packaging import version @pytest.fixture(scope="module") def toml_data(): - file_path = "pyproject.toml" + file_path = "../../pyproject.toml" if not os.path.exists(file_path): pytest.fail("pyproject.toml not found in the current directory.") with open(file_path, "rb") as f: @@ -15,7 +14,7 @@ def toml_data(): def test_toml_syntax(): - file_path = "pyproject.toml" + file_path = "../../pyproject.toml" try: with open(file_path, "rb") as f: tomli.load(f) @@ -37,28 +36,3 @@ def test_build_system(toml_data): assert ( "build-backend" in build_system ), "Build system 'build-backend' is missing." - - -def test_package_build(): - try: - subprocess.run(["python", "-m", "build"], check=True) - except subprocess.CalledProcessError: - pytest.fail("Failed to build package.") - - -def test_package_installation(): - try: - subprocess.run(["pip", "install", "."], check=True) - except subprocess.CalledProcessError: - pytest.fail("Failed to install package.") - - -def test_run_tests(): - try: - subprocess.run(["pytest"], check=True) - except subprocess.CalledProcessError: - pytest.fail("Some tests failed.") - except FileNotFoundError: - pytest.skip( - "pytest not found. Make sure it's installed and in your PATH." - ) From 592d5ddfcc0c56a7eb6820c367064c992b7a602a Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Wed, 11 Sep 2024 15:20:34 -0700 Subject: [PATCH 07/10] WIP: fix current version fetching in workflow and Makefile; fix test for pyproject.toml; add fetch_version.py and __version__.py target to fix: issue #256 --- .github/fetch_version.py | 13 +++++++++++++ .github/is-version-number-acceptable.sh | 2 +- .github/publish-git-tag.sh | 2 +- Makefile | 4 ++-- policyengine_core/__version__.py | 9 +++++++++ tests/core/test_toml.py | 17 +++++++---------- 6 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 .github/fetch_version.py create mode 100644 policyengine_core/__version__.py diff --git a/.github/fetch_version.py b/.github/fetch_version.py new file mode 100644 index 00000000..ddecd809 --- /dev/null +++ b/.github/fetch_version.py @@ -0,0 +1,13 @@ +from policyengine_core.__version__ import __version__ + + +def fetch_version(): + try: + return __version__ + except Exception as e: + print(f"Error fetching version: {e}") + return None + + +if __name__ == "__main__": + print(fetch_version()) diff --git a/.github/is-version-number-acceptable.sh b/.github/is-version-number-acceptable.sh index 0f704a93..a9067e6b 100755 --- a/.github/is-version-number-acceptable.sh +++ b/.github/is-version-number-acceptable.sh @@ -12,7 +12,7 @@ then exit 0 fi -current_version=`python setup.py --version` +current_version=`python .github/fetch_version.py` if git rev-parse --verify --quiet $current_version then diff --git a/.github/publish-git-tag.sh b/.github/publish-git-tag.sh index 0143c67b..420f08f0 100755 --- a/.github/publish-git-tag.sh +++ b/.github/publish-git-tag.sh @@ -1,4 +1,4 @@ #! /usr/bin/env bash -git tag `python setup.py --version` +git tag `python .github/fetch_version.py` git push --tags || true # update the repository version diff --git a/Makefile b/Makefile index c04fd21e..1f7bfa19 100644 --- a/Makefile +++ b/Makefile @@ -21,11 +21,11 @@ test: test-country-template coverage xml -i build: - python setup.py sdist bdist_wheel + python -m build changelog: build-changelog changelog.yaml --output changelog.yaml --update-last-date --start-from 0.1.0 --append-file changelog_entry.yaml build-changelog changelog.yaml --org PolicyEngine --repo policyengine-core --output CHANGELOG.md --template .github/changelog_template.md - bump-version changelog.yaml setup.py + bump-version changelog.yaml pyproject.toml rm changelog_entry.yaml || true touch changelog_entry.yaml \ No newline at end of file diff --git a/policyengine_core/__version__.py b/policyengine_core/__version__.py new file mode 100644 index 00000000..f10d0c84 --- /dev/null +++ b/policyengine_core/__version__.py @@ -0,0 +1,9 @@ +import importlib.metadata +import tomli + +try: + with open("pyproject.toml", "rb") as f: + pyproject = tomli.load(f) + __version__ = pyproject["project"]["version"] +except Exception as e: + __version__ = importlib.metadata.version("policyengine_core") diff --git a/tests/core/test_toml.py b/tests/core/test_toml.py index 4f106da9..87973de1 100644 --- a/tests/core/test_toml.py +++ b/tests/core/test_toml.py @@ -1,29 +1,26 @@ -import os -import subprocess +from pathlib import Path import tomli import pytest @pytest.fixture(scope="module") def toml_data(): - file_path = "../../pyproject.toml" - if not os.path.exists(file_path): - pytest.fail("pyproject.toml not found in the current directory.") + file_path = Path("/policyengine-core/pyproject.toml") + if not file_path.exists(): + pytest.fail(f"pyproject.toml not found in the current directory.") with open(file_path, "rb") as f: return tomli.load(f) -def test_toml_syntax(): - file_path = "../../pyproject.toml" +def test_toml_syntax(toml_data): try: - with open(file_path, "rb") as f: - tomli.load(f) + toml_data except tomli.TOMLDecodeError as e: pytest.fail(f"TOML syntax error: {e}") def test_required_fields(toml_data): - required_fields = ["name", "version", "description"] + required_fields = ["name", "version", "dependencies"] for field in required_fields: assert field in toml_data.get( "project", {} From 09921a619fb475f92a71a2cc95211580b5b6c5bf Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Wed, 11 Sep 2024 17:30:19 -0700 Subject: [PATCH 08/10] WIP: build: add tomli dependency to pyproject.toml target to fix: issue #256 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 47ca43d0..ea54fca7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ dependencies = [ "plotly>=5.6.0,<6", "ipython>=7.17.0,<8", "pyvis>=0.3.2", + "tomli==2.0.1", ] requires-python = ">=3.9" authors = [ From 43e2debb4719d3b39728374c53619431343acbdc Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Wed, 11 Sep 2024 17:46:43 -0700 Subject: [PATCH 09/10] WIP: fix: use absolute path to find pyproject.toml in test_toml.py target to fix: issue #256 --- tests/core/test_toml.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/core/test_toml.py b/tests/core/test_toml.py index 87973de1..288b3224 100644 --- a/tests/core/test_toml.py +++ b/tests/core/test_toml.py @@ -1,11 +1,17 @@ +import os from pathlib import Path -import tomli + import pytest +import tomli @pytest.fixture(scope="module") def toml_data(): - file_path = Path("/policyengine-core/pyproject.toml") + # get the path of current file and find pyproject.toml relatively + file_path = ( + Path(os.path.abspath(os.path.dirname(__file__))).parents[1] + / "pyproject.toml" + ) if not file_path.exists(): pytest.fail(f"pyproject.toml not found in the current directory.") with open(file_path, "rb") as f: From 588982e507b52fc4df8de15129dbfa5ee9eaa173 Mon Sep 17 00:00:00 2001 From: SylviaDu99 Date: Wed, 11 Sep 2024 17:55:06 -0700 Subject: [PATCH 10/10] WIP: fix: add build to project dependencies target to fix: issue #256 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index ea54fca7..7f526992 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,7 @@ dependencies = [ "ipython>=7.17.0,<8", "pyvis>=0.3.2", "tomli==2.0.1", + "build==1.2.2", ] requires-python = ">=3.9" authors = [