diff --git a/CHANGES.txt b/CHANGES.txt index 445206833..b36263a83 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -14,6 +14,7 @@ https://mhammond.github.io/pywin32_installers.html. Coming in build 309, as yet unreleased -------------------------------------- +* Added support for relative path for `pywin32_postinstall`'s `-destination` argument (#2447, @Avasam) * Removed param `hIcon` from `win32comext.shell.ShellExecuteEx`. It was unusable since Windows Vista (#2423, @Avasam) * Fixed `nbios.NCBStruct` packing (#2406, @Avasam) * Restored axdebug builds on Python 3.10 (#2416, @Avasam) diff --git a/pywin32_postinstall.py b/pywin32_postinstall.py index e90e354d9..6974c8eb5 100644 --- a/pywin32_postinstall.py +++ b/pywin32_postinstall.py @@ -642,9 +642,12 @@ def uninstall(lib_dir): # Out of principle, we're still not using system exits. -def verify_destination(location): +def verify_destination(location: str) -> str: + location = os.path.abspath(location) if not os.path.isdir(location): - raise argparse.ArgumentTypeError(f'Path "{location}" does not exist!') + raise argparse.ArgumentTypeError( + f'Path "{location}" is not an existing directory!' + ) return location diff --git a/setup.py b/setup.py index b9a664f44..ba65669e5 100644 --- a/setup.py +++ b/setup.py @@ -856,17 +856,11 @@ def run(self): This is only run for local installs. Wheel-based installs won't run this code. """ install.run(self) - # If self.root has a value, it means we are being "installed" into some other - # directory than Python itself - in which case we must *not* run our installer. - # bdist_wininst used to trigger this by using a temp directory. - # Is this still a concern ? - if self.root: - print( - "Not executing post install script when " - + f"not installing in Python itself (self.root={self.root})" - ) - return - self.execute(self._postinstall, (), msg="Executing post install script...") + # Hacky, skip for build-only commands + if "build" in sys.argv: + print("Skipping post install script for build commands.") + else: + self.execute(self._postinstall, (), msg="Executing post install script...") def _postinstall(self): filename = os.path.join(self.install_scripts, "pywin32_postinstall.py") @@ -874,17 +868,16 @@ def _postinstall(self): raise RuntimeError(f"Can't find '{filename}'") # As of setuptools>=74.0.0, we no longer need to # be concerned about distutils calling win32api - subprocess.Popen( - [ + subprocess.check_call( + ( sys.executable, filename, "-install", "-destination", self.install_lib, - "-quiet", "-wait", str(os.getpid()), - ] + ) )