From 6337c913dbbe916ee56f5eb600d5b238ea6284ab Mon Sep 17 00:00:00 2001 From: stonebig Date: Sat, 12 Jul 2025 14:39:10 +0200 Subject: [PATCH 1/2] fixes lost in translation to wppm --- wppm/wppm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wppm/wppm.py b/wppm/wppm.py index 1f852236..1c9d4f43 100644 --- a/wppm/wppm.py +++ b/wppm/wppm.py @@ -4,7 +4,7 @@ # Copyright © 2012 Pierre Raybaut # Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/ # Licensed under the terms of the MIT License -# (see winpython/__init__.py for details) +# (see wppm/__init__.py for details) import os import re @@ -358,8 +358,8 @@ def main(test=False): sys.exit() if utils.is_python_distribution(args.target): dist = Distribution(args.target, verbose=True) - cmd_fix = rf"from winpython import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=False)" - cmd_mov = rf"from winpython import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=True)" + cmd_fix = rf"from wppm import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=False)" + cmd_mov = rf"from wppm import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=True)" if args.fix: # dist.patch_standard_packages('pip', to_movable=False) # would fail on wppm.exe p = subprocess.Popen(["start", "cmd", "/k",dist.python_exe, "-c" , cmd_fix], shell = True, cwd=dist.target) From c3681c7f121661d659c287268e983ab978b7a149 Mon Sep 17 00:00:00 2001 From: stonebig Date: Sat, 12 Jul 2025 18:56:04 +0200 Subject: [PATCH 2/2] move essential package installation out of make.py --- generate_a_winpython_distro.bat | 10 +++++++--- make.py | 32 +++++--------------------------- 2 files changed, 12 insertions(+), 30 deletions(-) diff --git a/generate_a_winpython_distro.bat b/generate_a_winpython_distro.bat index 0b64a596..cf498951 100644 --- a/generate_a_winpython_distro.bat +++ b/generate_a_winpython_distro.bat @@ -61,7 +61,7 @@ call %my_buildenv%\scripts\env.bat REM Create basic build infrastructure echo "(%date% %time%) Create basic build infrastructure">>%my_archive_log% -python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', basedir_wpy=r'%my_WINPYDIRBASE%', verbose=True, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%')">>%my_archive_log% +python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', basedir_wpy=r'%my_WINPYDIRBASE%', verbose=True, flavor='%my_flavor%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%')">>%my_archive_log% REM Check infrastructure is in place echo "(%date% %time%) Check infrastructure">>%my_archive_log% @@ -87,7 +87,11 @@ echo -------------------------------------- >>%my_archive_log% set path=%my_original_path% call %my_WINPYDIRBASE%\scripts\env.bat -rem Install pre-requirements if any +rem python -m ensurepip +rem insta essential packages +python -m pip install --upgrade pip setuptools wheel wppm -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >>%my_archive_log% + +rem Install complementary pre-requirements if any if not "Z%my_requirements_pre%Z"=="ZZ" ( if "%my_find_links_pre%"=="" set my_find_links_pre=%my_find_links% python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >> %my_archive_log% @@ -100,7 +104,7 @@ echo -------------------------------------- >>%my_archive_log% echo "(%date% %time%) Add requirement packages">>%my_archive_log% echo -------------------------------------- >>%my_archive_log% python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >>%my_archive_log% -python -c "from wppm import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('spyder', to_movable=True)" +python -c "from wppm import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('', to_movable=True)" REM Add Wheelhouse (to replace per pip lock direct ? would allow paralellism) echo -------------------------------------- >>%my_archive_log% diff --git a/make.py b/make.py index 445b8d1d..eb2ae678 100644 --- a/make.py +++ b/make.py @@ -14,8 +14,6 @@ # Define constant paths for clarity PORTABLE_DIRECTORY = Path(__file__).parent / "portable" - -# Ensure necessary directories exist at the start assert PORTABLE_DIRECTORY.is_dir(), f"Portable directory not found: {PORTABLE_DIRECTORY}" def copy_items(source_directories: list[Path], target_directory: Path, verbose: bool = False): @@ -46,7 +44,7 @@ class WinPythonDistributionBuilder: def __init__(self, build_number: int, release_level: str, target_directory: Path, wheels_directory: Path, tools_directories: list[Path] = None, verbose: bool = False, - install_options: list[str] = None, flavor: str = ""): + flavor: str = ""): """ Initializes the WinPythonDistributionBuilder. Args: @@ -56,7 +54,6 @@ def __init__(self, build_number: int, release_level: str, target_directory: Path wheels_directory: Directory containing wheel files for packages. tools_directories: List of directories containing development tools to include. verbose: Enable verbose output. - install_options: Additional pip install options. flavor: WinPython flavor (e.g., "Barebone"). """ self.build_number = build_number @@ -67,7 +64,6 @@ def __init__(self, build_number: int, release_level: str, target_directory: Path self.verbose = verbose self.winpython_directory: Path | None = None self.distribution: wppm.Distribution | None = None - self.install_options = install_options or [] self.flavor = flavor self.python_zip_file: Path = self._get_python_zip_file() self.python_name = self.python_zip_file.stem @@ -141,12 +137,10 @@ def _create_initial_batch_scripts(self): def build(self, winpy_dir: Path = None): """Make or finalise WinPython distribution in the target directory""" print(f"Building WinPython with Python archive: {self.python_zip_file.name}") - if winpy_dir is None: - raise RuntimeError("WinPython base directory to create is undefined") self.winpython_directory = winpy_dir self._print_action(f"Creating WinPython {self.winpython_directory} base directory") - if self.winpython_directory.is_dir(): + if self.winpython_directory.is_dir() and len(self.winpython_directory.parts)>=4: shutil.rmtree(self.winpython_directory) os.makedirs(self.winpython_directory, exist_ok=True) # preventive re-Creation of settings directory @@ -157,18 +151,10 @@ def build(self, winpy_dir: Path = None): self._copy_essential_files() self._create_initial_batch_scripts() - utils.python_execmodule("ensurepip", self.distribution.target) - self.distribution.patch_standard_packages("pip") - essential_packages = ["pip", "setuptools", "wheel", "wppm"] - for package_name in essential_packages: - actions = ["install", "--upgrade", "--pre", package_name] + self.install_options - self._print_action(f"Piping: {' '.join(actions)}") - self.distribution.do_pip_action(actions) - self.distribution.patch_standard_packages(package_name) def make_all(build_number: int, release_level: str, basedir_wpy: Path = None, - verbose: bool = False, install_options=["--no-index"], - flavor: str = "", find_links: str | list[Path] = None, + verbose: bool = False, + flavor: str = "", source_dirs: Path = None, toolsdirs: str | list[Path] = None, ): """ @@ -178,18 +164,13 @@ def make_all(build_number: int, release_level: str, basedir_wpy: Path = None, release_level: release level (e.g. 'beta1', '') [str] basedir_wpy: top directory of the build (c:\...\Wpy...) verbose: Enable verbose output (bool). - install_options: pip options (r'--no-index --pre --trusted-host=None') flavor: WinPython flavor (str). - find_links: package directories (r'D:\Winpython\packages.srcreq') - source_dirs: the python.zip + rebuilt winpython wheel package directory + source_dirs: the python.zip toolsdirs: Directory with development tools r'D:\WinPython\basedir34\t.Slim' """ assert basedir_wpy is not None, "The *winpython_dirname* directory must be specified" tools_dirs_list = parse_list_argument(toolsdirs, ",") - install_options_list = parse_list_argument(install_options, " ") - find_links_dirs_list = parse_list_argument(find_links, ",") - find_links_options = [f"--find-links={link}" for link in find_links_dirs_list + [source_dirs]] winpy_dir = Path(basedir_wpy) utils.print_box(f"Making WinPython at {winpy_dir}") @@ -198,7 +179,6 @@ def make_all(build_number: int, release_level: str, basedir_wpy: Path = None, build_number, release_level, winpy_dir.parent, wheels_directory=source_dirs, tools_directories=[Path(d) for d in tools_dirs_list], verbose=verbose, - install_options=install_options_list + find_links_options, flavor=flavor ) builder.build(winpy_dir=winpy_dir) @@ -212,8 +192,6 @@ def make_all(build_number: int, release_level: str, basedir_wpy: Path = None, basedir_wpy=r"D:\WinPython\bd314\budot\WPy64-31401b3", verbose=True, flavor="dot", - install_options=r"--no-index --pre --trusted-host=None", - find_links=r"D:\Winpython\packages.srcreq", source_dirs=r"D:\WinPython\bd314\packages.win-amd64", toolsdirs=r"D:\WinPython\bd314\t.Slim", )