Skip to content

chore: address various setuptools deprecations#259

Merged
kfsone merged 1 commit into
release/v1from
dev/pyproject-tooling
Jan 25, 2026
Merged

chore: address various setuptools deprecations#259
kfsone merged 1 commit into
release/v1from
dev/pyproject-tooling

Conversation

@kfsone

@kfsone kfsone commented Dec 31, 2025

Copy link
Copy Markdown
Collaborator

This moves various things into 'pyproject.toml' and adds a runbook for doing things with uv - although it does not require uv and does not prevent setuptools from running.

pyproject.toml is now the "correct"/official way to do most of the setup tools stuff, modern tools like uv benefit from it.

The only thing keeping setup.cfg at this point is the 'test' alias, but I would recommend that we consider moving to using tox instead of invoking pytest, and then we should invoke it directly instead of doing python setup.py test.

If we aren't relying on python setup.py test anyplace, we can now remove setup.cfg, but that's beyond the scope of this change.

@kfsone kfsone force-pushed the dev/pyproject-tooling branch from 72fb716 to 5a32e60 Compare December 31, 2025 23:28
@kfsone

kfsone commented Jan 1, 2026

Copy link
Copy Markdown
Collaborator Author

I was never able to get "setup.py" to run on my machine, but whatever the issue was seems to get solved when using uv:

Note: there's more work to actually make it 'uv ready', in particular telling pyproject.toml to get the version from version.py, but that seems to make pyproject authoritative and this isn't meant to be a bridge-burning exercise.

Win|pwsh> . ./.venv/scripts/activate.ps1
(trade-dangerous) [12/31/2025 16:05:59 |dev/pyproject-tooling| S:\Elite\Trade-Dangerous]
Win|pwsh> pip -q install -r requirements-publish.txt

[notice] A new release of pip is available: 24.3.1 -> 25.3
[notice] To update, run: C:\Python310\python.exe -m pip install --upgrade pip
(trade-dangerous) [12/31/2025 16:06:08 |dev/pyproject-tooling| S:\Elite\Trade-Dangerous]
Win|pwsh> python setup.py build -q
Traceback (most recent call last):
  File "S:\Elite\Trade-Dangerous\setup.py", line 14, in <module>
    from setuptools import find_packages, setup
ModuleNotFoundError: No module named 'setuptools'
(trade-dangerous) [12/31/2025 16:06:17 |dev/pyproject-tooling| S:\Elite\Trade-Dangerous]
Win|pwsh> uv build
Building source distribution...
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\setuptools\_distutils\dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\setuptools\_distutils\dist.py:289: UserWarning: Unknown distribution option: 'test_suite'
  warnings.warn(msg)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
!!

        ********************************************************************************
        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).

        By 2026-Feb-18, you need to update your project and remove deprecated calls
        or your builds will no longer be supported.

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  corresp(dist, value, root_dir)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\ptr\__init__.py:13: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\ptr\__init__.py:81: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
!!

        ********************************************************************************
        Please remove any references to `setuptools.command.test` in all supported versions of the affected package.

        This deprecation is overdue, please update your project and remove deprecated
        calls to avoid build errors in the future.
        ********************************************************************************

