Check if pip package already available before building

This commit is contained in:
Matthias Hochsteger 2024-08-28 18:04:16 +02:00
parent a009825d83
commit 18ea280388
5 changed files with 51 additions and 24 deletions

View File

@ -42,16 +42,8 @@ def is_dev_build():
return False return False
return True return True
git_version = check_output(['git', 'describe', '--tags']).decode('utf-8').strip() git_version = check_output([sys.executable, os.path.join('tests', 'utils.py'), '--get-git-version']).decode('utf-8').strip()
version = git_version[1:].split('-') version = check_output([sys.executable, os.path.join('tests', 'utils.py'), '--get-version']).decode('utf-8').strip()
if len(version)>2:
version = version[:2]
if len(version)>1:
version = '.post'.join(version)
if is_dev_build():
version += '.dev0'
else:
version = version[0]
py_install_dir = os.path.relpath(sysconfig.get_path('platlib'), sysconfig.get_path('data')).replace('\\','/') py_install_dir = os.path.relpath(sysconfig.get_path('platlib'), sysconfig.get_path('data')).replace('\\','/')

View File

@ -10,6 +10,11 @@ $env:NETGEN_ARCH = 'avx2'
$pydir=$args[0] $pydir=$args[0]
& $pydir\python.exe --version & $pydir\python.exe --version
& $pydir\python.exe -m pip install packaging
& $pydir\python.exe tests\utils.py --check-pip
if ($LASTEXITCODE -ne 0) {
exit 0
}
& $pydir\python.exe -m pip install scikit-build wheel numpy twine pybind11-stubgen & $pydir\python.exe -m pip install scikit-build wheel numpy twine pybind11-stubgen
& $pydir\python.exe -m pip install --upgrade netgen-occt==7.8.1 netgen-occt-devel==7.8.1 & $pydir\python.exe -m pip install --upgrade netgen-occt==7.8.1 netgen-occt-devel==7.8.1
& $pydir\python setup.py bdist_wheel -G"Visual Studio 16 2019" & $pydir\python setup.py bdist_wheel -G"Visual Studio 16 2019"

View File

@ -23,6 +23,8 @@ for pyversion in 312 311 310 39 38
do do
export PYDIR="/opt/python/cp${pyversion}-cp${pyversion}/bin" export PYDIR="/opt/python/cp${pyversion}-cp${pyversion}/bin"
echo $PYDIR echo $PYDIR
$PYDIR/pip install requests packaging
$PYDIR/python3 ./tests/utils.py --check-pip || continue
$PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen netgen-occt==7.8.1 netgen-occt-devel==7.8.1 $PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen netgen-occt==7.8.1 netgen-occt-devel==7.8.1
$PYDIR/pip install -i https://pypi.anaconda.org/mpi4py/simple/ --pre mpi4py $PYDIR/pip install -i https://pypi.anaconda.org/mpi4py/simple/ --pre mpi4py

View File

@ -7,6 +7,8 @@ export PATH=$PYDIR:/Applications/CMake.app/Contents/bin:$PATH
export NETGEN_CCACHE=1 export NETGEN_CCACHE=1
$PYDIR/python3 --version $PYDIR/python3 --version
$PYDIR/python3 -m pip install packaging
$PYDIR/python3 tests/utils.py --check-pip || exit 0
$PYDIR/python3 -m pip install --user numpy twine scikit-build wheel pybind11-stubgen $PYDIR/python3 -m pip install --user numpy twine scikit-build wheel pybind11-stubgen
$PYDIR/python3 -m pip install --user -U netgen-occt==7.8.1 netgen-occt-devel==7.8.1 $PYDIR/python3 -m pip install --user -U netgen-occt==7.8.1 netgen-occt-devel==7.8.1

View File

@ -1,15 +1,32 @@
from subprocess import check_output import argparse
import os import os
import platform
import requests import requests
import sys import sys
import argparse from subprocess import check_output
from packaging import tags
from packaging.utils import parse_wheel_filename
_sys_tags = None
def _is_wheel_compatible(wheel_filename: str):
global _sys_tags
try:
if _sys_tags is None:
_sys_tags = set(tags.sys_tags())
for tag in parse_wheel_filename(wheel_filename)[-1]:
if tag in _sys_tags:
return True
return False
except Exception as e:
print(f"Error parsing wheel file: {e}")
return False
def is_package_available(package_name, version): def is_package_available(package_name, version):
architecture = platform.machine()
py_version = "cp" + "".join(platform.python_version_tuple()[:2])
url = f"https://pypi.org/pypi/{package_name}/{version}/json" url = f"https://pypi.org/pypi/{package_name}/{version}/json"
try: try:
@ -21,7 +38,7 @@ def is_package_available(package_name, version):
for file_info in data["urls"]: for file_info in data["urls"]:
name = file_info.get("filename", "") name = file_info.get("filename", "")
if name.endswith(".whl") and py_version in name and architecture in name: if _is_wheel_compatible(name):
return True return True
return False return False
@ -42,10 +59,12 @@ def is_dev_build():
return True return True
def get_git_version(cwd):
return check_output(["git", "describe", "--tags"], cwd=cwd).decode("utf-8").strip()
def get_version(cwd): def get_version(cwd):
git_version = ( git_version = get_git_version(cwd)
check_output(["git", "describe", "--tags"], cwd=cwd).decode("utf-8").strip()
)
version = git_version[1:].split("-") version = git_version[1:].split("-")
if len(version) > 2: if len(version) > 2:
@ -53,7 +72,7 @@ def get_version(cwd):
if len(version) > 1: if len(version) > 1:
version = ".post".join(version) version = ".post".join(version)
if is_dev_build(): if is_dev_build():
version += ".dev0" version += ".dev2"
else: else:
version = version[0] version = version[0]
@ -67,6 +86,11 @@ def main():
action="store_true", action="store_true",
help="Check if package is on pypi already, fails with exit code 1 if available", help="Check if package is on pypi already, fails with exit code 1 if available",
) )
parser.add_argument(
"--get-git-version",
action="store_true",
help="Generate the current package git version string",
)
parser.add_argument( parser.add_argument(
"--get-version", "--get-version",
action="store_true", action="store_true",
@ -82,10 +106,12 @@ def main():
args = parser.parse_args() args = parser.parse_args()
version = get_version(args.dir) if args.get_git_version:
if args.get_version: print(get_git_version(args.dir))
print(version) elif args.get_version:
print(get_version(args.dir))
elif args.check_pip: elif args.check_pip:
version = get_version(args.dir)
if is_package_available(args.package, version): if is_package_available(args.package, version):
print(f"{args.package}=={version} is already on pypi") print(f"{args.package}=={version} is already on pypi")
sys.exit(1) sys.exit(1)