Packages
snakepit
0.8.9
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
53 Versions
Jump to
Current section
53 Versions
Compare versions
9
files changed
+191
additions
-121
deletions
| @@ -7,6 +7,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 7 7 | |
| 8 8 | ## [Unreleased] |
| 9 9 | |
| 10 | + ## [0.8.9] - 2026-01-01 |
| 11 | + |
| 12 | + ### Breaking Changes |
| 13 | + |
| 14 | + - **uv is now required** - pip support has been removed. Snakepit now requires [uv](https://docs.astral.sh/uv/) for Python package management. |
| 15 | + - Install uv: `curl -LsSf https://astral.sh/uv/install.sh | sh` |
| 16 | + - Or via Homebrew: `brew install uv` |
| 17 | + - The `:installer` config option has been removed (was `:auto`, `:uv`, or `:pip`) |
| 18 | + - uv provides 10-100x faster package operations and more reliable version resolution |
| 19 | + |
| 20 | + ### Fixed |
| 21 | + |
| 22 | + - **Version checking now validates constraints** - `PythonPackages.check_installed/2` now properly verifies that installed package versions satisfy the version constraints in requirements (e.g., `grpcio>=1.76.0`). |
| 23 | + - Previously, only package existence was checked, not version satisfaction |
| 24 | + - This caused runtime errors when outdated packages were installed (e.g., grpcio 1.67.1 when >=1.76.0 was required) |
| 25 | + - Now uses `uv pip install --dry-run` for accurate PEP-440 version checking |
| 26 | + - Packages that need upgrading are correctly identified as "missing" and reinstalled |
| 27 | + |
| 28 | + - **Bootstrap now uses quiet pip install** - Reduced noise from "Requirement already satisfied" messages during `mix test --include python_integration` |
| 29 | + |
| 30 | + - **Added startup feedback** - Shows "🐍 Checking Python package requirements..." during app startup in dev/test when checking packages (once per BEAM session) |
| 31 | + |
| 32 | + ### Changed |
| 33 | + |
| 34 | + - Removed unused configuration keys from `config/config.exs`, `config/test.exs`, and `config/grpc_test.exs` to trim dead config surface (legacy worker timeouts and unused grpc_test flags) |
| 35 | + - Virtual environments are now created using `uv venv` for consistency with package management |
| 36 | + - Simplified `PythonPackages` module by removing all pip-specific code paths |
| 37 | + |
| 10 38 | ## [0.8.8] - 2025-12-31 |
| 11 39 | |
| 12 40 | ### Added |
| @@ -399,7 +427,6 @@ config :snakepit, log_level: :info | |
| 399 427 | - `Snakepit.PythonPackages.ensure!/2` for provisioning required packages. |
| 400 428 | - `Snakepit.PythonPackages.check_installed/2` for verifying package presence. |
| 401 429 | - `Snakepit.PythonPackages.lock_metadata/2` for lockfile package metadata. |
| 402 | - - `Snakepit.PythonPackages.installer/0` for reporting the active installer. |
| 403 430 | - `Snakepit.PythonPackages.install!/2` for direct requirement installs. |
| 404 431 | |
| 405 432 | ## [0.7.4] - 2025-12-25 |
| @@ -31,7 +31,7 @@ Add `snakepit` to your dependencies in `mix.exs`: | |
| 31 31 | ```elixir |
| 32 32 | def deps do |
| 33 33 | [ |
| 34 | - {:snakepit, "~> 0.8.8"} |
| 34 | + {:snakepit, "~> 0.8.9"} |
| 35 35 | ] |
| 36 36 | end |
| 37 37 | ``` |
| @@ -44,6 +44,23 @@ mix snakepit.setup # Install Python dependencies and generate gRPC stubs | |
| 44 44 | mix snakepit.doctor # Verify environment is correctly configured |
| 45 45 | ``` |
| 46 46 | |
| 47 | + ### Using with SnakeBridge (Recommended) |
| 48 | + |
| 49 | + For higher-level Python integration with compile-time type generation, use [SnakeBridge](https://hex.pm/packages/snakebridge) instead of snakepit directly. SnakeBridge handles Python environment setup automatically at compile time. |
| 50 | + |
| 51 | + ```elixir |
| 52 | + def deps do |
| 53 | + [{:snakebridge, "~> 0.7.9"}] |
| 54 | + end |
| 55 | + |
| 56 | + def project do |
| 57 | + [ |
| 58 | + ... |
| 59 | + compilers: [:snakebridge] ++ Mix.compilers() |
| 60 | + ] |
| 61 | + end |
| 62 | + ``` |
| 63 | + |
| 47 64 | ## Quick Start |
| 48 65 | |
| 49 66 | ```elixir |
| @@ -632,8 +649,22 @@ mix run examples/hardware_detection.exs | |
| 632 649 | - Elixir 1.18+ |
| 633 650 | - Erlang/OTP 27+ |
| 634 651 | - Python 3.9+ (3.13+ for thread profile) |
| 652 | + - [uv](https://docs.astral.sh/uv/) - Fast Python package manager (required) |
| 635 653 | - gRPC Python packages (`grpcio`, `grpcio-tools`) |
| 636 654 | |
| 655 | + ### Installing uv |
| 656 | + |
| 657 | + ```bash |
| 658 | + # macOS/Linux |
| 659 | + curl -LsSf https://astral.sh/uv/install.sh | sh |
| 660 | + |
| 661 | + # Windows |
| 662 | + powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" |
| 663 | + |
| 664 | + # Or via Homebrew |
| 665 | + brew install uv |
| 666 | + ``` |
| 667 | + |
| 637 668 | ## License |
| 638 669 | |
| 639 670 | MIT License - see [LICENSE](LICENSE) for details. |
| @@ -61,7 +61,7 @@ Add Snakepit as a dependency in your `mix.exs`: | |
| 61 61 | # mix.exs |
| 62 62 | def deps do |
| 63 63 | [ |
| 64 | - {:snakepit, "~> 0.8.8"} |
| 64 | + {:snakepit, "~> 0.8.9"} |
| 65 65 | ] |
| 66 66 | end |
| 67 67 | ``` |
| @@ -4,7 +4,7 @@ | |
| 4 4 | {<<"Documentation">>,<<"https://hexdocs.pm/snakepit">>}, |
| 5 5 | {<<"GitHub">>,<<"https://github.com/nshkrdotcom/snakepit">>}]}. |
| 6 6 | {<<"name">>,<<"snakepit">>}. |
| 7 | - {<<"version">>,<<"0.8.8">>}. |
| 7 | + {<<"version">>,<<"0.8.9">>}. |
| 8 8 | {<<"description">>, |
| 9 9 | <<"High-performance pooler and session manager for external language integrations.\nSupports Python, Node.js, Ruby, and more with gRPC streaming, session management,\nand production-ready process cleanup.">>}. |
| 10 10 | {<<"elixir">>,<<"~> 1.18">>}. |
| @@ -77,11 +77,11 @@ | |
| 77 77 | <<"lib/snakepit/crash_barrier.ex">>,<<"lib/snakepit/worker">>, |
| 78 78 | <<"lib/snakepit/worker/lifecycle_config.ex">>, |
| 79 79 | <<"lib/snakepit/worker/taint_registry.ex">>, |
| 80 | - <<"lib/snakepit/worker/lifecycle_manager.ex">>,<<"priv/proto">>, |
| 81 | - <<"priv/proto/README.md">>,<<"priv/proto/snakepit_bridge.proto">>, |
| 82 | - <<"priv/python/__init__.py">>,<<"priv/python/grpc_server.py">>, |
| 83 | - <<"priv/python/grpc_server_threaded.py">>,<<"priv/python/setup.py">>, |
| 84 | - <<"priv/python/snakepit_bridge_pb2.py">>, |
| 80 | + <<"lib/snakepit/worker/lifecycle_manager.ex">>,<<"lib/repomix-output.xml">>, |
| 81 | + <<"priv/proto">>,<<"priv/proto/README.md">>, |
| 82 | + <<"priv/proto/snakepit_bridge.proto">>,<<"priv/python/__init__.py">>, |
| 83 | + <<"priv/python/grpc_server.py">>,<<"priv/python/grpc_server_threaded.py">>, |
| 84 | + <<"priv/python/setup.py">>,<<"priv/python/snakepit_bridge_pb2.py">>, |
| 85 85 | <<"priv/python/snakepit_bridge_pb2_grpc.py">>, |
| 86 86 | <<"priv/python/requirements.txt">>, |
| 87 87 | <<"priv/python/snakepit_bridge/__init__.py">>, |
unknownlib/repomix-output.xml
File is too large to be displayed (100 KB limit).
Loading more files…