!!
  class PyTest(orig.test):
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  dist._finalize_license_expression()
running sdist
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmphc3LLX\Lib\site-packages\setuptools\dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
running egg_info
writing Trade_Dangerous.egg-info\PKG-INFO
writing dependency_links to Trade_Dangerous.egg-info\dependency_links.txt
writing entry points to Trade_Dangerous.egg-info\entry_points.txt
writing requirements to Trade_Dangerous.egg-info\requires.txt
writing top-level names to Trade_Dangerous.egg-info\top_level.txt
reading manifest file 'Trade_Dangerous.egg-info\SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'Trade_Dangerous.egg-info\SOURCES.txt'
running check
creating trade_dangerous-12.6.0
creating trade_dangerous-12.6.0\Trade_Dangerous.egg-info
creating trade_dangerous-12.6.0\tests
creating trade_dangerous-12.6.0\tradedangerous
creating trade_dangerous-12.6.0\tradedangerous\commands
creating trade_dangerous-12.6.0\tradedangerous\db
creating trade_dangerous-12.6.0\tradedangerous\mfd
creating trade_dangerous-12.6.0\tradedangerous\mfd\saitek
creating trade_dangerous-12.6.0\tradedangerous\misc
creating trade_dangerous-12.6.0\tradedangerous\plugins
creating trade_dangerous-12.6.0\tradedangerous\templates
copying files to trade_dangerous-12.6.0...
copying LICENSE -> trade_dangerous-12.6.0
copying README.md -> trade_dangerous-12.6.0
copying pyproject.toml -> trade_dangerous-12.6.0
copying setup.cfg -> trade_dangerous-12.6.0
copying setup.py -> trade_dangerous-12.6.0
copying trade.py -> trade_dangerous-12.6.0
copying tradegui.py -> trade_dangerous-12.6.0
copying Trade_Dangerous.egg-info\PKG-INFO -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\SOURCES.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\dependency_links.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\entry_points.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\not-zip-safe -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\requires.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying Trade_Dangerous.egg-info\top_level.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
copying tests\test_bootstrap_commands.py -> trade_dangerous-12.6.0\tests
copying tests\test_bootstrap_plugins.py -> trade_dangerous-12.6.0\tests
copying tests\test_cache.py -> trade_dangerous-12.6.0\tests
copying tests\test_cli_fast_validation.py -> trade_dangerous-12.6.0\tests
copying tests\test_commands.py -> trade_dangerous-12.6.0\tests
copying tests\test_fs.py -> trade_dangerous-12.6.0\tests
copying tests\test_peek.py -> trade_dangerous-12.6.0\tests
copying tests\test_tools.py -> trade_dangerous-12.6.0\tests
copying tests\test_trade.py -> trade_dangerous-12.6.0\tests
copying tests\test_trade_run.py -> trade_dangerous-12.6.0\tests
copying tests\test_utils.py -> trade_dangerous-12.6.0\tests
copying tradedangerous\__init__.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\cache.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\cli.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\corrections.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\csvexport.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\edscupdate.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\edsmupdate.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\formatting.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\fs.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\gui.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\mapping.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\prices.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\submit-distances.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tools.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradecalc.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradedb.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradeenv.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradeenv.pyi -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradeexcept.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\tradeorm.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\transfers.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\utils.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\version.py -> trade_dangerous-12.6.0\tradedangerous
copying tradedangerous\commands\TEMPLATE.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\__init__.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\buildcache_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\buy_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\commandenv.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\exceptions.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\export_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\import_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\local_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\market_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\nav_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\olddata_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\parsing.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\rares_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\run_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\sell_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\shipvendor_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\station_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\trade_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\commands\update_cmd.py -> trade_dangerous-12.6.0\tradedangerous\commands
copying tradedangerous\db\__init__.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\adapter.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\config.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\engine.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\lifecycle.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\locks.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\orm_models.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\paths.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\db\utils.py -> trade_dangerous-12.6.0\tradedangerous\db
copying tradedangerous\mfd\__init__.py -> trade_dangerous-12.6.0\tradedangerous\mfd
copying tradedangerous\mfd\saitek\__init__.py -> trade_dangerous-12.6.0\tradedangerous\mfd\saitek
copying tradedangerous\mfd\saitek\directoutput.py -> trade_dangerous-12.6.0\tradedangerous\mfd\saitek
copying tradedangerous\mfd\saitek\x52pro.py -> trade_dangerous-12.6.0\tradedangerous\mfd\saitek
copying tradedangerous\misc\checkpricebounds.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\clipboard.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\coord64.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\derp-sentinel.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\diff-system-csvs.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\eddb.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\eddn.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\edsc.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\edsm.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\importeddbstats.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\prices-json-exp.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\misc\progress.py -> trade_dangerous-12.6.0\tradedangerous\misc
copying tradedangerous\plugins\__init__.py -> trade_dangerous-12.6.0\tradedangerous\plugins
copying tradedangerous\plugins\edcd_plug.py -> trade_dangerous-12.6.0\tradedangerous\plugins
copying tradedangerous\plugins\eddblink_plug.py -> trade_dangerous-12.6.0\tradedangerous\plugins
copying tradedangerous\plugins\edmc_batch_plug.py -> trade_dangerous-12.6.0\tradedangerous\plugins
copying tradedangerous\plugins\spansh_plug.py -> trade_dangerous-12.6.0\tradedangerous\plugins
copying tradedangerous\templates\Added.csv -> trade_dangerous-12.6.0\tradedangerous\templates
copying tradedangerous\templates\Category.csv -> trade_dangerous-12.6.0\tradedangerous\templates
copying tradedangerous\templates\RareItem.csv -> trade_dangerous-12.6.0\tradedangerous\templates
copying tradedangerous\templates\TradeDangerous.sql -> trade_dangerous-12.6.0\tradedangerous\templates
copying Trade_Dangerous.egg-info\SOURCES.txt -> trade_dangerous-12.6.0\Trade_Dangerous.egg-info
Writing trade_dangerous-12.6.0\setup.cfg
Creating tar archive
removing 'trade_dangerous-12.6.0' (and everything under it)
Building wheel from source distribution...
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\_distutils\dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\_distutils\dist.py:289: UserWarning: Unknown distribution option: 'test_suite'
  warnings.warn(msg)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
!!

        ********************************************************************************
        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).

        By 2026-Feb-18, you need to update your project and remove deprecated calls
        or your builds will no longer be supported.

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  corresp(dist, value, root_dir)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\ptr\__init__.py:13: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\ptr\__init__.py:81: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
!!

        ********************************************************************************
        Please remove any references to `setuptools.command.test` in all supported versions of the affected package.

        This deprecation is overdue, please update your project and remove deprecated
        calls to avoid build errors in the future.
        ********************************************************************************

!!
  class PyTest(orig.test):
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  dist._finalize_license_expression()
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
running bdist_wheel
running build
running build_py
creating build\lib
copying trade.py -> build\lib
copying tradegui.py -> build\lib
creating build\lib\tradedangerous
copying tradedangerous\cache.py -> build\lib\tradedangerous
copying tradedangerous\cli.py -> build\lib\tradedangerous
copying tradedangerous\corrections.py -> build\lib\tradedangerous
copying tradedangerous\csvexport.py -> build\lib\tradedangerous
copying tradedangerous\edscupdate.py -> build\lib\tradedangerous
copying tradedangerous\edsmupdate.py -> build\lib\tradedangerous
copying tradedangerous\formatting.py -> build\lib\tradedangerous
copying tradedangerous\fs.py -> build\lib\tradedangerous
copying tradedangerous\gui.py -> build\lib\tradedangerous
copying tradedangerous\mapping.py -> build\lib\tradedangerous
copying tradedangerous\prices.py -> build\lib\tradedangerous
copying tradedangerous\submit-distances.py -> build\lib\tradedangerous
copying tradedangerous\tools.py -> build\lib\tradedangerous
copying tradedangerous\tradecalc.py -> build\lib\tradedangerous
copying tradedangerous\tradedb.py -> build\lib\tradedangerous
copying tradedangerous\tradeenv.py -> build\lib\tradedangerous
copying tradedangerous\tradeexcept.py -> build\lib\tradedangerous
copying tradedangerous\tradeorm.py -> build\lib\tradedangerous
copying tradedangerous\transfers.py -> build\lib\tradedangerous
copying tradedangerous\utils.py -> build\lib\tradedangerous
copying tradedangerous\version.py -> build\lib\tradedangerous
copying tradedangerous\__init__.py -> build\lib\tradedangerous
creating build\lib\tradedangerous\commands
copying tradedangerous\commands\buildcache_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\buy_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\commandenv.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\exceptions.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\export_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\import_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\local_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\market_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\nav_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\olddata_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\parsing.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\rares_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\run_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\sell_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\shipvendor_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\station_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\TEMPLATE.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\trade_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\update_cmd.py -> build\lib\tradedangerous\commands
copying tradedangerous\commands\__init__.py -> build\lib\tradedangerous\commands
creating build\lib\tradedangerous\db
copying tradedangerous\db\adapter.py -> build\lib\tradedangerous\db
copying tradedangerous\db\config.py -> build\lib\tradedangerous\db
copying tradedangerous\db\engine.py -> build\lib\tradedangerous\db
copying tradedangerous\db\lifecycle.py -> build\lib\tradedangerous\db
copying tradedangerous\db\locks.py -> build\lib\tradedangerous\db
copying tradedangerous\db\orm_models.py -> build\lib\tradedangerous\db
copying tradedangerous\db\paths.py -> build\lib\tradedangerous\db
copying tradedangerous\db\utils.py -> build\lib\tradedangerous\db
copying tradedangerous\db\__init__.py -> build\lib\tradedangerous\db
creating build\lib\tradedangerous\mfd
copying tradedangerous\mfd\__init__.py -> build\lib\tradedangerous\mfd
creating build\lib\tradedangerous\plugins
copying tradedangerous\plugins\edcd_plug.py -> build\lib\tradedangerous\plugins
copying tradedangerous\plugins\eddblink_plug.py -> build\lib\tradedangerous\plugins
copying tradedangerous\plugins\edmc_batch_plug.py -> build\lib\tradedangerous\plugins
copying tradedangerous\plugins\spansh_plug.py -> build\lib\tradedangerous\plugins
copying tradedangerous\plugins\__init__.py -> build\lib\tradedangerous\plugins
creating build\lib\tradedangerous\mfd\saitek
copying tradedangerous\mfd\saitek\directoutput.py -> build\lib\tradedangerous\mfd\saitek
copying tradedangerous\mfd\saitek\x52pro.py -> build\lib\tradedangerous\mfd\saitek
copying tradedangerous\mfd\saitek\__init__.py -> build\lib\tradedangerous\mfd\saitek
running egg_info
writing Trade_Dangerous.egg-info\PKG-INFO
writing dependency_links to Trade_Dangerous.egg-info\dependency_links.txt
writing entry points to Trade_Dangerous.egg-info\entry_points.txt
writing requirements to Trade_Dangerous.egg-info\requires.txt
writing top-level names to Trade_Dangerous.egg-info\top_level.txt
reading manifest file 'Trade_Dangerous.egg-info\SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'Trade_Dangerous.egg-info\SOURCES.txt'
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\command\build_py.py:212: _Warning: Package 'tradedangerous.misc' is absent from the `packages` configuration.
!!

        ********************************************************************************
        ############################
        # Package would be ignored #
        ############################
        Python recognizes 'tradedangerous.misc' as an importable package[^1],
        but it is absent from setuptools' `packages` configuration.

        This leads to an ambiguous overall configuration. If you want to distribute this
        package, please make sure that 'tradedangerous.misc' is explicitly added
        to the `packages` configuration field.

        Alternatively, you can also rely on setuptools' discovery methods
        (for example by using `find_namespace_packages(...)`/`find_namespace:`
        instead of `find_packages(...)`/`find:`).

        You can read more about "package discovery" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

        If you don't want 'tradedangerous.misc' to be distributed and are
        already explicitly excluding 'tradedangerous.misc' via
        `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
        you can try to use `exclude_package_data`, or `include-package-data=False` in
        combination with a more fine grained `package-data` configuration.

        You can read more about "package data files" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/datafiles.html


        [^1]: For Python, any directory (with suitable naming) can be imported,
              even if it does not contain any `.py` files.
              On the other hand, currently there is no concept of package data
              directory, all directories are treated like packages.
        ********************************************************************************

!!
  check.warn(importable)
C:\Users\oliver.smith\AppData\Local\uv\cache\builds-v0\.tmpQdwesI\Lib\site-packages\setuptools\command\build_py.py:212: _Warning: Package 'tradedangerous.templates' is absent from the `packages` configuration.
!!

        ********************************************************************************
        ############################
        # Package would be ignored #
        ############################
        Python recognizes 'tradedangerous.templates' as an importable package[^1],
        but it is absent from setuptools' `packages` configuration.

        This leads to an ambiguous overall configuration. If you want to distribute this
        package, please make sure that 'tradedangerous.templates' is explicitly added
        to the `packages` configuration field.

        Alternatively, you can also rely on setuptools' discovery methods
        (for example by using `find_namespace_packages(...)`/`find_namespace:`
        instead of `find_packages(...)`/`find:`).

        You can read more about "package discovery" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

        If you don't want 'tradedangerous.templates' to be distributed and are
        already explicitly excluding 'tradedangerous.templates' via
        `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
        you can try to use `exclude_package_data`, or `include-package-data=False` in
        combination with a more fine grained `package-data` configuration.

        You can read more about "package data files" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/datafiles.html


        [^1]: For Python, any directory (with suitable naming) can be imported,
              even if it does not contain any `.py` files.
              On the other hand, currently there is no concept of package data
              directory, all directories are treated like packages.
        ********************************************************************************

