diff --git a/trains_agent/helper/package/base.py b/trains_agent/helper/package/base.py index 1fce1a6..6ed2047 100644 --- a/trains_agent/helper/package/base.py +++ b/trains_agent/helper/package/base.py @@ -66,7 +66,19 @@ class PackageManager(object): pass def upgrade_pip(self): - return self._install("pip"+self.get_pip_version(), "--upgrade") + result = self._install("pip"+self.get_pip_version(), "--upgrade") + packages = self.run_with_env(('list',), output=True).splitlines() + # p.split is ('pip', 'x.y.z') + pip = [p.split() for p in packages if len(p.split()) == 2 and p.split()[0] == 'pip'] + if pip: + # noinspection PyBroadException + try: + from .requirements import MarkerRequirement + pip = pip[0][1].split('.') + MarkerRequirement.pip_new_version = bool(int(pip[0]) >= 20) + except Exception: + pass + return result def get_python_command(self, extra=()): # type: (...) -> Executable diff --git a/trains_agent/helper/package/requirements.py b/trains_agent/helper/package/requirements.py index 76bf637..6374e34 100644 --- a/trains_agent/helper/package/requirements.py +++ b/trains_agent/helper/package/requirements.py @@ -35,6 +35,10 @@ class FatalSpecsResolutionError(Exception): @six.python_2_unicode_compatible class MarkerRequirement(object): + # if True pip version above 20.x and with support for "package @ scheme://link" + # default is True + pip_new_version = True + def __init__(self, req): # type: (Requirement) -> None self.req = req @@ -65,6 +69,10 @@ class MarkerRequirement(object): '@{}'.format(self.revision) if self.revision else '', '#subdirectory={}'.format(self.subdirectory) if self.subdirectory else '' ] + elif self.pip_new_version and self.uri and self.name and self.line: + # package @ https://example.com/somewheel.whl + # leave the line as is, let pip handle it + return self.line else: parts = [self.uri] @@ -492,6 +500,9 @@ class RequirementsManager(object): raise def replace_back(self, requirements): + if self.translator: + requirements = self.translator.replace_back(requirements) + for h in self.handlers: try: requirements = h.replace_back(requirements)