From c6fc50822ef1a3f05f78af60711b3fa38932d525 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 19 Mar 2025 15:00:35 -0700 Subject: [PATCH 1/2] add pypi version checker --- bittensor/utils/version.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/bittensor/utils/version.py b/bittensor/utils/version.py index 040a46a311..c8f899d760 100644 --- a/bittensor/utils/version.py +++ b/bittensor/utils/version.py @@ -3,8 +3,9 @@ from typing import Optional import requests -from packaging.version import Version +from packaging.version import Version, InvalidVersion +from bittensor import __name__ from bittensor.core.settings import __version__, PIPADDRESS from bittensor.utils.btlogging import logging @@ -115,3 +116,27 @@ def version_checking(timeout: int = 15): check_version(timeout) except VersionCheckError: logging.exception("Version check failed") + + +def check_latest_version_in_pypi(): + """Check for the latest version of the package on PyPI.""" + package_name = __name__ + url = f"https://pypi.org/pypi/{package_name}/json" + + try: + response = requests.get(url, timeout=5) + response.raise_for_status() + latest_version = response.json()["info"]["version"] + installed_version = __version__ + try: + if Version(installed_version) < Version(latest_version): + print( + f"\nšŸ”” New version is available `{package_name} v.{latest_version}`" + ) + print("šŸ“¦ Use command `pip install --upgrade bittensor` to update.") + except InvalidVersion: + # stay silent if InvalidVersion + pass + except (requests.RequestException, KeyError) as e: + # stay silent if not internet connection or pypi.org issue + pass From 714f4fb0b5cf4d5aa6024fe82aca7e7bd0b84fa9 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 19 Mar 2025 15:01:10 -0700 Subject: [PATCH 2/2] add call --- bittensor/__main__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bittensor/__main__.py b/bittensor/__main__.py index 65734ad99f..f3cc1e6487 100644 --- a/bittensor/__main__.py +++ b/bittensor/__main__.py @@ -3,6 +3,7 @@ import sys from bittensor import __version__ +from bittensor.utils.version import check_latest_version_in_pypi if __name__ == "__main__": if len(sys.argv) > 1 and sys.argv[1] == "certifi": @@ -18,4 +19,5 @@ # Run the script subprocess.run([certifi_script], check=True) else: - print(f"Bittensor SDK version: {__version__}") + print(f"Installed Bittensor SDK version: {__version__}") + check_latest_version_in_pypi()