diff --git a/python/python.go b/python/python.go
index c23be8d..18e5b68 100644
--- a/python/python.go
+++ b/python/python.go
@@ -226,18 +226,20 @@
 	pythonLibTag = dependencyTag{name: "pythonLib"}
 	javaDataTag  = dependencyTag{name: "javaData"}
 	// The python interpreter, with soong module name "py3-launcher" or "py3-launcher-autorun".
-	launcherTag = dependencyTag{name: "launcher"}
+	launcherTag          = dependencyTag{name: "launcher"}
+	launcherSharedLibTag = installDependencyTag{name: "launcherSharedLib"}
 	// The python interpreter built for host so that we can precompile python sources.
 	// This only works because the precompiled sources don't vary by architecture.
 	// The soong module name is "py3-launcher".
-	hostLauncherTag     = dependencyTag{name: "hostLauncher"}
-	hostStdLibTag       = dependencyTag{name: "hostStdLib"}
-	pathComponentRegexp = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_-]*$`)
-	pyExt               = ".py"
-	protoExt            = ".proto"
-	pyVersion2          = "PY2"
-	pyVersion3          = "PY3"
-	internalPath        = "internal"
+	hostLauncherTag          = dependencyTag{name: "hostLauncher"}
+	hostlauncherSharedLibTag = dependencyTag{name: "hostlauncherSharedLib"}
+	hostStdLibTag            = dependencyTag{name: "hostStdLib"}
+	pathComponentRegexp      = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_-]*$`)
+	pyExt                    = ".py"
+	protoExt                 = ".proto"
+	pyVersion2               = "PY2"
+	pyVersion3               = "PY3"
+	internalPath             = "internal"
 )
 
 type basePropertiesProvider interface {
@@ -321,21 +323,35 @@
 	javaDataVariation := []blueprint.Variation{{"arch", android.Common.String()}}
 	ctx.AddVariationDependencies(javaDataVariation, javaDataTag, p.properties.Java_data...)
 
-	p.AddDepsOnPythonLauncherAndStdlib(ctx, hostStdLibTag, hostLauncherTag, false, ctx.Config().BuildOSTarget)
+	p.AddDepsOnPythonLauncherAndStdlib(ctx, hostStdLibTag, hostLauncherTag, hostlauncherSharedLibTag, false, ctx.Config().BuildOSTarget)
 }
 
-// AddDepsOnPythonLauncherAndStdlib will make the current module depend on the python stdlib
-// and launcher (interpreter). If autorun is true, it will use the autorun launcher instead of the
-// regular one. This function accepts a targetForDeps argument as the target to use for these
-// dependencies. For embedded launcher python binaries, the launcher that will be embedded will be
-// under the same target as the python module itself. But when precompiling python code, we need to
-// get the python launcher built for host, even if we're compiling the python module for device, so
-// we pass a different target to this function.
+// AddDepsOnPythonLauncherAndStdlib will make the current module depend on the python stdlib,
+// launcher (interpreter), and the launcher's shared libraries. If autorun is true, it will use
+// the autorun launcher instead of the regular one. This function acceps a targetForDeps argument
+// as the target to use for these dependencies. For embedded launcher python binaries, the launcher
+// that will be embedded will be under the same target as the python module itself. But when
+// precompiling python code, we need to get the python launcher built for host, even if we're
+// compiling the python module for device, so we pass a different target to this function.
 func (p *PythonLibraryModule) AddDepsOnPythonLauncherAndStdlib(ctx android.BottomUpMutatorContext,
-	stdLibTag, launcherTag blueprint.DependencyTag,
+	stdLibTag, launcherTag, launcherSharedLibTag blueprint.DependencyTag,
 	autorun bool, targetForDeps android.Target) {
 	var stdLib string
 	var launcherModule string
+	// Add launcher shared lib dependencies. Ideally, these should be
+	// derived from the `shared_libs` property of the launcher. TODO: read these from
+	// the python launcher itself using ctx.OtherModuleProvider() or similar on the result
+	// of ctx.AddFarVariationDependencies()
+	launcherSharedLibDeps := []string{
+		"libsqlite",
+	}
+	// Add launcher-specific dependencies for bionic
+	if targetForDeps.Os.Bionic() {
+		launcherSharedLibDeps = append(launcherSharedLibDeps, "libc", "libdl", "libm")
+	}
+	if targetForDeps.Os == android.LinuxMusl && !ctx.Config().HostStaticBinaries() {
+		launcherSharedLibDeps = append(launcherSharedLibDeps, "libc_musl")
+	}
 
 	switch p.properties.Actual_version {
 	case pyVersion2:
@@ -346,6 +362,7 @@
 			launcherModule = "py2-launcher-autorun"
 		}
 
+		launcherSharedLibDeps = append(launcherSharedLibDeps, "libc++")
 	case pyVersion3:
 		stdLib = "py3-stdlib"
 
@@ -356,6 +373,9 @@
 		if ctx.Config().HostStaticBinaries() && targetForDeps.Os == android.LinuxMusl {
 			launcherModule += "-static"
 		}
+		if ctx.Device() {
+			launcherSharedLibDeps = append(launcherSharedLibDeps, "liblog")
+		}
 	default:
 		panic(fmt.Errorf("unknown Python Actual_version: %q for module: %q.",
 			p.properties.Actual_version, ctx.ModuleName()))
@@ -371,6 +391,7 @@
 		ctx.AddFarVariationDependencies(stdLibVariations, stdLibTag, stdLib)
 	}
 	ctx.AddFarVariationDependencies(targetVariations, launcherTag, launcherModule)
+	ctx.AddFarVariationDependencies(targetVariations, launcherSharedLibTag, launcherSharedLibDeps...)
 }
 
 // GenerateAndroidBuildActions performs build actions common to all Python modules
@@ -574,19 +595,22 @@
 			}
 		})
 	}
-	var launcherSharedLibs android.Paths
-	var ldLibraryPath []string
 	ctx.VisitDirectDepsWithTag(hostLauncherTag, func(module android.Module) {
 		if dep, ok := module.(IntermPathProvider); ok {
 			optionalLauncher := dep.IntermPathForModuleOut()
 			if optionalLauncher.Valid() {
 				launcher = optionalLauncher.Path()
 			}
-			for _, spec := range module.TransitivePackagingSpecs() {
-				if strings.HasSuffix(spec.SrcPath().String(), ".so") {
-					launcherSharedLibs = append(launcherSharedLibs, spec.SrcPath())
-					ldLibraryPath = append(ldLibraryPath, filepath.Dir(spec.SrcPath().String()))
-				}
+		}
+	})
+	var launcherSharedLibs android.Paths
+	var ldLibraryPath []string
+	ctx.VisitDirectDepsWithTag(hostlauncherSharedLibTag, func(module android.Module) {
+		if dep, ok := module.(IntermPathProvider); ok {
+			optionalPath := dep.IntermPathForModuleOut()
+			if optionalPath.Valid() {
+				launcherSharedLibs = append(launcherSharedLibs, optionalPath.Path())
+				ldLibraryPath = append(ldLibraryPath, filepath.Dir(optionalPath.Path().String()))
 			}
 		}
 	})