!!
  check.warn(importable)
copying tradedangerous\submit-distances.py -> build\lib\tradedangerous
copying tradedangerous\tradeenv.pyi -> build\lib\tradedangerous
creating build\lib\tradedangerous\misc
copying tradedangerous\misc\checkpricebounds.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\clipboard.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\coord64.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\derp-sentinel.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\diff-system-csvs.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\eddb.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\eddn.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\edsc.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\edsm.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\importeddbstats.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\prices-json-exp.py -> build\lib\tradedangerous\misc
copying tradedangerous\misc\progress.py -> build\lib\tradedangerous\misc
creating build\lib\tradedangerous\templates
copying tradedangerous\templates\Added.csv -> build\lib\tradedangerous\templates
copying tradedangerous\templates\Category.csv -> build\lib\tradedangerous\templates
copying tradedangerous\templates\RareItem.csv -> build\lib\tradedangerous\templates
copying tradedangerous\templates\TradeDangerous.sql -> build\lib\tradedangerous\templates
installing to build\bdist.win-amd64\wheel
running install
running install_lib
creating build\bdist.win-amd64\wheel
copying build\lib\trade.py -> build\bdist.win-amd64\wheel\.
creating build\bdist.win-amd64\wheel\tradedangerous
copying build\lib\tradedangerous\cache.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\cli.py -> build\bdist.win-amd64\wheel\.\tradedangerous
creating build\bdist.win-amd64\wheel\tradedangerous\commands
copying build\lib\tradedangerous\commands\buildcache_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\buy_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\commandenv.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\exceptions.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\export_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\import_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\local_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\market_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\nav_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\olddata_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\parsing.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\rares_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\run_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\sell_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\shipvendor_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\station_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\TEMPLATE.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\trade_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\update_cmd.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\commands\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous\commands
copying build\lib\tradedangerous\corrections.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\csvexport.py -> build\bdist.win-amd64\wheel\.\tradedangerous
creating build\bdist.win-amd64\wheel\tradedangerous\db
copying build\lib\tradedangerous\db\adapter.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\config.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\engine.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\lifecycle.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\locks.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\orm_models.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\paths.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\utils.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\db\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous\db
copying build\lib\tradedangerous\edscupdate.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\edsmupdate.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\formatting.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\fs.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\gui.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\mapping.py -> build\bdist.win-amd64\wheel\.\tradedangerous
creating build\bdist.win-amd64\wheel\tradedangerous\mfd
creating build\bdist.win-amd64\wheel\tradedangerous\mfd\saitek
copying build\lib\tradedangerous\mfd\saitek\directoutput.py -> build\bdist.win-amd64\wheel\.\tradedangerous\mfd\saitek
copying build\lib\tradedangerous\mfd\saitek\x52pro.py -> build\bdist.win-amd64\wheel\.\tradedangerous\mfd\saitek
copying build\lib\tradedangerous\mfd\saitek\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous\mfd\saitek
copying build\lib\tradedangerous\mfd\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous\mfd
creating build\bdist.win-amd64\wheel\tradedangerous\misc
copying build\lib\tradedangerous\misc\checkpricebounds.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\clipboard.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\coord64.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\derp-sentinel.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\diff-system-csvs.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\eddb.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\eddn.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\edsc.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\edsm.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\importeddbstats.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\prices-json-exp.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
copying build\lib\tradedangerous\misc\progress.py -> build\bdist.win-amd64\wheel\.\tradedangerous\misc
creating build\bdist.win-amd64\wheel\tradedangerous\plugins
copying build\lib\tradedangerous\plugins\edcd_plug.py -> build\bdist.win-amd64\wheel\.\tradedangerous\plugins
copying build\lib\tradedangerous\plugins\eddblink_plug.py -> build\bdist.win-amd64\wheel\.\tradedangerous\plugins
copying build\lib\tradedangerous\plugins\edmc_batch_plug.py -> build\bdist.win-amd64\wheel\.\tradedangerous\plugins
copying build\lib\tradedangerous\plugins\spansh_plug.py -> build\bdist.win-amd64\wheel\.\tradedangerous\plugins
copying build\lib\tradedangerous\plugins\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous\plugins
copying build\lib\tradedangerous\prices.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\submit-distances.py -> build\bdist.win-amd64\wheel\.\tradedangerous
creating build\bdist.win-amd64\wheel\tradedangerous\templates
copying build\lib\tradedangerous\templates\Added.csv -> build\bdist.win-amd64\wheel\.\tradedangerous\templates
copying build\lib\tradedangerous\templates\Category.csv -> build\bdist.win-amd64\wheel\.\tradedangerous\templates
copying build\lib\tradedangerous\templates\RareItem.csv -> build\bdist.win-amd64\wheel\.\tradedangerous\templates
copying build\lib\tradedangerous\templates\TradeDangerous.sql -> build\bdist.win-amd64\wheel\.\tradedangerous\templates
copying build\lib\tradedangerous\tools.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradecalc.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradedb.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradeenv.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradeenv.pyi -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradeexcept.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\tradeorm.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\transfers.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\utils.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\version.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradedangerous\__init__.py -> build\bdist.win-amd64\wheel\.\tradedangerous
copying build\lib\tradegui.py -> build\bdist.win-amd64\wheel\.
running install_egg_info
Copying Trade_Dangerous.egg-info to build\bdist.win-amd64\wheel\.\Trade_Dangerous-12.6.0-py3.11.egg-info
running install_scripts
creating build\bdist.win-amd64\wheel\trade_dangerous-12.6.0.dist-info\WHEEL
creating 'S:\Elite\Trade-Dangerous\dist\.tmp-f16e92x2\trade_dangerous-12.6.0-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it
adding 'trade.py'
adding 'tradegui.py'
adding 'trade_dangerous-12.6.0.dist-info/licenses/LICENSE'
adding 'tradedangerous/__init__.py'
adding 'tradedangerous/cache.py'
adding 'tradedangerous/cli.py'
adding 'tradedangerous/corrections.py'
adding 'tradedangerous/csvexport.py'
adding 'tradedangerous/edscupdate.py'
adding 'tradedangerous/edsmupdate.py'
adding 'tradedangerous/formatting.py'
adding 'tradedangerous/fs.py'
adding 'tradedangerous/gui.py'
adding 'tradedangerous/mapping.py'
adding 'tradedangerous/prices.py'
adding 'tradedangerous/submit-distances.py'
adding 'tradedangerous/tools.py'
adding 'tradedangerous/tradecalc.py'
adding 'tradedangerous/tradedb.py'
adding 'tradedangerous/tradeenv.py'
adding 'tradedangerous/tradeenv.pyi'
adding 'tradedangerous/tradeexcept.py'
adding 'tradedangerous/tradeorm.py'
adding 'tradedangerous/transfers.py'
adding 'tradedangerous/utils.py'
adding 'tradedangerous/version.py'
adding 'tradedangerous/commands/TEMPLATE.py'
adding 'tradedangerous/commands/__init__.py'
adding 'tradedangerous/commands/buildcache_cmd.py'
adding 'tradedangerous/commands/buy_cmd.py'
adding 'tradedangerous/commands/commandenv.py'
adding 'tradedangerous/commands/exceptions.py'
adding 'tradedangerous/commands/export_cmd.py'
adding 'tradedangerous/commands/import_cmd.py'
adding 'tradedangerous/commands/local_cmd.py'
adding 'tradedangerous/commands/market_cmd.py'
adding 'tradedangerous/commands/nav_cmd.py'
adding 'tradedangerous/commands/olddata_cmd.py'
adding 'tradedangerous/commands/parsing.py'
adding 'tradedangerous/commands/rares_cmd.py'
adding 'tradedangerous/commands/run_cmd.py'
adding 'tradedangerous/commands/sell_cmd.py'
adding 'tradedangerous/commands/shipvendor_cmd.py'
adding 'tradedangerous/commands/station_cmd.py'
adding 'tradedangerous/commands/trade_cmd.py'
adding 'tradedangerous/commands/update_cmd.py'
adding 'tradedangerous/db/__init__.py'
adding 'tradedangerous/db/adapter.py'
adding 'tradedangerous/db/config.py'
adding 'tradedangerous/db/engine.py'
adding 'tradedangerous/db/lifecycle.py'
adding 'tradedangerous/db/locks.py'
adding 'tradedangerous/db/orm_models.py'
adding 'tradedangerous/db/paths.py'
adding 'tradedangerous/db/utils.py'
adding 'tradedangerous/mfd/__init__.py'
adding 'tradedangerous/mfd/saitek/__init__.py'
adding 'tradedangerous/mfd/saitek/directoutput.py'
adding 'tradedangerous/mfd/saitek/x52pro.py'
adding 'tradedangerous/misc/checkpricebounds.py'
adding 'tradedangerous/misc/clipboard.py'
adding 'tradedangerous/misc/coord64.py'
adding 'tradedangerous/misc/derp-sentinel.py'
adding 'tradedangerous/misc/diff-system-csvs.py'
adding 'tradedangerous/misc/eddb.py'
adding 'tradedangerous/misc/eddn.py'
adding 'tradedangerous/misc/edsc.py'
adding 'tradedangerous/misc/edsm.py'
adding 'tradedangerous/misc/importeddbstats.py'
adding 'tradedangerous/misc/prices-json-exp.py'
adding 'tradedangerous/misc/progress.py'
adding 'tradedangerous/plugins/__init__.py'
adding 'tradedangerous/plugins/edcd_plug.py'
adding 'tradedangerous/plugins/eddblink_plug.py'
adding 'tradedangerous/plugins/edmc_batch_plug.py'
adding 'tradedangerous/plugins/spansh_plug.py'
adding 'tradedangerous/templates/Added.csv'
adding 'tradedangerous/templates/Category.csv'
adding 'tradedangerous/templates/RareItem.csv'
adding 'tradedangerous/templates/TradeDangerous.sql'
adding 'trade_dangerous-12.6.0.dist-info/METADATA'
adding 'trade_dangerous-12.6.0.dist-info/WHEEL'
adding 'trade_dangerous-12.6.0.dist-info/entry_points.txt'
adding 'trade_dangerous-12.6.0.dist-info/top_level.txt'
adding 'trade_dangerous-12.6.0.dist-info/RECORD'
removing build\bdist.win-amd64\wheel
Successfully built dist\trade_dangerous-12.6.0.tar.gz
Successfully built dist\trade_dangerous-12.6.0-py3-none-any.whl

