support pycairo (#178)

* support pycairo

* merge pycairo example with system deps
This commit is contained in:
Jake Runzer
2025-06-13 19:13:29 -04:00
committed by GitHub
parent 7d8ce26da9
commit 1e6c3535d9
5 changed files with 29 additions and 6 deletions
@@ -63,8 +63,8 @@
],
"commands": [
{
"cmd": "sh -c 'apt-get update \u0026\u0026 apt-get install -y libpq-dev python3-dev'",
"customName": "install apt packages: libpq-dev python3-dev"
"cmd": "sh -c 'apt-get update \u0026\u0026 apt-get install -y libcairo2-dev libpq-dev python3-dev'",
"customName": "install apt packages: libcairo2-dev libpq-dev python3-dev"
}
],
"inputs": [
@@ -170,8 +170,8 @@
],
"commands": [
{
"cmd": "sh -c 'apt-get update \u0026\u0026 apt-get install -y ffmpeg libpq5 poppler-utils'",
"customName": "install apt packages: ffmpeg libpq5 poppler-utils"
"cmd": "sh -c 'apt-get update \u0026\u0026 apt-get install -y ffmpeg libcairo2 libpq5 poppler-utils'",
"customName": "install apt packages: ffmpeg libcairo2 libpq5 poppler-utils"
}
],
"inputs": [
+14 -1
View File
@@ -260,7 +260,7 @@ func (p *PythonProvider) InstallPip(ctx *generate.GenerateContext, install *gene
func (p *PythonProvider) AddRuntimeDeps(ctx *generate.GenerateContext) {
for dep, requiredPkgs := range pythonRuntimeDepRequirements {
if p.usesDep(ctx, dep) {
ctx.Logger.LogInfo("Installing apt packages for %s", dep)
ctx.Logger.LogInfo("Installing runtime apt packages for %s", dep)
ctx.Deploy.AddAptPackages(requiredPkgs)
}
}
@@ -278,6 +278,13 @@ func (p *PythonProvider) GetBuilderDeps(ctx *generate.GenerateContext) *generate
miseStep := ctx.GetMiseStepBuilder()
miseStep.SupportingAptPackages = append(miseStep.SupportingAptPackages, "python3-dev")
for dep, requiredPkgs := range pythonBuildDepRequirements {
if p.usesDep(ctx, dep) {
ctx.Logger.LogInfo("Installing build apt packages for %s", dep)
miseStep.SupportingAptPackages = append(miseStep.SupportingAptPackages, requiredPkgs...)
}
}
if p.usesPostgres(ctx) {
miseStep.SupportingAptPackages = append(miseStep.SupportingAptPackages, "libpq-dev")
}
@@ -470,7 +477,13 @@ func (p *PythonProvider) getRuntime(ctx *generate.GenerateContext) string {
}
// Mapping of python dependencies to required apt packages
var pythonBuildDepRequirements = map[string][]string{
"pycairo": {"libcairo2-dev"},
}
var pythonRuntimeDepRequirements = map[string][]string{
"pycairo": {"libcairo2"},
"pdf2image": {"poppler-utils"},
"pydub": {"ffmpeg"},
"pymovie": {"ffmpeg", "qt5-qmake", "qtbase5-dev", "qtbase5-dev-tools", "qttools5-dev-tools", "libqt5core5a", "python3-pyqt5"},
+5
View File
@@ -1,6 +1,7 @@
from pdf2image import convert_from_path, convert_from_bytes
from pydub import AudioSegment
from pydub.playback import play
import cairo
# pdf2image
images = convert_from_path('./test.pdf')
@@ -10,5 +11,9 @@ print(images)
sound = AudioSegment.from_file("test.mp3", format="mp3")
print(sound)
# pycairo
surface = cairo.SVGSurface("example.svg", 200, 200)
print(surface)
print("PyCairo version:", cairo.version)
print("Hello from Python with system deps")
+1 -1
View File
@@ -1,4 +1,4 @@
psycopg2-binary==2.9.10
pdf2image==1.0.0
pydub==0.25.1
# pycairo==1.27.0
pycairo==1.27.0
+5
View File
@@ -0,0 +1,5 @@
[
{
"expectedOutput": "Hello from Python with system deps"
}
]