From 8f01b461c4c4d0695b9ece730884b317cb3ef2e5 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Wed, 7 Feb 2024 07:36:41 -0700 Subject: [PATCH 1/4] feat: expanded default python variables This set of environment variables seems to be the best set of default production settings for most python projects. --- src/providers/python.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/providers/python.rs b/src/providers/python.rs index fd831e099..094cfbed5 100644 --- a/src/providers/python.rs +++ b/src/providers/python.rs @@ -67,10 +67,7 @@ impl Provider for PythonProvider { plan.set_start_phase(start); } - plan.add_variables(EnvironmentVariables::from([( - "PYTHONUNBUFFERED".to_owned(), - "1".to_owned(), - )])); + plan.add_variables(PythonProvider::default_python_environment_variables()); if app.includes_file("poetry.lock") { plan.add_variables(EnvironmentVariables::from([( @@ -301,6 +298,26 @@ impl PythonProvider { .map(|m| m.get(2).unwrap().as_str().to_string())) } + fn default_python_environment_variables() -> EnvironmentVariables { + let python_variables = vec![ + ("PYTHONFAULTHANDLER", "1"), + ("PYTHONUNBUFFERED", "1"), + ("PYTHONHASHSEED", "random"), + ("PYTHONDONTWRITEBYTECODE", "1"), + ("PIP_NO_CACHE_DIR", "1"), + ("PIP_DISABLE_PIP_VERSION_CHECK", "1"), + ("PIP_DEFAULT_TIMEOUT", "100"), + ]; + + let mut env_vars = EnvironmentVariables::new(); + + for (key, value) in python_variables { + env_vars.insert(key.to_owned(), value.to_owned()); + } + + env_vars + } + fn get_nix_python_package(app: &App, env: &Environment) -> Result { // Fetch python versions into tuples with defaults fn as_default(v: Option) -> &str { From 2f90ff60e974cf800700fd19b48409e43e25e5e7 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Wed, 8 May 2024 06:12:45 -0600 Subject: [PATCH 2/4] docs: adding py variable docs --- docs/pages/docs/providers/python.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/pages/docs/providers/python.md b/docs/pages/docs/providers/python.md index 90eb5ce48..3bc96f2bf 100644 --- a/docs/pages/docs/providers/python.md +++ b/docs/pages/docs/providers/python.md @@ -85,3 +85,20 @@ python main.py These directories are cached between builds - Install: `~/.cache/pip` + +## Environment Variables + +The following environment variables are set by default: + +```shell +PYTHONFAULTHANDLER=1 +PYTHONUNBUFFERED=1 +PYTHONHASHSEED=random +PYTHONDONTWRITEBYTECODE=1 + +PIP_NO_CACHE_DIR=1 +PIP_DISABLE_PIP_VERSION_CHECK=1 +PIP_DEFAULT_TIMEOUT=100 +``` + +These can be overwritten by the `--env` option. \ No newline at end of file From 47b93e0bad48dd509a9ce1c77f8cddc1550f4137 Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Fri, 17 May 2024 18:57:16 -0400 Subject: [PATCH 3/4] lint python file --- docs/pages/docs/providers/python.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/docs/providers/python.md b/docs/pages/docs/providers/python.md index 3bc96f2bf..1e0e0460c 100644 --- a/docs/pages/docs/providers/python.md +++ b/docs/pages/docs/providers/python.md @@ -101,4 +101,4 @@ PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_DEFAULT_TIMEOUT=100 ``` -These can be overwritten by the `--env` option. \ No newline at end of file +These can be overwritten by the `--env` option. From 9acdad8194eb4f64d331438ff891392030ff217e Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Fri, 17 May 2024 18:57:55 -0400 Subject: [PATCH 4/4] update python snapshots --- .../snapshots/generate_plan_tests__multiple_providers.snap | 6 ++++++ tests/snapshots/generate_plan_tests__node_python.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_2.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_2_runtime.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_django.snap | 6 ++++++ .../snapshots/generate_plan_tests__python_django_mysql.snap | 6 ++++++ .../generate_plan_tests__python_django_pipfile.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_numpy.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_pdm.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_poetry.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_postgres.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_procfile.snap | 6 ++++++ tests/snapshots/generate_plan_tests__python_setuptools.snap | 6 ++++++ 14 files changed, 84 insertions(+) diff --git a/tests/snapshots/generate_plan_tests__multiple_providers.snap b/tests/snapshots/generate_plan_tests__multiple_providers.snap index 1b6996969..698f2c33c 100644 --- a/tests/snapshots/generate_plan_tests__multiple_providers.snap +++ b/tests/snapshots/generate_plan_tests__multiple_providers.snap @@ -11,6 +11,12 @@ expression: plan "NIXPACKS_METADATA": "node,python,go,deno", "NODE_ENV": "production", "NPM_CONFIG_PRODUCTION": "false", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__node_python.snap b/tests/snapshots/generate_plan_tests__node_python.snap index 59c342d2a..8cca35883 100644 --- a/tests/snapshots/generate_plan_tests__node_python.snap +++ b/tests/snapshots/generate_plan_tests__node_python.snap @@ -10,6 +10,12 @@ expression: plan "NIXPACKS_METADATA": "node,python", "NODE_ENV": "production", "NPM_CONFIG_PRODUCTION": "false", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python.snap b/tests/snapshots/generate_plan_tests__python.snap index bf497c8c9..45a282c99 100644 --- a/tests/snapshots/generate_plan_tests__python.snap +++ b/tests/snapshots/generate_plan_tests__python.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_2.snap b/tests/snapshots/generate_plan_tests__python_2.snap index aad062797..9831c2841 100644 --- a/tests/snapshots/generate_plan_tests__python_2.snap +++ b/tests/snapshots/generate_plan_tests__python_2.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_2_runtime.snap b/tests/snapshots/generate_plan_tests__python_2_runtime.snap index aad062797..9831c2841 100644 --- a/tests/snapshots/generate_plan_tests__python_2_runtime.snap +++ b/tests/snapshots/generate_plan_tests__python_2_runtime.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_django.snap b/tests/snapshots/generate_plan_tests__python_django.snap index ff009eef8..f2bc20610 100644 --- a/tests/snapshots/generate_plan_tests__python_django.snap +++ b/tests/snapshots/generate_plan_tests__python_django.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python,django,postgres", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_django_mysql.snap b/tests/snapshots/generate_plan_tests__python_django_mysql.snap index 5fcfad295..2bc93c701 100644 --- a/tests/snapshots/generate_plan_tests__python_django_mysql.snap +++ b/tests/snapshots/generate_plan_tests__python_django_mysql.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python,django", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_django_pipfile.snap b/tests/snapshots/generate_plan_tests__python_django_pipfile.snap index c189d438a..ff7189b20 100644 --- a/tests/snapshots/generate_plan_tests__python_django_pipfile.snap +++ b/tests/snapshots/generate_plan_tests__python_django_pipfile.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python,django,postgres", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_numpy.snap b/tests/snapshots/generate_plan_tests__python_numpy.snap index bf497c8c9..45a282c99 100644 --- a/tests/snapshots/generate_plan_tests__python_numpy.snap +++ b/tests/snapshots/generate_plan_tests__python_numpy.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_pdm.snap b/tests/snapshots/generate_plan_tests__python_pdm.snap index c7dcebc07..ccd82c2ff 100644 --- a/tests/snapshots/generate_plan_tests__python_pdm.snap +++ b/tests/snapshots/generate_plan_tests__python_pdm.snap @@ -8,6 +8,12 @@ expression: plan "variables": { "NIXPACKS_METADATA": "python,pdm", "NIXPACKS_PDM_VERSION": "2.7.4", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_poetry.snap b/tests/snapshots/generate_plan_tests__python_poetry.snap index 47cddd293..658917092 100644 --- a/tests/snapshots/generate_plan_tests__python_poetry.snap +++ b/tests/snapshots/generate_plan_tests__python_poetry.snap @@ -8,6 +8,12 @@ expression: plan "variables": { "NIXPACKS_METADATA": "python,poetry", "NIXPACKS_POETRY_VERSION": "1.3.1", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_postgres.snap b/tests/snapshots/generate_plan_tests__python_postgres.snap index ba17d8c06..87dc7f9e3 100644 --- a/tests/snapshots/generate_plan_tests__python_postgres.snap +++ b/tests/snapshots/generate_plan_tests__python_postgres.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python,postgres", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_procfile.snap b/tests/snapshots/generate_plan_tests__python_procfile.snap index 1473beb9a..4efebb934 100644 --- a/tests/snapshots/generate_plan_tests__python_procfile.snap +++ b/tests/snapshots/generate_plan_tests__python_procfile.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": { diff --git a/tests/snapshots/generate_plan_tests__python_setuptools.snap b/tests/snapshots/generate_plan_tests__python_setuptools.snap index db57a6e55..6d9a7ef47 100644 --- a/tests/snapshots/generate_plan_tests__python_setuptools.snap +++ b/tests/snapshots/generate_plan_tests__python_setuptools.snap @@ -7,6 +7,12 @@ expression: plan "buildImage": "[build_image]", "variables": { "NIXPACKS_METADATA": "python", + "PIP_DEFAULT_TIMEOUT": "100", + "PIP_DISABLE_PIP_VERSION_CHECK": "1", + "PIP_NO_CACHE_DIR": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONFAULTHANDLER": "1", + "PYTHONHASHSEED": "random", "PYTHONUNBUFFERED": "1" }, "phases": {