support overriding pyqt via env var

Documentation to come later.
This commit is contained in:
Damien Elmes 2020-12-30 13:36:57 +10:00
parent 3f3f4b5c36
commit 88553acb0d

View file

@ -9,6 +9,7 @@ import os
import shutil
import sys
import re
import subprocess
from pip._internal.commands import create_command
from pip._vendor import pkg_resources
@ -76,12 +77,15 @@ def install_package(pkg, directory, pip_args):
return pkginfo.Wheel(dist_info)
def _cleanup(directory, pattern):
for p in glob.glob(os.path.join(directory, pattern)):
shutil.rmtree(p)
fix_none = re.compile(r"(\s*None) =")
def copy_and_fix_pyi(source, dest):
"Fix broken PyQt types."
with open(source) as input_file:
@ -90,6 +94,7 @@ def copy_and_fix_pyi(source, dest):
line = fix_none.sub(r"\1_ =", line)
output_file.write(line)
def merge_files(root, source):
for dirpath, _dirnames, filenames in os.walk(source):
target_dir = os.path.join(root, os.path.relpath(dirpath, source))
@ -104,22 +109,40 @@ def merge_files(root, source):
else:
shutil.copy2(source_path, target_path)
def main():
base = sys.argv[1]
packages = [
("pyqt5", "pyqt5==5.15.2"),
("pyqtwebengine", "pyqtwebengine==5.15.2"),
("pyqt5-sip", "pyqt5_sip==12.8.1"),
]
local_site_packages = os.environ.get("PYTHON_SITE_PACKAGES")
if local_site_packages:
subprocess.run(
[
"rsync",
"-ai",
"--include=PyQt**",
"--exclude=*",
local_site_packages,
base + "/",
],
check=True,
)
with open(os.path.join(base, "__init__.py"), "w") as file:
pass
for (name, with_version) in packages:
# install package in subfolder
folder = os.path.join(base, "temp")
_pkg = install_package(with_version, folder, [])
# merge into parent
merge_files(base, folder)
shutil.rmtree(folder)
else:
packages = [
("pyqt5", "pyqt5==5.15.2"),
("pyqtwebengine", "pyqtwebengine==5.15.2"),
("pyqt5-sip", "pyqt5_sip==12.8.1"),
]
for (name, with_version) in packages:
# install package in subfolder
folder = os.path.join(base, "temp")
_pkg = install_package(with_version, folder, [])
# merge into parent
merge_files(base, folder)
shutil.rmtree(folder)
# add missing py.typed file
with open(os.path.join(base, "py.typed"), "w") as file: