pybinaryguard 1.0.1__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {pybinaryguard-1.0.1/src/pybinaryguard.egg-info → pybinaryguard-1.0.2}/PKG-INFO +46 -15
  2. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/README.md +39 -9
  3. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/pyproject.toml +9 -6
  4. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/__init__.py +1 -1
  5. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/cli/formatters.py +6 -6
  6. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/cli/main.py +1 -1
  7. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2/src/pybinaryguard.egg-info}/PKG-INFO +46 -15
  8. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_cli.py +1 -1
  9. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/LICENSE +0 -0
  10. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/setup.cfg +0 -0
  11. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/__main__.py +0 -0
  12. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/_compat/__init__.py +0 -0
  13. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/__init__.py +0 -0
  14. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/guard.py +0 -0
  15. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/recommender.py +0 -0
  16. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/schema.py +0 -0
  17. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/simulator.py +0 -0
  18. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/agent/tool_interface.py +0 -0
  19. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/__init__.py +0 -0
  20. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/base.py +0 -0
  21. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/dependency_analyzer.py +0 -0
  22. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/elf_analyzer.py +0 -0
  23. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/symbol_analyzer.py +0 -0
  24. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/analyzers/wheel_analyzer.py +0 -0
  25. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/cli/__init__.py +0 -0
  26. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/cli/commands.py +0 -0
  27. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/diagnostics/__init__.py +0 -0
  28. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/diagnostics/explainer.py +0 -0
  29. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/diagnostics/findings.py +0 -0
  30. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/diagnostics/suggestions.py +0 -0
  31. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/frameworks/__init__.py +0 -0
  32. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/frameworks/onnxruntime.py +0 -0
  33. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/frameworks/pytorch.py +0 -0
  34. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/frameworks/tensorflow.py +0 -0
  35. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/frameworks/tensorrt.py +0 -0
  36. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/models/__init__.py +0 -0
  37. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/models/enums.py +0 -0
  38. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/models/finding.py +0 -0
  39. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/models/package.py +0 -0
  40. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/models/system.py +0 -0
  41. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/__init__.py +0 -0
  42. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/contrib/__init__.py +0 -0
  43. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/contrib/gstreamer.py +0 -0
  44. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/contrib/jetson.py +0 -0
  45. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/contrib/opencv.py +0 -0
  46. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/contrib/tensorrt.py +0 -0
  47. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/hooks.py +0 -0
  48. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/plugins/loader.py +0 -0
  49. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/predictor/__init__.py +0 -0
  50. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/predictor/dependency_graph.py +0 -0
  51. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/predictor/linker_simulator.py +0 -0
  52. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/predictor/predictor.py +0 -0
  53. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/predictor/resolver.py +0 -0
  54. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/__init__.py +0 -0
  55. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/base.py +0 -0
  56. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/board_probe.py +0 -0
  57. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/cpu_probe.py +0 -0
  58. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/glibc_probe.py +0 -0
  59. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/gpu_probe.py +0 -0
  60. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/library_probe.py +0 -0
  61. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/os_probe.py +0 -0
  62. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/python_probe.py +0 -0
  63. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/toolchain_probe.py +0 -0
  64. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/probes/venv_probe.py +0 -0
  65. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/profiles/__init__.py +0 -0
  66. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/profiles/engine.py +0 -0
  67. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/__init__.py +0 -0
  68. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/base.py +0 -0
  69. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/__init__.py +0 -0
  70. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/arch_rules.py +0 -0
  71. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/board_profile_rules.py +0 -0
  72. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/container_rules.py +0 -0
  73. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/cpu_rules.py +0 -0
  74. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/cuda_rules.py +0 -0
  75. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/dependency_rules.py +0 -0
  76. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/framework_rules.py +0 -0
  77. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/glibc_rules.py +0 -0
  78. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/numpy_rules.py +0 -0
  79. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/predictive_rules.py +0 -0
  80. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/python_abi_rules.py +0 -0
  81. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/source_build_rules.py +0 -0
  82. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/builtin/venv_rules.py +0 -0
  83. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/rules/engine.py +0 -0
  84. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/scanner.py +0 -0
  85. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/scoring/__init__.py +0 -0
  86. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/scoring/engine.py +0 -0
  87. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/snapshot/__init__.py +0 -0
  88. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/snapshot/generator.py +0 -0
  89. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/snapshot/lockfile.py +0 -0
  90. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/snapshot/verifier.py +0 -0
  91. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/validators/__init__.py +0 -0
  92. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard/validators/import_validator.py +0 -0
  93. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard.egg-info/SOURCES.txt +0 -0
  94. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard.egg-info/dependency_links.txt +0 -0
  95. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard.egg-info/entry_points.txt +0 -0
  96. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard.egg-info/requires.txt +0 -0
  97. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/src/pybinaryguard.egg-info/top_level.txt +0 -0
  98. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_agent_sdk.py +0 -0
  99. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_diagnostics.py +0 -0
  100. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_elf_analyzer.py +0 -0
  101. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_gap_features.py +0 -0
  102. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_models.py +0 -0
  103. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_plugins.py +0 -0
  104. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_probes.py +0 -0
  105. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_rule_engine.py +0 -0
  106. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_rules.py +0 -0
  107. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_scan_modes.py +0 -0
  108. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_scanner.py +0 -0
  109. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_scoring.py +0 -0
  110. {pybinaryguard-1.0.1 → pybinaryguard-1.0.2}/tests/test_wheel_analyzer.py +0 -0
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybinaryguard
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Binary Compatibility Intelligence for Python — detect incompatibilities before they crash your program
5
- Author-email: S P Pothihai Selvan <po@nuvai.dev>
5
+ Author-email: Pothihai Selvan <po@nuvai.dev>
6
+ Maintainer-email: "Pothihai Selvan (@po-nuvai) — Nuvai AI Solutions" <po@nuvai.dev>
6
7
  License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/Nuvai/pybinaryguard