@kfsone kfsone requested a review from eyeonus January 1, 2026 00:09
@kfsone kfsone force-pushed the dev/pyproject-tooling branch 2 times, most recently from 61adb55 to 6937886 Compare January 2, 2026 08:48
Comment thread pyproject.toml Outdated
Comment thread pyproject.toml
Comment thread pyproject.toml Outdated
Comment thread setup.cfg
@kfsone kfsone force-pushed the dev/pyproject-tooling branch 2 times, most recently from ca191e0 to 14bdc33 Compare January 5, 2026 09:06
@kfsone

kfsone commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator Author

@eyeonus OK - What I've done here:

  • added "python-app-uv.yml" which got processed in parallel for a same-same-apple-orange check: https://github.com/eyeonus/Trade-Dangerous/pull/259/checks
    scroll down the left side, there's a 'Python App (uv)' sub-section which is that version running.

  • added "uv.lock" to the repos,
    think: "pip freeze but we ship it to save recalculating it".
    it's a way to ensure that if someone downloads 12.7.2 in 6 months, uv will pip-install the same packages we were using.

  • put some stuff back in setup.cfg, but that means maintaining both places,

  • normalized the pyproject dependencies with the current requirements*.txt files, moving away from those would require determining what older use-cases people have; if they're running python 3.10, chances are they are good-to-go with pyproject.toml only

