It seems the URL is internally rewritten incorrectly, since the output logs the URL with the plus symbol replaced by a space (%20).
Pipenv should install the VCS dependency without errors.
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
⠋
Building requirements...
Locking...
Resolving dependencies...
�
⠙ Locking...�
⠹ Locking...�
⠸ Locking...�
⠼ Locking...�
⠴ Locking...�
⠦ Locking...�
⠧ Locking...�
⠇ Locking...�
⠏ Locking...�
⠋ Locking...�
⠙ Locking...ERROR:pip.subprocessor:Command errored out with exit status 128:
command: git clone -q 'https://gitlab%20deploy-token-3:****@gitlab.aai.lab/tms/tms-core.git' /tmp/pipenv-cgcmg1hk-src/tms
cwd: None
Complete output (2 lines):
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://gitlab.aai.lab/tms/tms-core.git/'
----------------------------------------
�
⠹ Locking...�✘ Locking Failed!
Traceback (most recent call last):
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 807, in <module>
main()
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 802, in main
_main(parsed.pre, parsed.clear, parsed.verbose, parsed.system, parsed.write,
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 785, in _main
resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 746, in resolve_packages
results, resolver = resolve(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 728, in resolve
return resolve_deps(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1378, in resolve_deps
results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1090, in actually_resolve_deps
resolver = Resolver.create(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 647, in create
constraints, skipped, index_lookup, markers_lookup = cls.get_metadata(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 462, in get_metadata
constraint_update, lockfile_update = cls.get_deps_from_req(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 540, in get_deps_from_req
req_list, lockfile = get_vcs_deps(reqs=[req])
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1874, in get_vcs_deps
with temp_path(), locked_repository(requirement) as repo:
File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
return next(self.gen)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 2031, in locked_repository
with requirement.req.locked_vcs_repo(src_dir=src_dir) as repo:
File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
return next(self.gen)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/requirements.py", line 2194, in locked_vcs_repo
vcsrepo = self.get_vcs_repo(src_dir=src_dir)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/requirements.py", line 2153, in get_vcs_repo
vcsrepo.obtain()
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/vcs.py", line 77, in obtain
self.repo_backend.obtain(self.checkout_directory, self.parsed_url)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/versioncontrol.py", line 527, in obtain
self.fetch_new(dest, url, rev_options)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/git.py", line 225, in fetch_new
self.run_command(make_command('clone', '-q', url, dest))
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/versioncontrol.py", line 660, in run_command
return call_subprocess(cmd, show_stdout, cwd,
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/utils/subprocess.py", line 242, in call_subprocess
raise InstallationError(exc_msg)
pipenv.patched.notpip._internal.exceptions.InstallationError: Command errored out with exit status 128: git clone -q 'https://gitlab%20deploy-token-3:****@gitlab.aai.lab/tms/tms-core.git' /tmp/pipenv-cgcmg1hk-src/tms Check the logs for full command output.
ERROR:pip.subprocessor:Command errored out with exit status 128:
command: git clone -q 'https://gitlab%20deploy-token-3:****@gitlab.aai.lab/tms/tms-core.git' /tmp/pipenv-cgcmg1hk-src/tms
cwd: None
Complete output (2 lines):
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://gitlab.aai.lab/tms/tms-core.git/'
----------------------------------------
Traceback (most recent call last):
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 807, in <module>
main()
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 802, in main
_main(parsed.pre, parsed.clear, parsed.verbose, parsed.system, parsed.write,
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 785, in _main
resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 746, in resolve_packages
results, resolver = resolve(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/resolver.py", line 728, in resolve
return resolve_deps(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1378, in resolve_deps
results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1090, in actually_resolve_deps
resolver = Resolver.create(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 647, in create
constraints, skipped, index_lookup, markers_lookup = cls.get_metadata(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 462, in get_metadata
constraint_update, lockfile_update = cls.get_deps_from_req(
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 540, in get_deps_from_req
req_list, lockfile = get_vcs_deps(reqs=[req])
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 1874, in get_vcs_deps
with temp_path(), locked_repository(requirement) as repo:
File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
return next(self.gen)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/utils.py", line 2031, in locked_repository
with requirement.req.locked_vcs_repo(src_dir=src_dir) as repo:
File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
return next(self.gen)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/requirements.py", line 2194, in locked_vcs_repo
vcsrepo = self.get_vcs_repo(src_dir=src_dir)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/requirements.py", line 2153, in get_vcs_repo
vcsrepo.obtain()
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/vendor/requirementslib/models/vcs.py", line 77, in obtain
self.repo_backend.obtain(self.checkout_directory, self.parsed_url)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/versioncontrol.py", line 527, in obtain
self.fetch_new(dest, url, rev_options)
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/git.py", line 225, in fetch_new
self.run_command(make_command('clone', '-q', url, dest))
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/vcs/versioncontrol.py", line 660, in run_command
return call_subprocess(cmd, show_stdout, cwd,
File "/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv/patched/notpip/_internal/utils/subprocess.py", line 242, in call_subprocess
raise InstallationError(exc_msg)
pipenv.patched.notpip._internal.exceptions.InstallationError: Command errored out with exit status 128: git clone -q 'https://gitlab%20deploy-token-3:****@gitlab.aai.lab/tms/tms-core.git' /tmp/pipenv-cgcmg1hk-src/tms Check the logs for full command output.
Issue description
Running
pipenv installwith a Git VCS dependency that has a plus symbol in the HTTP basic auth part of the URL produces anInstallationErrordue to a failed HTTP basic authentication.It seems the URL is internally rewritten incorrectly, since the output logs the URL with the plus symbol replaced by a space (
%20).The behaviour was not observed in
pipenv==2018.11.26, but occurs in latestpipenv==2020.5.28.Expected result
Pipenv should install the VCS dependency without errors.
Actual result
pipenv installraises anInstallationError. Note the Git clone URL in the error message:git clone -q 'https://gitlab%20deploy-token-3:****@gitlab.aai.lab/tms/tms-core.git', which contains a space character instead of the plus sign:Steps to replicate
Command:
pipenv install -dPipfile:
$ pipenv --support
Pipenv version:
'2020.5.28'Pipenv location:
'/home/adriano/.virtualenvs/pipenv2020/lib/python3.8/site-packages/pipenv'Python location:
'/home/adriano/.virtualenvs/pipenv2020/bin/python'Python installations found:
3.8.2:/home/adriano/.virtualenvs/pipenv2020/bin/python33.8.2:/home/adriano/.virtualenvs/pipenv2020/bin/python3.83.8.2:/home/adriano/.virtualenvs/pipenv2020/bin/python33.8.2:/home/adriano/.virtualenvs/pipenv2020/bin/python3.83.8.2:/usr/bin/python33.8.2:/usr/bin/python3.83.8.2:/bin/python33.8.2:/bin/python3.83.7.7:/home/adriano/.pyenv/versions/3.7.7/bin/python32.7.18:/usr/bin/python2.72.7.18:/usr/bin/python22.7.18:/bin/python2.72.7.18:/bin/python2PEP 508 Information:
System environment variables:
SHELLLSCOLORSWINDOWIDPYENV_HOOK_PATHCOLORTERMPYENV_SHELLCSF_MDTVTexturesDirectoryLESSXDG_SESSION_PATHCSF_DrawPluginDefaultsI3SOCKLC_ADDRESSCSF_LANGUAGESSH_AUTH_SOCKCSF_MIGRATION_TYPESDESKTOP_SESSIONLC_MONETARYSSH_AGENT_PIDCSF_OCCTResourcePathCSF_STEPDefaultsCLOUDSDK_PYTHON_ARGSPYENV_VERSIONGTK_MODULESXDG_SEATPWDXDG_SESSION_DESKTOPLOGNAMEXDG_SESSION_TYPEDRAWHOMEXAUTHORITYCSF_StandardLiteDefaultsXDG_GREETER_DATA_DIRVIRTUALENVWRAPPER_SCRIPTHOMELC_PAPERLANGLS_COLORSXDG_CURRENT_DESKTOPVIRTUAL_ENVVTE_VERSIONCLOUDSDK_ROOT_DIRVIRTUALENVWRAPPER_WORKON_CDXDG_SEAT_PATHCSF_ShadersDirectoryCSF_EXCEPTION_PROMPTPYENV_DIRCSF_XmlOcafResourceCLOUDSDK_PYTHONWORKON_HOMECSF_SHMessageXDG_SESSION_CLASSTERMZSHGOOGLE_CLOUD_SDK_HOMEUSERCSF_StandardDefaultsCSF_IGESDefaultsVIRTUALENVWRAPPER_PROJECT_FILENAMEDISPLAYCSF_XCAFDefaultsSHLVLPAGERLC_MESSAGESLC_MEASUREMENTXDG_VTNRCSF_PluginDefaultsCSF_TObjMessageXDG_SESSION_IDCASROOTXDG_RUNTIME_DIRPYENV_ROOTLC_TIMECSF_XSMessageMMGT_CLEARPATHCSF_TObjDefaultsVIRTUALENVWRAPPER_HOOK_DIRGDMSESSIONDBUS_SESSION_BUS_ADDRESSMAILDRAWDEFAULTOLDPWDPIP_DISABLE_PIP_VERSION_CHECKPYTHONDONTWRITEBYTECODEPIP_SHIMS_BASE_MODULEPIP_PYTHON_PATHPYTHONFINDER_IGNORE_UNSUPPORTEDPipenv–specific environment variables:
Debug–specific environment variables:
PATH:/usr/share/pyenv/libexec:/home/adriano/.virtualenvs/pipenv2020/bin:/home/adriano/.yarn/bin:/home/adriano/.yarn/bin:/home/adriano/.config/yarn/global/node_modules/.bin:/home/adriano/.pyenv/shims:/home/adriano/.pyenv/bin:/home/adriano/.local/bin:/opt/google-cloud-sdk/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/adriano/.local/binSHELL:/usr/bin/zshLANG:en_US.UTF-8PWD:/home/adriano/playground/pipenv-2020-url-sanitationVIRTUAL_ENV:/home/adriano/.virtualenvs/pipenv2020Contents of
Pipfile('/home/adriano/playground/pipenv-2020-url-sanitation/Pipfile'):