8
- Project-URL: Repository, https://github.com/Nuvai/pybinaryguard
9
- Project-URL: Issues, https://github.com/Nuvai/pybinaryguard/issues
10
- Project-URL: Changelog, https://github.com/Nuvai/pybinaryguard/blob/main/CHANGELOG.md
8
+ Project-URL: Homepage, https://github.com/po-nuvai/pybinaryguard
9
+ Project-URL: Repository, https://github.com/po-nuvai/pybinaryguard
10
+ Project-URL: Issues, https://github.com/po-nuvai/pybinaryguard/issues
11
+ Project-URL: Changelog, https://github.com/po-nuvai/pybinaryguard/blob/main/CHANGELOG.md
11
12
  Keywords: binary,compatibility,elf,glibc,cuda,diagnostics
12
13
  Classifier: Development Status :: 4 - Beta
13
14
  Classifier: Intended Audience :: Developers
@@ -33,10 +34,12 @@ Requires-Dist: ruff>=0.1.0; extra == "dev"
33
34
  Dynamic: license-file
34
35
 
35
36
  <p align="center">
37
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/v/pybinaryguard?style=for-the-badge&logo=pypi&logoColor=white&color=purple" alt="PyPI"></a>
38
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/dm/pybinaryguard?style=for-the-badge&color=blue" alt="Downloads"></a>
39
+ <a href="https://github.com/po-nuvai/pybinaryguard/stargazers"><img src="https://img.shields.io/github/stars/po-nuvai/pybinaryguard?style=for-the-badge&logo=github&color=yellow" alt="Stars"></a>
36
40
  <img src="https://img.shields.io/badge/python-3.9%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.9+">
37
41
  <img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT License">
38
42
  <img src="https://img.shields.io/badge/platform-linux-orange?style=for-the-badge&logo=linux&logoColor=white" alt="Linux">
39
- <img src="https://img.shields.io/badge/version-1.0.0-purple?style=for-the-badge" alt="v1.0.0">
40
43
  <img src="https://img.shields.io/badge/tests-505%20passing-brightgreen?style=for-the-badge" alt="505 Tests">
41
44
  </p>
42
45
 
@@ -125,12 +128,25 @@ PyBinaryGuard is the **first tool** that correlates your Python version, CPU arc
125
128
 
126
129
  ## Quick Start
127
130
 
131
+ ### Install
132
+
128
133
  ```bash
129
- # Clone and install
130
- git clone https://github.com/vikash-nuvai/pybinaryguard.git
131
- cd pybinaryguard
132
- pip install -e .
134
+ # Recommended isolated CLI install (Ubuntu 24.04+, Debian 12+, etc.)
135
+ pipx install pybinaryguard
136
+
137
+ # Or per-user install
138
+ pip install --user pybinaryguard
139
+
140
+ # Or classic pip (inside a venv)
141
+ pip install pybinaryguard
142
+ ```
143
+
144
+ > **Note:** On modern Linux distros (Ubuntu 24.04+, Debian 12+), system-wide
145
+ > `pip install` is blocked by PEP 668. Use `pipx` or a virtual environment.
133
146
 
147
+ ### Use
148
+
149
+ ```bash
134
150
  # Run a full scan
135
151
  pybinaryguard scan
136
152
 
@@ -144,6 +160,15 @@ pybinaryguard scan --fast
144
160
  pybinaryguard scan --deep
145
161
  ```
146
162
 
163
+ ### Install from source (for development)
164
+
165
+ ```bash
166
+ git clone https://github.com/po-nuvai/pybinaryguard.git
167
+ cd pybinaryguard
168
+ python -m venv .venv && source .venv/bin/activate
169
+ pip install -e ".[dev]"
170
+ ```
171
+
147
172
  ---
148
173
 
149
174
  ## Features
@@ -813,7 +838,7 @@ pybinaryguard/
813
838
  | |-- commands.py # Command handlers
814
839
  | +-- formatters.py # Output formatting (table/json/minimal)
815
840
  |
816
- |-- tests/ # 450 tests
841
+ |-- tests/ # 505 tests
817
842
  |-- docs/ # Documentation
818
843
  +-- examples/ # Usage examples
819
844
  ```
@@ -850,7 +875,7 @@ pybinaryguard/
850
875
  ## Testing
851
876
 
852
877
  ```bash
853
- # Run all tests (450 tests)
878
+ # Run all tests (505 tests)
854
879
  python -m pytest tests/ -v
855
880
 
856
881
  # Run with coverage
@@ -866,8 +891,14 @@ python -m pytest tests/test_agent_sdk.py -v # Agent SDK
866
891
 
867
892
  ## Author
868
893
 
