mirror of https://github.com/databricks/cli.git
libs/python: Remove DetectInterpreters (#2234)
## Changes - Remove DetectInterpreters from DetectExecutable call: python3 or python should always be on on the PATH. We don't need to detect non-standard situations like python3.10 is present but python3 is not. - I moved DetectInterpreters to cmd/labs where it is still used. This is a follow up to https://github.com/databricks/cli/pull/2034 ## Tests Existing tests.
This commit is contained in:
parent
4595c6f1b5
commit
65fbbd9a7c
|
@ -15,7 +15,6 @@ import (
|
||||||
"github.com/databricks/cli/libs/databrickscfg/profile"
|
"github.com/databricks/cli/libs/databrickscfg/profile"
|
||||||
"github.com/databricks/cli/libs/log"
|
"github.com/databricks/cli/libs/log"
|
||||||
"github.com/databricks/cli/libs/process"
|
"github.com/databricks/cli/libs/process"
|
||||||
"github.com/databricks/cli/libs/python"
|
|
||||||
"github.com/databricks/databricks-sdk-go"
|
"github.com/databricks/databricks-sdk-go"
|
||||||
"github.com/databricks/databricks-sdk-go/service/compute"
|
"github.com/databricks/databricks-sdk-go/service/compute"
|
||||||
"github.com/databricks/databricks-sdk-go/service/sql"
|
"github.com/databricks/databricks-sdk-go/service/sql"
|
||||||
|
@ -223,7 +222,7 @@ func (i *installer) setupPythonVirtualEnvironment(ctx context.Context, w *databr
|
||||||
feedback := cmdio.Spinner(ctx)
|
feedback := cmdio.Spinner(ctx)
|
||||||
defer close(feedback)
|
defer close(feedback)
|
||||||
feedback <- "Detecting all installed Python interpreters on the system"
|
feedback <- "Detecting all installed Python interpreters on the system"
|
||||||
pythonInterpreters, err := python.DetectInterpreters(ctx)
|
pythonInterpreters, err := DetectInterpreters(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("detect: %w", err)
|
return fmt.Errorf("detect: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package python
|
package project
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
|
@ -1,6 +1,6 @@
|
||||||
//go:build unix
|
//go:build unix
|
||||||
|
|
||||||
package python
|
package project
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
|
@ -1,6 +1,6 @@
|
||||||
//go:build windows
|
//go:build windows
|
||||||
|
|
||||||
package python
|
package project
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
|
@ -39,27 +39,7 @@ func DetectExecutable(ctx context.Context) (string, error) {
|
||||||
//
|
//
|
||||||
// See https://github.com/pyenv/pyenv#understanding-python-version-selection
|
// See https://github.com/pyenv/pyenv#understanding-python-version-selection
|
||||||
|
|
||||||
out, err := exec.LookPath(GetExecutable())
|
return exec.LookPath(GetExecutable())
|
||||||
|
|
||||||
// most of the OS'es have python3 in $PATH, but for those which don't,
|
|
||||||
// we perform the latest version lookup
|
|
||||||
if err != nil && !errors.Is(err, exec.ErrNotFound) {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if out != "" {
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
// otherwise, detect all interpreters and pick the least that satisfies
|
|
||||||
// minimal version requirements
|
|
||||||
all, err := DetectInterpreters(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
interpreter, err := all.AtLeast("3.8")
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return interpreter.Path, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DetectVEnvExecutable returns the path to the python3 executable inside venvPath,
|
// DetectVEnvExecutable returns the path to the python3 executable inside venvPath,
|
||||||
|
|
|
@ -16,24 +16,16 @@ func TestDetectsViaPathLookup(t *testing.T) {
|
||||||
assert.NotEmpty(t, py)
|
assert.NotEmpty(t, py)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDetectsViaListing(t *testing.T) {
|
|
||||||
t.Setenv("PATH", "testdata/other-binaries-filtered")
|
|
||||||
ctx := context.Background()
|
|
||||||
py, err := DetectExecutable(ctx)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Equal(t, "testdata/other-binaries-filtered/python3.10", py)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDetectFailsNoInterpreters(t *testing.T) {
|
func TestDetectFailsNoInterpreters(t *testing.T) {
|
||||||
t.Setenv("PATH", "testdata")
|
t.Setenv("PATH", "testdata")
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
_, err := DetectExecutable(ctx)
|
_, err := DetectExecutable(ctx)
|
||||||
assert.Equal(t, ErrNoPythonInterpreters, err)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDetectFailsNoMinimalVersion(t *testing.T) {
|
func TestDetectFailsNoMinimalVersion(t *testing.T) {
|
||||||
t.Setenv("PATH", "testdata/no-python3")
|
t.Setenv("PATH", "testdata/no-python3")
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
_, err := DetectExecutable(ctx)
|
_, err := DetectExecutable(ctx)
|
||||||
assert.EqualError(t, err, "cannot find Python greater or equal to v3.8.0")
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,5 +20,5 @@ func TestDetectFailsNoInterpreters(t *testing.T) {
|
||||||
t.Setenv("PATH", "testdata")
|
t.Setenv("PATH", "testdata")
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
_, err := DetectExecutable(ctx)
|
_, err := DetectExecutable(ctx)
|
||||||
assert.ErrorIs(t, err, ErrNoPythonInterpreters)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue