diff --git a/lib/pythonx.ex b/lib/pythonx.ex index 4600022..a2dc288 100644 --- a/lib/pythonx.ex +++ b/lib/pythonx.ex @@ -54,10 +54,19 @@ defmodule Pythonx do * `:uv_version` - select the version of the uv package manager to use. Defaults to `#{inspect(Pythonx.Uv.default_uv_version())}`. + * `:native_tls` - if true, uses the system's native TLS implementation instead + of vendored rustls. This is useful in corporate environments where the system + certificate store must be used. Defaults to `false`. + ''' @spec uv_init(String.t(), keyword()) :: :ok def uv_init(pyproject_toml, opts \\ []) when is_binary(pyproject_toml) and is_list(opts) do - opts = Keyword.validate!(opts, force: false, uv_version: Pythonx.Uv.default_uv_version()) + opts = + Keyword.validate!(opts, + force: false, + uv_version: Pythonx.Uv.default_uv_version(), + native_tls: false + ) Pythonx.Uv.fetch(pyproject_toml, false, opts) install_paths = Pythonx.Uv.init(pyproject_toml, false, Keyword.take(opts, [:uv_version])) diff --git a/lib/pythonx/uv.ex b/lib/pythonx/uv.ex index 78312b9..8fb039e 100644 --- a/lib/pythonx/uv.ex +++ b/lib/pythonx/uv.ex @@ -10,7 +10,8 @@ defmodule Pythonx.Uv do """ @spec fetch(String.t(), boolean(), keyword()) :: :ok def fetch(pyproject_toml, priv?, opts \\ []) do - opts = Keyword.validate!(opts, force: false, uv_version: default_uv_version()) + opts = + Keyword.validate!(opts, force: false, uv_version: default_uv_version(), native_tls: false) project_dir = project_dir(pyproject_toml, priv?, opts[:uv_version]) python_install_dir = python_install_dir(priv?, opts[:uv_version]) @@ -28,7 +29,10 @@ defmodule Pythonx.Uv do File.write!(Path.join(project_dir, "pyproject.toml"), pyproject_toml) # We always use uv-managed Python, so the paths are predictable. - if run!(["sync", "--managed-python", "--no-config"], + base_args = ["sync", "--managed-python", "--no-config"] + uv_args = if opts[:native_tls], do: base_args ++ ["--native-tls"], else: base_args + + if run!(uv_args, cd: project_dir, env: %{"UV_PYTHON_INSTALL_DIR" => python_install_dir}, uv_version: opts[:uv_version]