Use

deactivate  # or de-activate your venv/conda/whatever
pip install -u uv  # or brew install uv, or winget install uv, or apt install uv, or etc...
git clone github.com/eyeonus/Trade-Dangerous damnitoliver
cd damnitoliver
git checkout dev/pyproject-tooling
uv sync  # <- creates a .venv including installing the required python specified by .python-version into it

# Route 1: just stick uv infront of everything
uv run trade --help

# Route 2: activate the virtual env uv sync created
. ./.venv/bin/activate.sh  # <- posix
. ./.venv/scripts/activate.ps1  # <- powershell
trade --help

To build the distributable:

uv build

To run the tests:

uv run tox --parallel   # <- slow first time, tests ALL versions of python
# or activate and then just tox --parallel

to update current requirements:

# edit pyproject.toml if you need to change a pin, then
uv lock  # <- recalculates dependencies
uv sync  # <- updates the .venv to match the lock file
git commit ... uv.lock

to add a new dependency:

# user-facing
uv add "windows-for-workgrounds>=3.1.1"
# dev-only
uv add --dev "windows-nt>=2000"
# publish-only
uv add --group publish "windows-xp>=98"

# NOTE: That's only added the dependency, it hasn't installed it
uv sync  # <- now it has.
git commit ... uv.lock

