@@ -289,13 +289,56 @@ def get_flatpak_runtime_scope(runtime: str) -> str:
289289 sys .exit (f"Runtime { runtime } not found for user or system" )
290290
291291
292+ def handle_req_env_markers (requirements_text : str ) -> str :
293+ def handle_sys_platform (marker : str ) -> bool :
294+ pattern = r'sys_platform\s*(==|!=)\s*["\']([^"\']+)["\']'
295+
296+ for match in re .finditer (pattern , marker , re .IGNORECASE ):
297+ op , platform = match .group (1 ), match .group (2 ).lower ()
298+ if (op == "==" and not platform .startswith ("linux" )) or (
299+ op == "!=" and platform .startswith ("linux" )
300+ ):
301+ return False
302+ return True
303+
304+ marker_handlers = (handle_sys_platform ,)
305+
306+ filtered_lines = []
307+ ignored_lines = []
308+
309+ for line in requirements_text .split ("\n " ):
310+ stripped = line .strip ()
311+
312+ if not stripped or stripped .startswith ("#" ):
313+ filtered_lines .append (line )
314+ continue
315+
316+ if ";" in line :
317+ marker = line .split (";" , 1 )[1 ].strip ()
318+ should_include = all (handler (marker ) for handler in marker_handlers )
319+ else :
320+ should_include = True
321+
322+ if should_include :
323+ filtered_lines .append (line )
324+ else :
325+ ignored_lines .append (line )
326+
327+ if ignored_lines :
328+ print (f"Ignored packages: { ignored_lines } " )
329+
330+ return "\n " .join (filtered_lines )
331+
332+
292333packages = []
293334if opts .requirements_file :
294335 requirements_file_input = os .path .expanduser (opts .requirements_file )
295336 try :
296337 with open (requirements_file_input ) as in_req_file :
297338 reqs = parse_continuation_lines (in_req_file )
298- reqs_as_str = "\n " .join ([r .split ("--hash" )[0 ] for r in reqs ])
339+ reqs_as_str = handle_req_env_markers (
340+ "\n " .join ([r .split ("--hash" )[0 ] for r in reqs ])
341+ )
299342 reqs_list_raw = reqs_as_str .splitlines ()
300343 py_version_regex = re .compile (
301344 r";.*python_version .+$"
@@ -348,11 +391,12 @@ def get_flatpak_runtime_scope(runtime: str) -> str:
348391 requirements_file_output = req_file .name
349392
350393elif opts .packages :
351- packages = list (requirements .parse ("\n " .join (opts .packages )))
394+ filtered_packages_str = handle_req_env_markers ("\n " .join (opts .packages ))
395+ packages = list (requirements .parse (filtered_packages_str ))
352396 with tempfile .NamedTemporaryFile (
353397 "w" , delete = False , prefix = "requirements."
354398 ) as req_file :
355- req_file .write (" \n " . join ( opts . packages ) )
399+ req_file .write (filtered_packages_str )
356400 requirements_file_output = req_file .name
357401elif not len (sys .argv ) > 1 :
358402 sys .exit ("Please specifiy either packages or requirements file argument" )
0 commit comments