Skip to content

Commit

Permalink
add pip cache
Browse files Browse the repository at this point in the history
  • Loading branch information
coffee-cup committed Jan 28, 2025
1 parent 910e251 commit 5de617f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 27 deletions.
6 changes: 6 additions & 0 deletions core/generate/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ func (m *Metadata) Set(key string, value string) {
m.Properties[key] = value
}

func (m *Metadata) SetBool(key string, value bool) {
if value {
m.Properties[key] = "true"
}
}

func (m *Metadata) Get(key string) string {
return m.Properties[key]
}
7 changes: 1 addition & 6 deletions core/providers/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,7 @@ func (p *NodeProvider) Name() string {
}

func (p *NodeProvider) Detect(ctx *generate.GenerateContext) (bool, error) {
packageJson, err := p.GetPackageJson(ctx.App)
if err != nil {
return false, err
}

return packageJson != nil, nil
return ctx.App.HasMatch("package.json"), nil
}

func (p *NodeProvider) Plan(ctx *generate.GenerateContext) error {
Expand Down
34 changes: 17 additions & 17 deletions core/providers/python/python.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package python

import (
"regexp"
"strconv"
"strings"

"github.com/railwayapp/railpack/core/generate"
Expand All @@ -12,6 +11,7 @@ import (
const (
DEFAULT_PYTHON_VERSION = "3.13"
UV_CACHE_DIR = "/opt/uv-cache"
PIP_CACHE_DIR = "/opt/pip-cache"
)

type PythonProvider struct{}
Expand Down Expand Up @@ -64,14 +64,6 @@ func (p *PythonProvider) start(ctx *generate.GenerateContext) error {
return nil
}

// Mapping of python dependencies to required apt packages
var pythonDepRequirements = map[string][]string{
"cairo": {"libcairo2-dev"},
"pdf2image": {"poppler-utils"},
"pydub": {"ffmpeg"},
"pymovie": {"ffmpeg", "qt5-qmake", "qtbase5-dev", "qtbase5-dev-tools", "qttools5-dev-tools", "libqt5core5a", "python3-pyqt5"},
}

func (p *PythonProvider) install(ctx *generate.GenerateContext) error {
install := ctx.NewCommandStep("install")
install.AddCommands([]plan.Command{
Expand All @@ -90,16 +82,17 @@ func (p *PythonProvider) install(ctx *generate.GenerateContext) error {
plan.NewVariableCommand("PYTHONUNBUFFERED", "1"),
plan.NewVariableCommand("PYTHONHASHSEED", "random"),
plan.NewVariableCommand("PYTHONDONTWRITEBYTECODE", "1"),
plan.NewVariableCommand("PIP_NO_CACHE_DIR", "1"),
plan.NewVariableCommand("PIP_DISABLE_PIP_VERSION_CHECK", "1"),
plan.NewVariableCommand("PIP_DEFAULT_TIMEOUT", "100"),
})

if hasRequirements {
install.AddCommands([]plan.Command{
plan.NewExecCommand("pip install --upgrade setuptools"),
plan.NewVariableCommand("PIP_CACHE_DIR", PIP_CACHE_DIR),
plan.NewCopyCommand("requirements.txt"),
plan.NewExecCommand("pip install -r requirements.txt"),
plan.NewExecCommand("pip install -r requirements.txt", plan.ExecOptions{
Caches: []string{ctx.Caches.AddCache("pip", PIP_CACHE_DIR)},
}),
})
} else if hasPyproject && hasPoetry {
install.AddCommands([]plan.Command{
Expand Down Expand Up @@ -151,8 +144,8 @@ func (p *PythonProvider) install(ctx *generate.GenerateContext) error {
}
}

aptStep := ctx.NewAptStepBuilder("distutils")
aptStep.Packages = []string{"python3-distutils", "gcc", "pkg-config"}
aptStep := ctx.NewAptStepBuilder("python-system-deps")
aptStep.Packages = []string{"pkg-config"}
install.DependsOn = append(install.DependsOn, aptStep.DisplayName)

for dep, requiredPkgs := range pythonDepRequirements {
Expand Down Expand Up @@ -208,9 +201,9 @@ func (p *PythonProvider) addMetadata(ctx *generate.GenerateContext) {
}

ctx.Metadata.Set("packageManager", pkgManager)
ctx.Metadata.Set("hasRequirements", strconv.FormatBool(p.hasRequirements(ctx)))
ctx.Metadata.Set("hasPyproject", strconv.FormatBool(p.hasPyproject(ctx)))
ctx.Metadata.Set("hasPipfile", strconv.FormatBool(p.hasPipfile(ctx)))
ctx.Metadata.SetBool("requirements", p.hasRequirements(ctx))
ctx.Metadata.SetBool("pyproject", p.hasPyproject(ctx))
ctx.Metadata.SetBool("pipfile", p.hasPipfile(ctx))
}

func (p *PythonProvider) usesDep(ctx *generate.GenerateContext, dep string) bool {
Expand Down Expand Up @@ -263,3 +256,10 @@ func (p *PythonProvider) hasPdm(ctx *generate.GenerateContext) bool {
func (p *PythonProvider) hasUv(ctx *generate.GenerateContext) bool {
return ctx.App.HasMatch("uv.lock")
}

// Mapping of python dependencies to required apt packages
var pythonDepRequirements = map[string][]string{
"pdf2image": {"poppler-utils", "gcc"},
"pydub": {"ffmpeg", "gcc"},
"pymovie": {"ffmpeg", "qt5-qmake", "qtbase5-dev", "qtbase5-dev-tools", "qttools5-dev-tools", "libqt5core5a", "python3-pyqt5", "gcc"},
}
4 changes: 0 additions & 4 deletions examples/python-system-deps/main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from pdf2image import convert_from_path, convert_from_bytes
from pydub import AudioSegment
from pydub.playback import play
import pycairo

# pdf2image
images = convert_from_path('./test.pdf')
Expand All @@ -11,8 +10,5 @@
sound = AudioSegment.from_file("test.mp3", format="mp3")
print(sound)

# pycairo
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 640, 480)
print(surface)

print("Hello from Python with system deps")

0 comments on commit 5de617f

Please sign in to comment.