It does its own caching, so the first run can be underwhelming, It's when you nuke the .venv and do "uv sync" again, for example, that you go "oh, that's definitely better" :)

@kfsone

kfsone commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator Author

I'm still not going to be the least offended if you choose not to embrace this atm.

@kfsone

kfsone commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator Author

PS: If you want to try a different python locally:

# powershell
$env:UV_PYTHON="3.13"
uv sync
# posix
export UV_PYTHON=3.13
uv sync

looking at tox results, trade runs a fair bit faster under pythons 3.13 and 3.14. rubs hands together

@kfsone kfsone force-pushed the dev/pyproject-tooling branch from 30216ec to 509dec9 Compare January 11, 2026 21:51
@Tromador

Copy link
Copy Markdown
Collaborator

It's not that I eschew new tools, it's just my brain is hardwared to (?:n)?vi(?:m)? or notepad++. Much like Linus Torvalds, keeping a uemacs source tree in his repo and compiling it up each and every time because he can't use anything else, I abhor change.

So it might take a while to get my head around such things.

@eyeonus

eyeonus commented Jan 13, 2026 via email

Copy link
Copy Markdown
Owner

@Tromador

Copy link
Copy Markdown
Collaborator

forgot to blame bernd and Trom

What am I being repudiated for now? 😱

@eyeonus

eyeonus commented Jan 13, 2026 via email

Copy link
Copy Markdown
Owner

@kfsone

kfsone commented Jan 13, 2026

Copy link
Copy Markdown
Collaborator Author

@bgol @Tromador how do/do you want listing in the pyproject.toml/pip credits; if we're editing the credits to add me, we should absolutely be adding you guys :)

@bgol

bgol commented Jan 13, 2026

Copy link
Copy Markdown
Contributor

I'm ok with just beeing in the README as I have not done anything for the main code base for a while now.

@Tromador

Copy link
Copy Markdown
Collaborator

Stefan 'Tromador' Morrell is fine.

@kfsone kfsone force-pushed the dev/pyproject-tooling branch from 509dec9 to a2c8d9f Compare January 15, 2026 06:10
@kfsone

kfsone commented Jan 15, 2026

Copy link
Copy Markdown
Collaborator Author

Added Stefan and Bernd's names (if ya'll want emails, I'ma let that be on your own heads :)

@Tromador

Copy link
Copy Markdown
Collaborator

Added Stefan and Bernd's names (if ya'll want emails, I'ma let that be on your own heads :)

No thankyou :)

@kfsone kfsone force-pushed the dev/pyproject-tooling branch 3 times, most recently from f704aa3 to c3c4e60 Compare January 18, 2026 02:05
@kfsone

kfsone commented Jan 18, 2026

Copy link
Copy Markdown
Collaborator Author

squashed, want @eyeonus to see the commit message and go-no-go:

uv use is not required after this change, it is simply supported, as well as near-future pip and other package managers that are pyproject based

8x --- cut here --- x8
refactor: uv-driven test, tox, setup

  • sample python-app-uv.yml that should be good-to-go,
    • doesn't need 'setup python', because uv will manage the appropriate python install,
    • .python-version file controls which version of python it uses for the build,
    • the uv-setup step also handles caches for us,
    • tox is much faster with the uv runner (locally: uv run tox --parallel)
  • added uv.lock file (freezes the dependencies for all combinations of versions/platforms),
  • still using 'setup.py' driven build behind uv (uv has it's own build thing called hive, not going there),
  • next natural step is to remove the requirements-* files and rely on pyproject.toml entirely,
  • fixed several deprecation warnings/etc during build
  • gets version number from version.py as before
  • updated credits

to test:

python -m venv .setup-venv
. ./.setup-venv/scripts/activate.ps1
python -m build --out-dir setup-build
deactivate

and/or

uv build --out-dir uv-build
  • NOTE: this version will run both sets of build until we commit to the uv-based github actions,

Follow On Actions:

  • remove requirements files,

  • remove .github/workflows/python-app-uv.yml or,

  • replace .github/workflows/python-app.yml and ensure it has the "publish to pypi" enabled,
    8x --- cut here --- x8

@kfsone kfsone force-pushed the dev/pyproject-tooling branch 2 times, most recently from 2a2f6f9 to 25d363d Compare January 24, 2026 01:01
@kfsone

kfsone commented Jan 24, 2026

Copy link
Copy Markdown
Collaborator Author

out of personal curiosity I'm going to replace the app.yml with the uv version in this branch, and then make a change so I can generate an alpha pypi package (so it should only be visible if explicitly requested). will allow me to see if it works end-to-end.

gh workflow run "Python application (uv)" -f mode=alpha

@kfsone

kfsone commented Jan 24, 2026

Copy link
Copy Markdown
Collaborator Author

This change modernizes the internal package management to center on pyproject.toml,
enabling support for several package managers including 'uv'.

Should not require any changes by developers or end users, but using something like mamba
or uv will significantly reduce wait times when running things like tests/linters etc.

chore: refactor pyproject.toml, setup.cfg, setup.py with modern practices,
chore: tox testing is now uv-driven for speed and flexibility,
- can test multiple python versions even if not installed,
chore: transition dependencies/etc into pyproject.toml following modern python conventions,
docs: add a runbook covering how you can leverage this with uv package manager,
feat: use github uv tooling to build/distribute
this change switches to the uv-based workflow actions for building releases.
leaving both in-place would lead to conflicts.

chore: fixed several deprecation warnings/etc during build,
chore: gets version number from version.py as before,
docs: updated credits,

to test:

```sh
python -m venv .setup-venv
. ./.setup-venv/scripts/activate.ps1
python -m build --out-dir setup-build
deactivate
```

and/or

```sh
uv build --out-dir uv-build
```

Should be similar for other package managers.

Follow on actions:
- remove requirements files,
@kfsone kfsone force-pushed the dev/pyproject-tooling branch from 27e5e52 to fa41e9e Compare January 25, 2026 04:33
@kfsone kfsone merged commit d7946b4 into release/v1 Jan 25, 2026
16 checks passed
@kfsone kfsone deleted the dev/pyproject-tooling branch January 26, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants