diff --git a/docs/devenv.nix b/docs/devenv.nix index 1663305e5e..c371d87e31 100644 --- a/docs/devenv.nix +++ b/docs/devenv.nix @@ -22,6 +22,7 @@ # For developing the mkdocs-based documentation python = { enable = true; + package = pkgs.python3.withPackages (ps: [ ps.matplotlib ]); # Use a faster package manager uv.enable = true; venv = { diff --git a/docs/src/reference/options.md b/docs/src/reference/options.md index 9ea2679712..e732a25d6c 100644 --- a/docs/src/reference/options.md +++ b/docs/src/reference/options.md @@ -15935,7 +15935,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -15956,7 +15956,7 @@ package ` pkgs.python3 ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -15983,7 +15983,7 @@ string ` "./directory" ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16010,7 +16010,7 @@ list of absolute path ``` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16035,7 +16035,36 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) + + + +## languages.python.patches.buildEnv.enable + + + +Whether to apply fixes to Python’s ` buildEnv ` for correct runtime initialization: + + - Executables use ` --inherit-argv0 ` and ` --resolve-argv0 ` to ensure Python initializes with correct ` sys.prefix ` and ` sys.base_prefix ` + - Python package scripts are unwrapped to invoke the environment’s interpreter directly + +Without these fixes, venvs cannot access environment packages via ` --system-site-packages `. + +Enabled by default. +Newer nixpkgs releases may include upstream fixes that make this patch obsolete. + + + +*Type:* +boolean + + + +*Default:* +` true ` + +*Declared by:* + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16061,7 +16090,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16082,7 +16111,7 @@ package ` pkgs.poetry ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16103,7 +16132,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16129,7 +16158,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16150,7 +16179,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16171,7 +16200,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16192,7 +16221,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16213,7 +16242,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16234,7 +16263,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16255,7 +16284,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16276,7 +16305,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16297,7 +16326,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16318,7 +16347,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16339,7 +16368,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16360,7 +16389,7 @@ one of “no”, “little”, “more”, “debug” ` "no" ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16386,7 +16415,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16407,7 +16436,7 @@ package ` pkgs.uv ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16433,7 +16462,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16454,7 +16483,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16475,7 +16504,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16496,7 +16525,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16517,7 +16546,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16538,7 +16567,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16559,7 +16588,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16580,7 +16609,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16606,7 +16635,7 @@ boolean ` true ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16627,7 +16656,7 @@ boolean ` false ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16649,7 +16678,7 @@ null or strings concatenated with “\\n” or absolute path ` null ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -16676,7 +16705,7 @@ null or string ` "3.11 or 3.11.2" ` *Declared by:* - - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) diff --git a/docs/src/supported-languages/python.md b/docs/src/supported-languages/python.md index fbfb1b9c3c..dc75773aa4 100644 --- a/docs/src/supported-languages/python.md +++ b/docs/src/supported-languages/python.md @@ -27,7 +27,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -48,7 +48,7 @@ package ` pkgs.python3 ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -73,7 +73,7 @@ string ` "./directory" ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -100,7 +100,7 @@ list of absolute path ``` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -125,7 +125,36 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) + + + +### languages\.python\.patches\.buildEnv\.enable + + + +Whether to apply fixes to Python’s ` buildEnv ` for correct runtime initialization: + + - Executables use ` --inherit-argv0 ` and ` --resolve-argv0 ` to ensure Python initializes with correct ` sys.prefix ` and ` sys.base_prefix ` + - Python package scripts are unwrapped to invoke the environment’s interpreter directly + +Without these fixes, venvs cannot access environment packages via ` --system-site-packages `\. + +Enabled by default\. +Newer nixpkgs releases may include upstream fixes that make this patch obsolete\. + + + +*Type:* +boolean + + + +*Default:* +` true ` + +*Declared by:* + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -151,7 +180,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -172,7 +201,7 @@ package ` pkgs.poetry ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -193,7 +222,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -219,7 +248,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -240,7 +269,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -261,7 +290,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -282,7 +311,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -303,7 +332,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -324,7 +353,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -345,7 +374,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -366,7 +395,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -387,7 +416,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -408,7 +437,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -429,7 +458,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -450,7 +479,7 @@ one of “no”, “little”, “more”, “debug” ` "no" ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -476,7 +505,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -497,7 +526,7 @@ package ` pkgs.uv ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -523,7 +552,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -544,7 +573,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -565,7 +594,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -586,7 +615,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -607,7 +636,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -628,7 +657,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -649,7 +678,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -670,7 +699,7 @@ list of string ` [ ] ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -696,7 +725,7 @@ boolean ` true ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -717,7 +746,7 @@ boolean ` false ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -739,7 +768,7 @@ null or strings concatenated with “\\n” or absolute path ` null ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) @@ -766,4 +795,4 @@ null or string ` "3.11 or 3.11.2" ` *Declared by:* - - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python\.nix](https://github.com/cachix/devenv/blob/main/src/modules/languages/python.nix) + - [https://github\.com/cachix/devenv/blob/main/src/modules/languages/python](https://github.com/cachix/devenv/blob/main/src/modules/languages/python) diff --git a/src/modules/languages/python.nix b/src/modules/languages/python/default.nix similarity index 81% rename from src/modules/languages/python.nix rename to src/modules/languages/python/default.nix index 840b57d44c..f241f545b8 100644 --- a/src/modules/languages/python.nix +++ b/src/modules/languages/python/default.nix @@ -6,31 +6,14 @@ let cfg = config.languages.python; - libraries = lib.makeLibraryPath ( + + libraries = cfg.libraries ++ (lib.optional cfg.manylinux.enable pkgs.pythonManylinuxPackages.manylinux2014Package) # see https://matrix.to/#/!kjdutkOsheZdjqYmqp:nixos.org/$XJ5CO4bKMevYzZq_rrNo64YycknVFJIJTy6hVCJjRlA?via=nixos.org&via=matrix.org&via=nixos.dev - ++ [ pkgs.stdenv.cc.cc.lib ] - ); + ++ [ pkgs.stdenv.cc.cc.lib ]; readlink = "${pkgs.coreutils}/bin/readlink -f "; - package = pkgs.callPackage ../../python-wrapper.nix { - python = cfg.package; - requiredPythonModules = cfg.package.pkgs.requiredPythonModules; - makeWrapperArgs = - [ - "--prefix" - "LD_LIBRARY_PATH" - ":" - libraries - ] - ++ lib.optionals pkgs.stdenv.isDarwin [ - "--prefix" - "DYLD_LIBRARY_PATH" - ":" - libraries - ]; - }; requirements = pkgs.writeText "requirements.txt" ( toString ( @@ -57,7 +40,7 @@ let VENV_PATH="${config.env.DEVENV_STATE}/venv" - profile_python="$(${readlink} ${package.interpreter})" + profile_python="$(${readlink} ${cfg.package.interpreter})" devenv_interpreter_path="$(${pkgs.coreutils}/bin/cat "$VENV_PATH/.devenv_interpreter" 2> /dev/null || echo false )" venv_python="$(${readlink} "$devenv_interpreter_path")" @@ -74,20 +57,20 @@ let ${ if cfg.uv.enable then '' - echo uv venv -p ${package.interpreter} "$VENV_PATH" - uv venv -p ${package.interpreter} "$VENV_PATH" + echo uv venv -p ${cfg.package.interpreter} "$VENV_PATH" + uv venv -p ${cfg.package.interpreter} "$VENV_PATH" '' else '' - echo ${package.interpreter} -m venv ${ + echo ${cfg.package.interpreter} -m venv ${ if builtins.isNull cfg.version || lib.versionAtLeast cfg.version "3.9" then "--upgrade-deps" else "" } "$VENV_PATH" - ${package.interpreter} -m venv ${ + ${cfg.package.interpreter} -m venv ${ if builtins.isNull cfg.version || lib.versionAtLeast cfg.version "3.9" then "--upgrade-deps" else "" } "$VENV_PATH" '' } - echo "${package.interpreter}" > "$VENV_PATH/.devenv_interpreter" + echo "${cfg.package.interpreter}" > "$VENV_PATH/.devenv_interpreter" fi source "$VENV_PATH"/bin/activate @@ -174,7 +157,7 @@ let # Avoid running "uv sync" for every shell. # Only run it when the "pyproject.toml" file or Python interpreter has changed. - local ACTUAL_UV_CHECKSUM="${package.interpreter}:$(${pkgs.nix}/bin/nix-hash --type sha256 pyproject.toml):''${UV_SYNC_COMMAND[@]}" + local ACTUAL_UV_CHECKSUM="${cfg.package.interpreter}:$(${pkgs.nix}/bin/nix-hash --type sha256 pyproject.toml):''${UV_SYNC_COMMAND[@]}" local UV_CHECKSUM_FILE="$VENV_PATH/uv.sync.checksum" if [ -f "$UV_CHECKSUM_FILE" ] then @@ -224,7 +207,7 @@ let unset VIRTUAL_ENV # Make sure poetry's venv uses the configured Python executable. - ${cfg.poetry.package}/bin/poetry env use --no-interaction --quiet ${package.interpreter} + ${cfg.poetry.package}/bin/poetry env use --no-interaction --quiet ${cfg.package.interpreter} } function _devenv_poetry_install @@ -233,7 +216,7 @@ let # Avoid running "poetry install" for every shell. # Only run it when the "poetry.lock" file or Python interpreter has changed. # We do this by storing the interpreter path and a hash of "poetry.lock" in venv. - local ACTUAL_POETRY_CHECKSUM="${package.interpreter}:$(${pkgs.nix}/bin/nix-hash --type sha256 pyproject.toml):$(${pkgs.nix}/bin/nix-hash --type sha256 poetry.lock):''${POETRY_INSTALL_COMMAND[@]}" + local ACTUAL_POETRY_CHECKSUM="${cfg.package.interpreter}:$(${pkgs.nix}/bin/nix-hash --type sha256 pyproject.toml):$(${pkgs.nix}/bin/nix-hash --type sha256 poetry.lock):''${POETRY_INSTALL_COMMAND[@]}" local POETRY_CHECKSUM_FILE=".venv/poetry.lock.checksum" if [ -f "$POETRY_CHECKSUM_FILE" ] then @@ -280,6 +263,81 @@ in default = pkgs.python3; defaultText = lib.literalExpression "pkgs.python3"; description = "The Python package to use."; + apply = + drv: + let + isBuildEnv = drv: lib.hasAttr "extraLibs" (lib.functionArgs drv.override); + + makeWrapperArgs = [ + "--prefix" + "LD_LIBRARY_PATH" + ":" + (lib.makeLibraryPath libraries) + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ + "--prefix" + "DYLD_LIBRARY_PATH" + ":" + (lib.makeLibraryPath libraries) + ]; + + patchBuildEnv = + drv: + let + makePostBuildWrapper = pkgs.callPackage ./postbuild-wrapper.nix { }; + patchedEnv = + (drv.override (args: { + extraLibs = (args.extraLibs or [ ]) ++ [ + (pkgs.runCommand "bin" { } '' + mkdir -p $out/bin + '') + ]; + })).overrideAttrs + ( + prevAttrs: + let + # Generate the patched wrapper script using the shared function + patchedPostBuildWrapper = makePostBuildWrapper { + inherit (drv) python; + inherit makeWrapperArgs; + }; + in + { + postBuild = patchedPostBuildWrapper; + passthru = prevAttrs.passthru // { + interpreter = "${patchedEnv}/bin/${drv.python.executable}"; + }; + } + ); + in + # If we got a buildEnv from withPackages, modify its postBuild to use our wrapper logic + if isBuildEnv drv then patchedEnv else drv; + + overrideBuildEnv = + drv: + drv.overrideAttrs (prevAttrs: rec { + buildEnv = pkgs.callPackage ./wrapper.nix { + python = drv; + requiredPythonModules = drv.pkgs.requiredPythonModules; + }; + passthru = prevAttrs.passthru // { + inherit buildEnv; + }; + }); + + # Add extra libraries to the Python `buildEnv`. + appendLibraries = + drv: + (if isBuildEnv drv then drv else drv.buildEnv).override (args: { inherit makeWrapperArgs; }); + in + if cfg.patches.buildEnv.enable then + lib.pipe drv [ + patchBuildEnv + overrideBuildEnv + appendLibraries + ] + else + appendLibraries drv; }; manylinux.enable = lib.mkOption { @@ -328,6 +386,22 @@ in example = "./directory"; }; + patches.buildEnv.enable = lib.mkOption { + type = lib.types.bool; + # TODO: Implement bounds check on `lib.version` once the upstream patch reaches a release. + default = true; + description = '' + Whether to apply fixes to Python's `buildEnv` for correct runtime initialization: + - Executables use `--inherit-argv0` and `--resolve-argv0` to ensure Python initializes with correct `sys.prefix` and `sys.base_prefix` + - Python package scripts are unwrapped to invoke the environment's interpreter directly + + Without these fixes, venvs cannot access environment packages via `--system-site-packages`. + + Enabled by default. + Newer nixpkgs releases may include upstream fixes that make this patch obsolete. + ''; + }; + venv = { enable = lib.mkEnableOption "Python virtual environment"; requirements = lib.mkOption { @@ -521,10 +595,11 @@ in cachix.pull = lib.mkIf (cfg.version != null) [ "nixpkgs-python" ]; - packages = - [ package ] - ++ (lib.optional cfg.poetry.enable cfg.poetry.package) - ++ (lib.optional cfg.uv.enable cfg.uv.package); + packages = [ + cfg.package + ] + ++ (lib.optional cfg.poetry.enable cfg.poetry.package) + ++ (lib.optional cfg.uv.enable cfg.uv.package); env = (lib.optionalAttrs cfg.uv.enable { @@ -532,7 +607,7 @@ in UV_PROJECT_ENVIRONMENT = "${config.env.DEVENV_STATE}/venv"; # Force uv not to download a Python binary when the version in pyproject.toml does not match the one installed by devenv UV_PYTHON_DOWNLOADS = "never"; - # Make uv choose the first python on PATH that is not uv provided. + # Make uv choose the first python on PATH that is not uv provided. # The one it finds is then consistently the one from nix (which is what we want). UV_PYTHON_PREFERENCE = "only-system"; }) @@ -582,7 +657,7 @@ in }; enterShell = '' - export PYTHONPATH="$DEVENV_PROFILE/${package.sitePackages}''${PYTHONPATH:+:$PYTHONPATH}" + export PYTHONPATH="$DEVENV_PROFILE/${cfg.package.sitePackages}''${PYTHONPATH:+:$PYTHONPATH}" ''; }; } diff --git a/src/modules/languages/python/postbuild-wrapper.nix b/src/modules/languages/python/postbuild-wrapper.nix new file mode 100644 index 0000000000..39c553a024 --- /dev/null +++ b/src/modules/languages/python/postbuild-wrapper.nix @@ -0,0 +1,58 @@ +{ lib, jq }: + +# Modified from the upstream post-build patch. +# https://github.com/NixOS/nixpkgs/blob/4c5533c55af2c3899fa4696e26430ef567601dad/pkgs/development/interpreters/python/wrapper.nix +# +# devenv-specific modifications: +# +# - Use jq to extract buildEnv `paths` and re-process them +# - Use --resolve-argv0 for the main python executable wrapper. +# This correctly points to the wrapped env when the executable is a symlink, e.g. in a devenv profile. +{ + # Python derivation info + python +, # Wrapper configuration + permitUserSite ? false +, makeWrapperArgs ? [ ] +, +}: + +let + pythonExecutable = "${placeholder "out"}/bin/${python.executable}"; + pythonPath = "${placeholder "out"}/${python.sitePackages}"; +in +'' + # Extract paths from the pkgs JSON (buildEnv provides $pkgs or $pkgsPath) + if [ -n "''${pkgsPath:-}" ]; then + paths=$(${jq}/bin/jq -r '.[].paths[]' "$pkgsPath") + else + paths=$(echo "$pkgs" | ${jq}/bin/jq -r '.[].paths[]') + fi + + for path in $paths; do + if [ -d "$path/bin" ]; then + cd "$path/bin" + for prg in *; do + if [ -f "$prg" ] && [ -x "$prg" ]; then + rm -f "$out/bin/$prg" + if [ "$prg" = "${python.executable}" ]; then + makeWrapper "${python.interpreter}" "$out/bin/$prg" \ + --inherit-argv0 \ + --resolve-argv0 \ + ${lib.optionalString (!permitUserSite) ''--set PYTHONNOUSERSITE "true" \''} + ${lib.concatStringsSep " " makeWrapperArgs} + elif [ "$(readlink "$prg")" = "${python.executable}" ]; then + ln -s "${python.executable}" "$out/bin/$prg" + else + makeWrapper "$path/bin/$prg" "$out/bin/$prg" \ + --set NIX_PYTHONPREFIX "$out" \ + --set NIX_PYTHONEXECUTABLE ${pythonExecutable} \ + --set NIX_PYTHONPATH ${pythonPath} \ + ${lib.optionalString (!permitUserSite) ''--set PYTHONNOUSERSITE "true" \''} + ${lib.concatStringsSep " " makeWrapperArgs} + fi + fi + done + fi + done +'' diff --git a/src/modules/languages/python/wrapper.nix b/src/modules/languages/python/wrapper.nix new file mode 100644 index 0000000000..71dad8975c --- /dev/null +++ b/src/modules/languages/python/wrapper.nix @@ -0,0 +1,72 @@ +{ lib +, stdenv +, buildEnv +, runCommand +, makeBinaryWrapper +, callPackage +, # manually passed + python +, requiredPythonModules +, # extra opts + extraLibs ? [ ] +, extraOutputsToInstall ? [ ] +, postBuild ? "" +, ignoreCollisions ? false +, permitUserSite ? false +, # Wrap executables with the given argument. + makeWrapperArgs ? [ ] +, +}: + +# Create a python executable that knows about additional packages. +let + makePostBuildWrapper = callPackage ./postbuild-wrapper.nix { }; + + env = + let + paths = requiredPythonModules (extraLibs ++ [ python ]) ++ [ + (runCommand "bin" { } '' + mkdir -p $out/bin + '') + ]; + in + buildEnv { + name = "${python.name}-env"; + + inherit paths; + inherit ignoreCollisions; + extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; + + nativeBuildInputs = [ makeBinaryWrapper ]; + + postBuild = + makePostBuildWrapper + { + inherit + python + permitUserSite + makeWrapperArgs + ; + } + + postBuild; + + inherit (python) meta; + + passthru = python.passthru // { + interpreter = "${env}/bin/${python.executable}"; + inherit python; + env = stdenv.mkDerivation { + name = "interactive-${python.name}-environment"; + nativeBuildInputs = [ env ]; + + buildCommand = '' + echo >&2 "" + echo >&2 "*** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***" + echo >&2 "" + exit 1 + ''; + }; + }; + }; +in +env diff --git a/src/python-wrapper.nix b/src/python-wrapper.nix deleted file mode 100644 index dc4de5d67b..0000000000 --- a/src/python-wrapper.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ lib -, stdenv -, buildEnv -, makeBinaryWrapper - - # manually pased -, python -, requiredPythonModules - - # extra opts -, extraLibs ? [ ] -, extraOutputsToInstall ? [ ] -, postBuild ? "" -, ignoreCollisions ? false -, permitUserSite ? false - # Wrap executables with the given argument. -, makeWrapperArgs ? [ ] -, -}: - -# Create a python executable that knows about additional packages. -let - env = - let - paths = requiredPythonModules (extraLibs ++ [ python ]); - pythonPath = "${placeholder "out"}/${python.sitePackages}"; - pythonExecutable = "${placeholder "out"}/bin/${python.executable}"; - in - buildEnv { - name = "${python.name}-env"; - - inherit paths; - inherit ignoreCollisions; - extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; - - nativeBuildInputs = [ makeBinaryWrapper ]; - - postBuild = '' - if [ -L "$out/bin" ]; then - unlink "$out/bin" - fi - mkdir -p "$out/bin" - - rm -f $out/bin/.*-wrapped - - for path in ${lib.concatStringsSep " " paths}; do - if [ -d "$path/bin" ]; then - cd "$path/bin" - for prg in *; do - if [ -f "$prg" ]; then - rm -f "$out/bin/$prg" - if [ -x "$prg" ]; then - if [ -f ".$prg-wrapped" ]; then - echo "#!${pythonExecutable}" > "$out/bin/$prg" - sed -e '1d' -e '3d' ".$prg-wrapped" >> "$out/bin/$prg" - chmod +x "$out/bin/$prg" - else - makeWrapper "$path/bin/$prg" "$out/bin/$prg" --inherit-argv0 --resolve-argv0 ${lib.optionalString (!permitUserSite) ''--set PYTHONNOUSERSITE "true"''} ${lib.concatStringsSep " " makeWrapperArgs} - fi - fi - fi - done - fi - done - '' + postBuild; - - inherit (python) meta; - - passthru = python.passthru // { - interpreter = "${env}/bin/${python.executable}"; - inherit python; - env = stdenv.mkDerivation { - name = "interactive-${python.name}-environment"; - nativeBuildInputs = [ env ]; - - buildCommand = '' - echo >&2 "" - echo >&2 "*** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***" - echo >&2 "" - exit 1 - ''; - }; - }; - }; -in -env diff --git a/tests/python-with-packages/.test-config.yml b/tests/python-with-packages/.test-config.yml new file mode 100644 index 0000000000..13c16cea3a --- /dev/null +++ b/tests/python-with-packages/.test-config.yml @@ -0,0 +1 @@ +use_shell: false diff --git a/tests/python-with-packages/.test.sh b/tests/python-with-packages/.test.sh new file mode 100755 index 0000000000..f7ed71a79c --- /dev/null +++ b/tests/python-with-packages/.test.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -exu + +echo "" +echo "================================" +echo "Testing pip profile..." +echo "================================" +devenv shell --profile pip-with-packages ./check-python-env.py + +echo "" +echo "================================" +echo "Testing uv profile..." +echo "================================" +devenv shell --profile uv-with-packages ./check-python-env.py + +echo "" +echo "✓ All tests passed!" diff --git a/tests/python-with-packages/check-python-env.py b/tests/python-with-packages/check-python-env.py new file mode 100755 index 0000000000..6621f34490 --- /dev/null +++ b/tests/python-with-packages/check-python-env.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +import sys +import os + +print("Verifying sys.base_prefix points to wrapped python...") +print("sys.base_prefix:", sys.base_prefix) +print("sys.executable:", sys.executable) + +# Check that sys.base_prefix points to the -env buildEnv, not the bare interpreter +assert "-env" in sys.base_prefix, ( + f"sys.base_prefix ({sys.base_prefix}) should point to python-env with packages, not bare interpreter" +) + +# Verify packages from withPackages are accessible from base_prefix +site_packages = os.path.join( + sys.base_prefix, + "lib", + f"python{sys.version_info.major}.{sys.version_info.minor}", + "site-packages", +) +matplotlib_path = os.path.join(site_packages, "matplotlib") +assert os.path.exists(matplotlib_path), ( + f"matplotlib should exist in base_prefix site-packages at {matplotlib_path}, but it doesn't" +) + +print("✓ sys.base_prefix correctly points to wrapped python with packages") + +print("Testing imports from Nix's withPackages...") +import matplotlib + +print("✓ matplotlib works!") +import numpy + +print("✓ numpy works!") +import IPython + +print("✓ ipython works!") +import tkinter + +print("✓ tkinter works!") + +print("Testing imports from the Python env...") +import requests + +print("✓ requests works!") +import pytest + +print("✓ pytest works!") diff --git a/tests/python-with-packages/devenv.nix b/tests/python-with-packages/devenv.nix new file mode 100644 index 0000000000..17131e86e1 --- /dev/null +++ b/tests/python-with-packages/devenv.nix @@ -0,0 +1,37 @@ +{ pkgs, config, ... }: +{ + languages.python = { + enable = true; + + # Load up some python packages via Nix + package = pkgs.python3.withPackages (ps: [ + ps.matplotlib + ps.numpy + ps.ipython + ps.tkinter + ]); + + # Enable the patch (enabled by default) + # patches.buildEnv.enable = true; + + # Enable the virtual environment + venv.enable = true; + }; + + profiles.uv-with-packages.module = { + languages.python = { + directory = "./uv-profile"; + uv = { + enable = true; + sync.enable = true; + }; + }; + }; + + profiles.pip-with-packages.module = { + languages.python = { + directory = "./pip-profile"; + venv.requirements = ./pip-profile/requirements.txt; + }; + }; +} diff --git a/tests/python-with-packages/pip-profile/requirements.txt b/tests/python-with-packages/pip-profile/requirements.txt new file mode 100644 index 0000000000..2001f3e256 --- /dev/null +++ b/tests/python-with-packages/pip-profile/requirements.txt @@ -0,0 +1,2 @@ +requests +pytest diff --git a/tests/python-with-packages/uv-profile/pyproject.toml b/tests/python-with-packages/uv-profile/pyproject.toml new file mode 100644 index 0000000000..f8bce08360 --- /dev/null +++ b/tests/python-with-packages/uv-profile/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "mymodule" +description = "test" +version = "0.0.1" + +dependencies = [ + "requests", + "pytest", +]