@@ -19,7 +19,11 @@ const pyodideLockFile = "pyodide-lock.json";
1919const buildPythonVersion = "3.12.6" ;
2020const buildPythonReleaseDate = "20240909" ;
2121const defaultSitePackagesDir = "__pypackages__" ;
22- const sitePackageEnvironmentVariable = "SERIOUS_PYTHON_SITE_PACKAGES" ;
22+ const sitePackagesEnvironmentVariable = "SERIOUS_PYTHON_SITE_PACKAGES" ;
23+ const flutterPackagesFlutterEnvironmentVariable =
24+ "SERIOUS_PYTHON_FLUTTER_PACKAGES" ;
25+ const allowSourceDistrosEnvironmentVariable =
26+ "SERIOUS_PYTHON_ALLOW_SOURCE_DISTRIBUTIONS" ;
2327
2428const platforms = {
2529 "iOS" : {
@@ -227,6 +231,7 @@ class PackageCommand extends Command {
227231 if (requirements.isNotEmpty) {
228232 String ? sitePackagesRoot;
229233 bool sitePackagesRootDeleted = false ;
234+ bool flutterPackagesCopied = false ;
230235 // invoke pip for every platform arch
231236 for (var arch in platforms[platform]! .entries) {
232237 if (archArg != null && arch.key != archArg) {
@@ -266,13 +271,13 @@ class PackageCommand extends Command {
266271
267272 if (isMobile) {
268273 if (! Platform .environment
269- .containsKey (sitePackageEnvironmentVariable )) {
270- throw "Environment variable is not set: $sitePackageEnvironmentVariable " ;
274+ .containsKey (sitePackagesEnvironmentVariable )) {
275+ throw "Environment variable is not set: $sitePackagesEnvironmentVariable " ;
271276 }
272277 sitePackagesRoot =
273- Platform .environment[sitePackageEnvironmentVariable ];
278+ Platform .environment[sitePackagesEnvironmentVariable ];
274279 if (sitePackagesRoot! .isEmpty) {
275- throw "Environment variable cannot be empty: $sitePackageEnvironmentVariable " ;
280+ throw "Environment variable cannot be empty: $sitePackagesEnvironmentVariable " ;
276281 }
277282 } else {
278283 sitePackagesRoot =
@@ -298,7 +303,9 @@ class PackageCommand extends Command {
298303
299304 List <String > pipArgs = ["--disable-pip-version-check" ];
300305
301- if (isMobile || isWeb) {
306+ if ((isMobile || isWeb) &&
307+ ! Platform .environment
308+ .containsKey (allowSourceDistrosEnvironmentVariable)) {
302309 pipArgs.addAll (["--only-binary" , ":all:" ]);
303310 }
304311
@@ -317,6 +324,29 @@ class PackageCommand extends Command {
317324 ...requirements
318325 ], environment: pipEnv);
319326
327+ // move $sitePackagesDir/flutter if env var is defined
328+ if (Platform .environment
329+ .containsKey (flutterPackagesFlutterEnvironmentVariable)) {
330+ var flutterPackagesRoot = Platform
331+ .environment[flutterPackagesFlutterEnvironmentVariable];
332+ var flutterPackagesRootDir = Directory (flutterPackagesRoot! );
333+ var sitePackagesFlutterDir =
334+ Directory (path.join (sitePackagesDir, "flutter" ));
335+ if (await sitePackagesFlutterDir.exists ()) {
336+ if (! flutterPackagesCopied) {
337+ stdout.writeln (
338+ "Copying Flutter packages to $flutterPackagesRoot " );
339+ if (! await flutterPackagesRootDir.exists ()) {
340+ await flutterPackagesRootDir.create (recursive: true );
341+ }
342+ await copyDirectory (sitePackagesFlutterDir,
343+ flutterPackagesRootDir, sitePackagesFlutterDir.path, []);
344+ flutterPackagesCopied = true ;
345+ }
346+ await sitePackagesFlutterDir.delete (recursive: true );
347+ }
348+ }
349+
320350 // compile packages
321351 if (compilePackages) {
322352 stdout.writeln ("Compiling app packages at $sitePackagesDir " );
0 commit comments