updates
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,72 @@
|
||||
import os
|
||||
import logging
|
||||
from typing import Optional, Dict
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_path() -> Optional[str]:
|
||||
"""
|
||||
Get the PATH environment variable with pyapp-related paths filtered out.
|
||||
|
||||
This is necessary when running as a pyapp binary to prevent the bundled
|
||||
Python from interfering with system tools.
|
||||
|
||||
Returns:
|
||||
str or None: The filtered PATH string (or original PATH if not in PYAPP environment),
|
||||
or None if PATH is not set
|
||||
"""
|
||||
# If not in PYAPP environment, return original PATH
|
||||
if "PYAPP" not in os.environ:
|
||||
return os.environ.get("PATH")
|
||||
|
||||
# If PATH is not set, return None
|
||||
if "PATH" not in os.environ:
|
||||
return None
|
||||
|
||||
logger.debug(
|
||||
"Binary environment detected, filtering internal Python path from PATH"
|
||||
)
|
||||
|
||||
original_path = os.environ["PATH"]
|
||||
path_parts = original_path.split(os.pathsep)
|
||||
|
||||
filtered_paths = []
|
||||
removed_paths = []
|
||||
|
||||
for path in path_parts:
|
||||
path_lower = path.lower()
|
||||
if "pyapp" in path_lower and "safety" in path_lower:
|
||||
removed_paths.append(path)
|
||||
logger.debug(f"Removing internal Python path from PATH: {path}")
|
||||
else:
|
||||
filtered_paths.append(path)
|
||||
|
||||
if removed_paths:
|
||||
filtered_path = os.pathsep.join(filtered_paths)
|
||||
logger.info(f"Filtered {len(removed_paths)} internal Python path(s) from PATH")
|
||||
logger.debug(
|
||||
f"Original PATH entries: {len(path_parts)}, Filtered PATH entries: {len(filtered_paths)}"
|
||||
)
|
||||
return filtered_path
|
||||
|
||||
return original_path
|
||||
|
||||
|
||||
def get_env() -> Dict[str, str]:
|
||||
"""
|
||||
Get a copy of the environment with pyapp-related paths filtered from PATH.
|
||||
|
||||
This is useful for subprocess calls to prevent the bundled Python from
|
||||
interfering with system tools.
|
||||
|
||||
Returns:
|
||||
dict: A copy of os.environ with filtered PATH
|
||||
"""
|
||||
env = os.environ.copy()
|
||||
filtered_path = get_path()
|
||||
|
||||
if filtered_path is not None:
|
||||
env["PATH"] = filtered_path
|
||||
|
||||
return env
|
||||
Reference in New Issue
Block a user