mirror of
https://github.com/clearml/clearml-agent
synced 2025-06-26 18:16:15 +00:00
Fix venv cache cannot reinstall package from git with http credentials
This commit is contained in:
parent
2fff28845d
commit
26d76f52ac
@ -51,10 +51,31 @@ class ExternalRequirements(SimpleSubstitution):
|
|||||||
except:
|
except:
|
||||||
freeze_base = ''
|
freeze_base = ''
|
||||||
|
|
||||||
|
req_line = self._add_vcs_credentials(req, session)
|
||||||
|
|
||||||
|
# if we have older pip version we have to make sure we replace back the package name with the
|
||||||
|
# git repository link. In new versions this is supported and we get "package @ git+https://..."
|
||||||
|
if not req.pip_new_version:
|
||||||
|
PackageManager.out_of_scope_install_package(req_line, "--no-deps")
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
freeze_post = PackageManager.out_of_scope_freeze() or ''
|
||||||
|
package_name = list(set(freeze_post['pip']) - set(freeze_base['pip']))
|
||||||
|
if package_name and package_name[0] not in self.post_install_req_lookup:
|
||||||
|
self.post_install_req_lookup[package_name[0]] = req.req.line
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# no need to force reinstall, pip will always rebuilt if the package comes from git
|
||||||
|
# and make sure the required packages are installed (if they are not it will install them)
|
||||||
|
if not PackageManager.out_of_scope_install_package(req_line):
|
||||||
|
raise ValueError("Failed installing GIT/HTTPs package \'{}\'".format(req_line))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _add_vcs_credentials(req, session):
|
||||||
req_line = req.tostr(markers=False)
|
req_line = req.tostr(markers=False)
|
||||||
if req_line.strip().startswith('-e ') or req_line.strip().startswith('--editable'):
|
if req_line.strip().startswith('-e ') or req_line.strip().startswith('--editable'):
|
||||||
req_line = re.sub(r'^(-e|--editable=?)\s*', '', req_line, count=1)
|
req_line = re.sub(r'^(-e|--editable=?)\s*', '', req_line, count=1)
|
||||||
|
|
||||||
if req.req.vcs and req_line.startswith('git+'):
|
if req.req.vcs and req_line.startswith('git+'):
|
||||||
try:
|
try:
|
||||||
url_no_frag = furl(req_line)
|
url_no_frag = furl(req_line)
|
||||||
@ -85,24 +106,7 @@ class ExternalRequirements(SimpleSubstitution):
|
|||||||
req_line = new_req_line
|
req_line = new_req_line
|
||||||
except Exception:
|
except Exception:
|
||||||
print('WARNING: Failed parsing pip git install, using original line {}'.format(req_line))
|
print('WARNING: Failed parsing pip git install, using original line {}'.format(req_line))
|
||||||
|
return req_line
|
||||||
# if we have older pip version we have to make sure we replace back the package name with the
|
|
||||||
# git repository link. In new versions this is supported and we get "package @ git+https://..."
|
|
||||||
if not req.pip_new_version:
|
|
||||||
PackageManager.out_of_scope_install_package(req_line, "--no-deps")
|
|
||||||
# noinspection PyBroadException
|
|
||||||
try:
|
|
||||||
freeze_post = PackageManager.out_of_scope_freeze() or ''
|
|
||||||
package_name = list(set(freeze_post['pip']) - set(freeze_base['pip']))
|
|
||||||
if package_name and package_name[0] not in self.post_install_req_lookup:
|
|
||||||
self.post_install_req_lookup[package_name[0]] = req.req.line
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# no need to force reinstall, pip will always rebuilt if the package comes from git
|
|
||||||
# and make sure the required packages are installed (if they are not it will install them)
|
|
||||||
if not PackageManager.out_of_scope_install_package(req_line):
|
|
||||||
raise ValueError("Failed installing GIT/HTTPs package \'{}\'".format(req_line))
|
|
||||||
|
|
||||||
def replace(self, req):
|
def replace(self, req):
|
||||||
"""
|
"""
|
||||||
@ -161,7 +165,7 @@ class OnlyExternalRequirements(ExternalRequirements):
|
|||||||
super(OnlyExternalRequirements, self).__init__(*args, **kwargs)
|
super(OnlyExternalRequirements, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def match(self, req):
|
def match(self, req):
|
||||||
return not super(OnlyExternalRequirements, self).match(req)
|
return True
|
||||||
|
|
||||||
def replace(self, req):
|
def replace(self, req):
|
||||||
"""
|
"""
|
||||||
@ -170,4 +174,6 @@ class OnlyExternalRequirements(ExternalRequirements):
|
|||||||
"""
|
"""
|
||||||
# Do not store the skipped requirements
|
# Do not store the skipped requirements
|
||||||
# mark skip package
|
# mark skip package
|
||||||
|
if super(OnlyExternalRequirements, self).match(req):
|
||||||
|
return self._add_vcs_credentials(req, self._session)
|
||||||
return Text('')
|
return Text('')
|
||||||
|
Loading…
Reference in New Issue
Block a user