869
- **S P Pothihai Selvan** (Po-nuvai)
870
- Applied Research Scientist @ [Nuvai AI Solution Pvt Ltd](https://nuvai.dev)
894
+ **Pothihai Selvan** — [@po-nuvai](https://github.com/po-nuvai)
895
+ Applied Research Scientist at [Nuvai AI Solutions](https://nuvai.dev)
896
+
897
+ Built PyBinaryGuard to solve the bug that once cost him weeks of debugging on an NVIDIA Jetson TX2 — see the [Origin Story](#origin-story) at the top of this README for the full backstory.
898
+
899
+ - **GitHub:** [github.com/po-nuvai](https://github.com/po-nuvai)
900
+ - **Email:** [po@nuvai.dev](mailto:po@nuvai.dev)
901
+ - **Company:** [Nuvai AI Solutions](https://nuvai.dev) — Applied AI research and developer tooling
871
902
 
872
903
  ---
873
904
 
@@ -1,8 +1,10 @@
1
1
  <p align="center">
2
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/v/pybinaryguard?style=for-the-badge&logo=pypi&logoColor=white&color=purple" alt="PyPI"></a>
3
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/dm/pybinaryguard?style=for-the-badge&color=blue" alt="Downloads"></a>
4
+ <a href="https://github.com/po-nuvai/pybinaryguard/stargazers"><img src="https://img.shields.io/github/stars/po-nuvai/pybinaryguard?style=for-the-badge&logo=github&color=yellow" alt="Stars"></a>
2
5
  <img src="https://img.shields.io/badge/python-3.9%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.9+">
3
6
  <img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT License">
4
7
  <img src="https://img.shields.io/badge/platform-linux-orange?style=for-the-badge&logo=linux&logoColor=white" alt="Linux">
5
- <img src="https://img.shields.io/badge/version-1.0.0-purple?style=for-the-badge" alt="v1.0.0">
6
8
  <img src="https://img.shields.io/badge/tests-505%20passing-brightgreen?style=for-the-badge" alt="505 Tests">
7
9
  </p>
8
10
 
@@ -91,12 +93,25 @@ PyBinaryGuard is the **first tool** that correlates your Python version, CPU arc
91
93
 
92
94
  ## Quick Start
93
95
 
96
+ ### Install
97
+
94
98
  ```bash
95
- # Clone and install
96
- git clone https://github.com/vikash-nuvai/pybinaryguard.git
97
- cd pybinaryguard
98
- pip install -e .
99
+ # Recommended isolated CLI install (Ubuntu 24.04+, Debian 12+, etc.)
100
+ pipx install pybinaryguard
101
+
102
+ # Or per-user install
103
+ pip install --user pybinaryguard
104
+
105
+ # Or classic pip (inside a venv)
106
+ pip install pybinaryguard
107
+ ```
108
+
109
+ > **Note:** On modern Linux distros (Ubuntu 24.04+, Debian 12+), system-wide
110
+ > `pip install` is blocked by PEP 668. Use `pipx` or a virtual environment.
99
111
 
112
+ ### Use
113
+
114
+ ```bash
100
115
  # Run a full scan
101
116
  pybinaryguard scan
102
117
 
@@ -110,6 +125,15 @@ pybinaryguard scan --fast
110
125
  pybinaryguard scan --deep
111
126
  ```
112
127
 
128
+ ### Install from source (for development)
129
+
130
+ ```bash
131
+ git clone https://github.com/po-nuvai/pybinaryguard.git
132
+ cd pybinaryguard
133
+ python -m venv .venv && source .venv/bin/activate
134
+ pip install -e ".[dev]"
135
+ ```
136
+
113
137
  ---
114
138
 
115
139
  ## Features
@@ -779,7 +803,7 @@ pybinaryguard/
779
803
  | |-- commands.py # Command handlers
780
804
  | +-- formatters.py # Output formatting (table/json/minimal)
781
805
  |
782
- |-- tests/ # 450 tests
806
+ |-- tests/ # 505 tests
783
807
  |-- docs/ # Documentation
784
808
  +-- examples/ # Usage examples
785
809
  ```
@@ -816,7 +840,7 @@ pybinaryguard/
816
840
  ## Testing
817
841
 
818
842
  ```bash
819
- # Run all tests (450 tests)
843
+ # Run all tests (505 tests)
820
844
  python -m pytest tests/ -v
821
845
 
822
846
  # Run with coverage
@@ -832,8 +856,14 @@ python -m pytest tests/test_agent_sdk.py -v # Agent SDK
832
856
 
833
857
  ## Author
834
858
 
835
- **S P Pothihai Selvan** (Po-nuvai)
836
- Applied Research Scientist @ [Nuvai AI Solution Pvt Ltd](https://nuvai.dev)
859
+ **Pothihai Selvan** — [@po-nuvai](https://github.com/po-nuvai)
860
+ Applied Research Scientist at [Nuvai AI Solutions](https://nuvai.dev)
861
+
862
+ Built PyBinaryGuard to solve the bug that once cost him weeks of debugging on an NVIDIA Jetson TX2 — see the [Origin Story](#origin-story) at the top of this README for the full backstory.
863
+
864
+ - **GitHub:** [github.com/po-nuvai](https://github.com/po-nuvai)
865
+ - **Email:** [po@nuvai.dev](mailto:po@nuvai.dev)
866
+ - **Company:** [Nuvai AI Solutions](https://nuvai.dev) — Applied AI research and developer tooling
837
867
 
838
868
  ---
839
869
 
@@ -4,14 +4,17 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pybinaryguard"
7
- version = "1.0.1"
7
+ version = "1.0.2"
8
8
  description = "Binary Compatibility Intelligence for Python — detect incompatibilities before they crash your program"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.9"
12
12
  dependencies = []
13
13
  authors = [
14
- {name = "S P Pothihai Selvan", email = "po@nuvai.dev"},
14
+ {name = "Pothihai Selvan", email = "po@nuvai.dev"},
15
+ ]
16
+ maintainers = [
17
+ {name = "Pothihai Selvan (@po-nuvai) — Nuvai AI Solutions", email = "po@nuvai.dev"},
15
18
  ]
16
19
  classifiers = [
17
20
  "Development Status :: 4 - Beta",
@@ -29,10 +32,10 @@ classifiers = [
29
32
  keywords = ["binary", "compatibility", "elf", "glibc", "cuda", "diagnostics"]
30
33
 
31
34
  [project.urls]
32
- Homepage = "https://github.com/Nuvai/pybinaryguard"
33
- Repository = "https://github.com/Nuvai/pybinaryguard"
34
- Issues = "https://github.com/Nuvai/pybinaryguard/issues"
35
- Changelog = "https://github.com/Nuvai/pybinaryguard/blob/main/CHANGELOG.md"
35
+ Homepage = "https://github.com/po-nuvai/pybinaryguard"
36
+ Repository = "https://github.com/po-nuvai/pybinaryguard"
37
+ Issues = "https://github.com/po-nuvai/pybinaryguard/issues"
38
+ Changelog = "https://github.com/po-nuvai/pybinaryguard/blob/main/CHANGELOG.md"
36
39
 
37
40
  [project.optional-dependencies]
38
41
  full = ["pyelftools>=0.29"]
@@ -15,7 +15,7 @@ Quick start::
15
15
 
16
16
  from __future__ import annotations
17
17
 
18
- __version__ = "1.0.1"
18
+ __version__ = "1.0.2"
19
19
 
20
20
  from pybinaryguard.models.enums import ScanMode, Severity
21
21
  from pybinaryguard.models.finding import Finding, ScanReport
@@ -208,7 +208,7 @@ class TableFormatter(FormatterBase):
208
208
 
209
209
  # Header
210
210
  lines.append(
211
- f"{c.BOLD}PyBinaryGuard v1.0.0 \u2014 Binary Compatibility Scanner{c.RESET}"
211
+ f"{c.BOLD}PyBinaryGuard v1.0.2 \u2014 Binary Compatibility Scanner{c.RESET}"
212
212
  )
213
213
  lines.append(f"{c.DIM}{_HEADER_LINE}{c.RESET}")
214
214
  lines.append("")
@@ -350,7 +350,7 @@ class TableFormatter(FormatterBase):
350
350
  lines: List[str] = []
351
351
 
352
352
  lines.append(
353
- f"{c.BOLD}PyBinaryGuard v1.0.0 \u2014 System Profile{c.RESET}"
353
+ f"{c.BOLD}PyBinaryGuard v1.0.2 \u2014 System Profile{c.RESET}"
354
354
  )
355
355
  lines.append(f"{c.DIM}{_HEADER_LINE}{c.RESET}")
356
356
  lines.append("")
@@ -505,7 +505,7 @@ class JSONFormatter(FormatterBase):
505
505
  scan_data["score_breakdown"] = report.score_breakdown.as_dict()
506
506
 
507
507
  output: Dict[str, Any] = {
508
- "version": "1.0.0",
508
+ "version": "1.0.2",
509
509
  "profile": self._profile_dict(profile),
510
510
  "scan": scan_data,
511
511
  "findings": [f.as_dict() for f in report.findings],
@@ -521,7 +521,7 @@ class JSONFormatter(FormatterBase):
521
521
  ) -> str:
522
522
  """Format check findings as JSON."""
523
523
  output: Dict[str, Any] = {
524
- "version": "1.0.0",
524
+ "version": "1.0.2",
525
525
  "package": package,
526
526
  "findings": [f.as_dict() for f in findings],
527
527
  "summary": {
@@ -536,7 +536,7 @@ class JSONFormatter(FormatterBase):
536
536
  def format_profile(self, profile: SystemProfile) -> str:
537
537
  """Format a system profile as JSON."""
538
538
  output: Dict[str, Any] = {
539
- "version": "1.0.0",
539
+ "version": "1.0.2",
540
540
  "profile": self._profile_dict(profile),
541
541
  }
542
542
  return json.dumps(output, indent=2, default=str)
@@ -544,7 +544,7 @@ class JSONFormatter(FormatterBase):
544
544
  def format_doctor(self, diagnosis: Dict[str, Any]) -> str:
545
545
  """Format a doctor result as JSON."""
546
546
  output: Dict[str, Any] = {
547
- "version": "1.0.0",
547
+ "version": "1.0.2",
548
548
  "diagnosis": {},
549
549
  }
550
550
  if "error" in diagnosis:
@@ -95,7 +95,7 @@ def _build_parser() -> argparse.ArgumentParser:
95
95
  parser.add_argument(
96
96
  "--version",
97
97
  action="version",
98
- version="%(prog)s 1.0.0",
98
+ version="%(prog)s 1.0.2",
99
99
  )
100
100
 
101
101
  subparsers = parser.add_subparsers(dest="command", help="Available commands")
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybinaryguard
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Binary Compatibility Intelligence for Python — detect incompatibilities before they crash your program
5
- Author-email: S P Pothihai Selvan <po@nuvai.dev>
5
+ Author-email: Pothihai Selvan <po@nuvai.dev>
6
+ Maintainer-email: "Pothihai Selvan (@po-nuvai) — Nuvai AI Solutions" <po@nuvai.dev>
6
7
  License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/Nuvai/pybinaryguard
8
- Project-URL: Repository, https://github.com/Nuvai/pybinaryguard
9
- Project-URL: Issues, https://github.com/Nuvai/pybinaryguard/issues
10
- Project-URL: Changelog, https://github.com/Nuvai/pybinaryguard/blob/main/CHANGELOG.md
8
+ Project-URL: Homepage, https://github.com/po-nuvai/pybinaryguard
9
+ Project-URL: Repository, https://github.com/po-nuvai/pybinaryguard
10
+ Project-URL: Issues, https://github.com/po-nuvai/pybinaryguard/issues
11
+ Project-URL: Changelog, https://github.com/po-nuvai/pybinaryguard/blob/main/CHANGELOG.md
11
12
  Keywords: binary,compatibility,elf,glibc,cuda,diagnostics
12
13
  Classifier: Development Status :: 4 - Beta
13
14
  Classifier: Intended Audience :: Developers
@@ -33,10 +34,12 @@ Requires-Dist: ruff>=0.1.0; extra == "dev"
33
34
  Dynamic: license-file
34
35
 
35
36
  <p align="center">
37
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/v/pybinaryguard?style=for-the-badge&logo=pypi&logoColor=white&color=purple" alt="PyPI"></a>
38
+ <a href="https://pypi.org/project/pybinaryguard/"><img src="https://img.shields.io/pypi/dm/pybinaryguard?style=for-the-badge&color=blue" alt="Downloads"></a>
39
+ <a href="https://github.com/po-nuvai/pybinaryguard/stargazers"><img src="https://img.shields.io/github/stars/po-nuvai/pybinaryguard?style=for-the-badge&logo=github&color=yellow" alt="Stars"></a>
36
40
  <img src="https://img.shields.io/badge/python-3.9%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.9+">
37
41
  <img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT License">
38
42
  <img src="https://img.shields.io/badge/platform-linux-orange?style=for-the-badge&logo=linux&logoColor=white" alt="Linux">
39
- <img src="https://img.shields.io/badge/version-1.0.0-purple?style=for-the-badge" alt="v1.0.0">
40
43
  <img src="https://img.shields.io/badge/tests-505%20passing-brightgreen?style=for-the-badge" alt="505 Tests">
41
44
  </p>
42
45
 
@@ -125,12 +128,25 @@ PyBinaryGuard is the **first tool** that correlates your Python version, CPU arc
125
128
 
126
129
  ## Quick Start
127
130
 
131
+ ### Install
132
+
128
133
  ```bash
129
- # Clone and install
130
- git clone https://github.com/vikash-nuvai/pybinaryguard.git
131
- cd pybinaryguard
132
- pip install -e .
134
+ # Recommended isolated CLI install (Ubuntu 24.04+, Debian 12+, etc.)
135
+ pipx install pybinaryguard
136
+
137
+ # Or per-user install
138
+ pip install --user pybinaryguard
139
+
140
+ # Or classic pip (inside a venv)
141
+ pip install pybinaryguard
142
+ ```
143
+
144
+ > **Note:** On modern Linux distros (Ubuntu 24.04+, Debian 12+), system-wide
145
+ > `pip install` is blocked by PEP 668. Use `pipx` or a virtual environment.
133
146
 
147
+ ### Use
148
+
149
+ ```bash
134
150
  # Run a full scan
135
151
  pybinaryguard scan
136
152
 
@@ -144,6 +160,15 @@ pybinaryguard scan --fast
144
160
  pybinaryguard scan --deep
145
161
  ```
146
162
 
163
+ ### Install from source (for development)
164
+
165
+ ```bash
166
+ git clone https://github.com/po-nuvai/pybinaryguard.git
167
+ cd pybinaryguard
168
+ python -m venv .venv && source .venv/bin/activate
169
+ pip install -e ".[dev]"
170
+ ```
171
+
147
172
  ---
148
173
 
149
174
  ## Features
@@ -813,7 +838,7 @@ pybinaryguard/
813
838
  | |-- commands.py # Command handlers
814
839
  | +-- formatters.py # Output formatting (table/json/minimal)
815
840
  |
816
- |-- tests/ # 450 tests
841
+ |-- tests/ # 505 tests
817
842
  |-- docs/ # Documentation
818
843
  +-- examples/ # Usage examples
819
844
  ```
@@ -850,7 +875,7 @@ pybinaryguard/
850
875
  ## Testing
851
876
 
852
877
  ```bash
853
- # Run all tests (450 tests)
878
+ # Run all tests (505 tests)
854
879
  python -m pytest tests/ -v
855
880
 
856
881
  # Run with coverage
@@ -866,8 +891,14 @@ python -m pytest tests/test_agent_sdk.py -v # Agent SDK
866
891
 
867
892
  ## Author
868
893
 
869
- **S P Pothihai Selvan** (Po-nuvai)
870
- Applied Research Scientist @ [Nuvai AI Solution Pvt Ltd](https://nuvai.dev)
894
+ **Pothihai Selvan** — [@po-nuvai](https://github.com/po-nuvai)
895
+ Applied Research Scientist at [Nuvai AI Solutions](https://nuvai.dev)
896
+
897
+ Built PyBinaryGuard to solve the bug that once cost him weeks of debugging on an NVIDIA Jetson TX2 — see the [Origin Story](#origin-story) at the top of this README for the full backstory.
898
+
899
+ - **GitHub:** [github.com/po-nuvai](https://github.com/po-nuvai)
900
+ - **Email:** [po@nuvai.dev](mailto:po@nuvai.dev)
901
+ - **Company:** [Nuvai AI Solutions](https://nuvai.dev) — Applied AI research and developer tooling
871
902
 
872
903
  ---
873
904
 
@@ -216,7 +216,7 @@ class TestFormatterOutput:
216
216
  import json
217
217
  data = json.loads(output)
218
218
  assert "profile" in data
219
- assert data["version"] == "1.0.0"
219
+ assert data["version"] == "1.0.2"
220
220
 
221
221
  def test_json_formatter_format_check_no_findings(self) -> None:
222
222
  from pybinaryguard.models.system import SystemProfile
File without changes
File without changes