Pip: рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ URL рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо "@" рдореЗрдВ рд╣реИ, рдкрд╛рдЗрдк 19.2 рдореЗрдВ "рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЬреБрд▓ре░ 2019  ┬╖  66рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/pip

рд╡рд╛рддрд╛рд╡рд░рдг

  • рдкрд╛рдЗрдк рд╕рдВрд╕реНрдХрд░рдг: 19.2
  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: 3.6.8
  • рдУрдПрд╕: ubuntu 18.04

рд╡рд┐рд╡рд░рдг
рдкрд╛рдЗрдк -19.2 рд╕реЗ рдкрд╛рдЗрдк -19.2 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж --extra-index-url рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

рддреНрд░реБрдЯрд┐: рдПрдХ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реЛ_рдирд╛рдо (рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ: рдХреЛрдИ рдирд╣реАрдВ)
рддреНрд░реБрдЯрд┐: рдХреЛрдИ рдорд┐рд▓рд╛рди рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬ_рдирд╛рдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛

19.1.1 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

finder auto-locked bug

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

+1
рд╣рд╛рдБред рд╣рдорд╛рд░реЗ рд╕рд╛рде рднреА рд╣реБрдЖред

рд╕рднреА 66 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1
рд╣рд╛рдБред рд╣рдорд╛рд░реЗ рд╕рд╛рде рднреА рд╣реБрдЖред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рдЗрдк -19.2 рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИ:

Looking in indexes: https://<email.com>:****@<artifactory_host>/artifactory/api/pypi/pypi-virtual/simple
Collecting setuptools
ERROR: Could not install packages due to an EnvironmentError: Failed to parse: https://<email.com>:[secure]@<artifactory_host>/artifactory/api/pypi/pypi-virtual/simple/setuptools/

рдпрд╣ рдкрд╛рдЗрдк -19.1.1 рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@ рдЯреАрдЯреАрдЖрд░рдПрдЪ рдиреЗ рд╕рд┐рд░реНрдл рд╡рд╣реА рджреЗрдЦрд╛ рдФрд░ # 6776 рдЦреЛрд▓реЗрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ред

@bomri , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ --verbose рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
https://github.com/urllib3/urllib3/issues/1640
https://github.com/urllib3/urllib3/pull/1586

рд╣рдорд╛рд░реЗ рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред

рд╣реИрд▓реЛ рдпрд╛рд░реЛ! рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдпрд╣рд╛рдБ chiming рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд┐ рдЖрдк рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдкрд░ GitHub рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рдЗрд╕ рддрд░рд╣ рд╣рдо "рдореБрдЭреЗ рднреА" рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛, рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЦреБрдж рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ y'A рдХреЛ рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред ЁЯЩГ

@chrahunt --verbose рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдкрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ pypi.org рдкрд░ 404 рдорд┐рд▓рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкреИрдХреЗрдЬ рд╡рд╣рд╛рдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ) рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЕрдкрдиреЗ pypi рд╕рд░реНрд╡рд░ рд╕реЗ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

403 рдХреНрд▓рд╛рдЗрдВрдЯ рддреНрд░реБрдЯрд┐: url рдХреЗ рд▓рд┐рдП рдирд┐рд╖рд┐рджреНрдз

рд╢рд╛рдпрдж рдпрд╣ рдЯреЛрдХрди рдЖрдИрдбреА рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреИрд╕реЗ @brainerazer рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕рдиреЗ рд╣рдореЗрдВ рднреА рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдЕрдЧрд░ рдпрд╣ рдореБрджреНрджрд╛ urllib3 рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП @brainerazer рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рдорд╛рд░рд╛ рдореБрджреНрджрд╛ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде GitHub рд╕реЗ рдЬрд╛рд░реА .zip рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ pip install https://<my-access-token>@github.com/myorganization/myprivaterepo/archive/myrelease.zip#egg=mypackage рдЬреИрд╕реЗ

рдореИрдВрдиреЗ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдЬреА рд░реЗрдкреЛ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред pip install -vvv ... рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:

рдЗрд╕ рдореБрджреНрджреЗ / рдЕрдВрддрд░ рдХреЛ Starting new HTTPS connection (1): github.com:443 рдЖрд╕рдкрд╛рд╕ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╢рд╛рдпрдж @cjerdonek рдореБрдЭрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ git bisect рд╕рддреНрд░ рднреА рдЪрд▓рд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдЗрд╕ рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/pypa/pip/commit/eeb74aeb29~~ c63ee61027fe

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░: рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдирдП рдХреАрд░рд┐рдВрдЧ рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕реА рд╕рдордп, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдореМрдЬреВрджрд╛ рдЙрдЪрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЯреВрдЯ рдЧрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдкрд╛рдЗрдк рдХреА рдкреНрд░рд▓реЗрдЦрд┐рдд рд╡рдиреАрдХрд░рдг рдиреАрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рдВрдЪрди рдЪрдХреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдХрдо рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд░реНрдерди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ "рд╕рд╣реА" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рдЯреВрд▓рд┐рдВрдЧ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЪрдХреНрд░ рдЪрдХреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд┐рд╕рдиреЗрд╕ рдиреЗ рдпрд╣рд╛рдВ рд╕рд╣реА рдХрдорд┐рдЯрдореЗрдВрдЯ рдкрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрдо рдирд╣реАрдВ рд╣реИ!

@pradyunsg , рд╢рд╛рдпрдж рдореБрдЭреЗ рдЧрд▓рддрдлрд╣рдореА рд╣реИ .. рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ "рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░" рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрджрд┐ рд╣рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо 3rd рдкрд╛рд░реНрдЯреА рд░реЗрдкреЛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ gemfury.com) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдареАрдХ рд╣реИред рдореБрдЭреЗ рдЕрднреА рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рд╕рд╣реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд┐рд╕рдиреЗрд╕ рдиреЗ рдпрд╣рд╛рдВ рд╕рд╣реА рдХрдорд┐рдЯрдореЗрдВрдЯ рдкрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрдо рдирд╣реАрдВ рд╣реИ!

рддреБрдо рдмрд┐рд▓рдХреБрд▓ рд╕рд╣реА рд╣реЛред рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдпрд╣ c63ee61027fe рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ

pip install --user --index-url https://[email protected]:[email protected]/foo/api/pypi/PyPi-dev/simple -v em-generate-config 
Created temporary directory: /tmp/pip-ephem-wheel-cache-1q06a68y 
Created temporary directory: /tmp/pip-req-tracker-1igksn7z 
Created requirements tracker '/tmp/pip-req-tracker-1igksn7z' 
Created temporary directory: /tmp/pip-install-six90fkc 
Looking in indexes: https://rnc_build%40foo.com:****@foo.jfrog.io/foo/api/pypi/PyPi-dev/simple 
Collecting em-generate-config 
  1 location(s) to search for versions of em-generate-config: 
  * https://rnc_build%40foo.com:****@bar.jfrog.io/foo/api/pypi/PyPi-dev/simple/em-generate-config/ 
  Getting page https://rnc_build%40foo.com:****@bar.jfrog.io/foo/api/pypi/PyPi-dev/simple/em-generate-config/ 
ERROR: Could not install packages due to an EnvironmentError. 
Traceback (most recent call last): 
  File "/usr/local/lib/python3.7/site-packages/pip/_vendor/requests/models.py", line 379, in prepare_url 
    scheme, auth, host, port, path, query, fragment = parse_url(url) 
  File "/usr/local/lib/python3.7/site-packages/pip/_vendor/urllib3/util/url.py", line 234, in parse_url 
    raise LocationParseError(url) 
pip._vendor.urllib3.exceptions.LocationParseError: Failed to parse: https://[email protected]:[email protected]/foo/api/pypi/PyPi-dev/simple/em-generate-config/

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ "рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░" рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдУрд╣ред рд╣рд╛рдБред (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдЭрдкрдХреА рдХреА рдЬрд░реВрд░рдд рд╣реИ)

рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ URL рдХреЗ рд╣рд┐рд╕реНрд╕реЗ ... urlencoded рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдИрдореЗрд▓ рдореЗрдВ @ , %40 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ RFC рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдорд╛рдиреНрдп URL рдирд╣реАрдВ рд╣реИ:

https://[email protected]:[email protected]/pypi

рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛:

https://awesome%40pradyunsg.me:[email protected]/pypi

рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ ... рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╡рддрдГ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрд╕ RFC рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЖрдЧреЗ рдЬреБрдбрд╝реЗ urlib рдореБрджреНрджреЗ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред

рдПрдХ рддрд░рдл: @markuszoeller рдиреЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ ... рдХреНрдпрд╛ рд╡рд╣ рдкрд╛рдЗрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдорд╛рдиреНрдп URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрддреАрдд рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдФрд░ 19.1.1 рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдХреБрдЫ рдХреЗ рдмрд╛рдж рд╕рдордп, рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЯреВрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред

рдЕрдЧрд░ рдпрд╣ рдЗрд╕рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ - рдпрд╣ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВред ЁЯЩГ

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдпрд╣ c63ee61 рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдореИрдВ рд╡рд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдЗрди рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкрдХрдбрд╝ рд░рд╣реЗ рдереЗ - рдкрд╛рдЗрдк рдЗрдВрдбреЗрдХреНрд╕ URL рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ "рд╣реЛрдо рд╣реЛ рдЧрдП" рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЕрд╡реИрдз рдирд╣реАрдВ рдорд╛рдирддрд╛ рдерд╛ред URL рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдм рдПрдХ urlib рдпреВрдЯрд┐рд▓рд┐рдЯреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрдареЛрд░ рдФрд░ RFC рдЕрдиреБрд░реВрдк рд╣реИред

рдкрд╛рдЗрдк рдЗрдВрдбреЗрдХреНрд╕ URL рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ "рд╣реЛрдо рд╣реЛ рдЧрдП" рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЕрд╡реИрдз рдирд╣реАрдВ рдорд╛рдирддрд╛ рдерд╛ред URL рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдм рдПрдХ urllib3 рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрдареЛрд░ рд╣реИ рдФрд░ RFC рдЕрдиреБрд░реВрдк рд╣реИред

рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рдзрдиреНрдпрд╡рд╛рдж @pradyunsgред рдШрд░ рдкрд░ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП;) рдПрдХ рдлрд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ https://<my-access-token>:@github.com/myorganization/myprivaterepo/archive/myrelease.zip#egg=mypackage рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдиреЛрдЯрд┐рд╕ рдЯреЛрдХрди рдХреЗ рдмрд╛рдж : рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВ) рдЬреЛ URL рдХреЛ рдЕрдзрд┐рдХ RFC рдЕрдиреБрд░реВрдк рдмрдирд╛рддрд╛ рд╣реИ (рдХреНрдпрд╛ рдпрд╣?) рдФрд░ рдкрд╛рдЗрдк рдЦреБрд╢реА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдЧрд╛? рдкреИрдХреЗрдЬред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдпрд╛ (рдФрд░ рднреА рдмреЗрд╣рддрд░) https://:<my-access-token>@github.com/...

URL рдХреЛ рдЕрдзрд┐рдХ RFC рдЕрдиреБрд░реВрдк рдмрдирд╛рддрд╛ рд╣реИ (рдХрд░рддрд╛ рд╣реИ?)

рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВред рдореИрдВ рд╡рд┐рд╖рдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред

рдКрдкрд░ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рд╛ рд╣реИ рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реВрдЪрд┐рдд рдЕрдиреБрдорд╛рди рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рдХреЛрдб рдХреЗ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреЛ рджреЗрдЦрдХрд░ рдмрдирд╛рдпрд╛ рд╣реИ ... рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рд▓реИрдкрдЯреЙрдк рдмрд┐рд╕реНрддрд░ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред ЁЯЩГ

https: //: @ github.com / myorganization / myprivaterepo /

рдЖрдЦрд┐рд░реА рдмрд╛рдд рдЬреЛ рдореИрдВ рдпрд╣рд╛рдБ (рдХреЗрд╡рд▓) рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди + рдореЗрдореЛрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╣рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдЙрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рджреЛрдиреЛрдВ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рднрд▓реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд╣реИред

рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдХреА @slafs рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЯреЛрдХрди рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ":" рдЯреЛрдХрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЯреЛрдХрди рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ":" рдЯреЛрдХрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдареАрдХ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рд░рд▓ curl -L рдкреИрдХреЗрдЬ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ : рдЯреЛрдХрди рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рднрд▓реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд╣реИред

рд╣рд╛рдБ, рдЕрдм рдореИрдВ рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ URL рдХреЗ рдСрд░реНрдХрд┐рдЯреЗрд╡ рд╕реЗрдХреНрд╢рди рдореЗрдВ : рдХрд╛ рд╣реЛрдирд╛ рдмрд┐рд▓рдХреБрд▓ рднреА рдареАрдХ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, curl рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реИред рди рддреЛ urllib3 :

>>> import urllib3
>>> urllib3.__version__
'1.25.3'
>>> urllib3.util.parse_url('http://user<strong i="16">@host</strong>')
Url(scheme='http', auth='user', host='host', port=None, path=None, query=None, fragment=None)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдХреГрдкрдпрд╛ рдХреАрдЬрд┐рдПред :)

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреА рд▓рд╛рдЗрди рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЪрд░реНрдЪрд╛ рдХреЗ рддрд╣рдд рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣реА рд╣реИ?

@ cjerdonek рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЯреАрдХ рд▓рд╛рдЗрди рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ c63ee61027fe7dea рдкрд░ рджреЗрдЦрдиреЗ рд╕реЗ рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ https://github.com/pypa/pip/blob/81040b5d0644460a46a360d67c451c3bbb03b/src/pip/_internal/download.py#L3333L3333/3333 рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ: https://github.com/pypa/pip/blob/e34769861ec5ed8aa5ce23670e111fe8db446c39/pip-download.py#L91 -L96

рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @ cjerdonek , рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП @ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рджреЛ рдореБрджреНрджреЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ (рдореВрд▓ рдкреЛрд╕реНрдЯ рдХрд╛ рджреВрд╕рд░рд╛ рдЙрддреНрддрд░), рд▓реЙрдЧ рдореЗрдВ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ "рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ urllib3 рд╕реЗ рдЖ рд░рд╣реА рд╣реИ):

рддреНрд░реБрдЯрд┐: рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯрд▓ рдХреЗ рдХрд╛рд░рдг рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛: рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: https://<email.com>:[secure]@<artifactory_host>/artifactory/api/pypi/pypi-virtual/simple/setuptools/

рд▓реЗрдХрд┐рди рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ, "рдХреЛрдИ рднреА рд╡рд┐рддрд░рдг рд╡рд┐рддрд░рдг рдкреИрдХреЗрдЬ_рдирд╛рдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛" рддреНрд░реБрдЯрд┐ рдХреЛ рд▓реЙрдЧреНрд╕ рдореЗрдВ "рд╡рд┐рдлрд▓ рдЯреВ рдкрд╛рд░реНрд╕" рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬрдм рддрдХ рдХрд┐ рд▓реЙрдЧ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдКрдкрд░ рдХреА рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╣рдореНрдо ... рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рдерд╛ред рд╣рд╛!

@ cjerdonek рдореИрдВ MultiDomainBasicAuth .__ call__ рдореЗрдВ рд╣реЛ рд░рд╣реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдм рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ urllib рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ рдХрд┐ рдореБрдЭреЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ... рдареАрдХ рд╣реИ?

ISTM рдЕрдм рдЬреЛ рд╕рд╢рд░реНрдд or рдмрдЬрд╛рдп and , рдФрд░ рдХреЙрд▓ рдореЗрдВ or "" , рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде 2-рднрд╛рдЧреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рднреА рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣рд╛рдБ рдкреВрд░реНрдг рдЯреНрд░реЗрд╕рдмреИрдХ рддрдм рд╣реИ рдЬрдм рдореИрдВрдиреЗ "рдлреЗрд▓ рдЯреВ рдкрд╛рд░реНрд╕" рддреНрд░реБрдЯрд┐ рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХреНрд╕реНрдЯреНрд░рд╛-рдЗрдВрдбреЗрдХреНрд╕-рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡рд░реНрдмреЛрдЬрд╝ рдореЛрдб рдХреЗ рдХрд╛рд░рдг рдЯреНрд░реЗрд╕рдмреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ):

$ pip install twine --extra-index-url https://[email protected]:[email protected]/simple/ -vvv
...
  Getting page https://foo%40example.com:****@github.com/simple/twine/
ERROR: Could not install packages due to an EnvironmentError.
Traceback (most recent call last):
  File "/.../pip/src/pip/_vendor/requests/models.py", line 379, in prepare_url
    scheme, auth, host, port, path, query, fragment = parse_url(url)
  File "/.../pip/src/pip/_vendor/urllib3/util/url.py", line 234, in parse_url
    raise LocationParseError(url)
pip._vendor.urllib3.exceptions.LocationParseError: Failed to parse: https://[email protected]:[email protected]/simple/twine/

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/.../pip/src/pip/_internal/commands/install.py", line 345, in run
    resolver.resolve(requirement_set)
  File "/.../pip/src/pip/_internal/legacy_resolve.py", line 196, in resolve
    self._resolve_one(requirement_set, req)
  File "/.../pip/src/pip/_internal/legacy_resolve.py", line 359, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/.../pip/src/pip/_internal/legacy_resolve.py", line 307, in _get_abstract_dist_for
    self.require_hashes
  File "/.../pip/src/pip/_internal/operations/prepare.py", line 134, in prepare_linked_requirement
    req.populate_link(finder, upgrade_allowed, require_hashes)
  File "/.../pip/src/pip/_internal/req/req_install.py", line 211, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/.../pip/src/pip/_internal/index.py", line 1201, in find_requirement
    req.name, specifier=req.specifier, hashes=hashes,
  File "/.../pip/src/pip/_internal/index.py", line 1183, in find_candidates
    candidates = self.find_all_candidates(project_name)
  File "/.../pip/src/pip/_internal/index.py", line 1128, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/.../pip/src/pip/_internal/index.py", line 1282, in _get_pages
    page = _get_html_page(location, session=self.session)
  File "/.../pip/src/pip/_internal/index.py", line 234, in _get_html_page
    resp = _get_html_response(url, session=session)
  File "/.../pip/src/pip/_internal/index.py", line 182, in _get_html_response
    "Cache-Control": "max-age=0",
  File "/.../pip/src/pip/_vendor/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/.../pip/src/pip/_internal/download.py", line 610, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/.../pip/src/pip/_vendor/requests/sessions.py", line 519, in request
    prep = self.prepare_request(req)
  File "/.../pip/src/pip/_vendor/requests/sessions.py", line 462, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/.../pip/src/pip/_vendor/requests/models.py", line 313, in prepare
    self.prepare_url(url, params)
  File "/.../pip/src/pip/_vendor/requests/models.py", line 381, in prepare_url
    raise InvalidURL(*e.args)
pip._vendor.requests.exceptions.InvalidURL: Failed to parse: https://[email protected]:[email protected]/simple/twine/

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдкрд╣рд▓реЗ рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ https: //foo%40example.com : * *@github.com/simple/twine/

рд╣рдорд╛рд░рд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди (рдПрдХ) рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрджреНрдзрд░рдг redact_netloc() : https://github.com/pypa/pip/blob/81040b5d0644460a46a360d67c451c03bbbb03ab/src/pip/_internal/utils/misc.py#L1109L99122

рд╣реЗ, рдЙрд╕ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рднреА рдкрд╛рдпрд╛ рдХрд┐ рдкрд╛рдЗрдк рд╣рдореЗрд╢рд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд░реАрдбреИрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ "рдорд╛рдиреНрдп" рд╡рд╛рд▓реЗ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ pip install рдЖрдкрдХреЛ рдЙрджрд╛

$ pip install https://foo:[email protected]/slafs
Collecting https://foo:****@github.com/slafs
  Downloading https://foo:[email protected]/slafs
...

ЁЯШЕ

@ pypa / pip-committers рддреЛ urllib3 v1.25 рд╡рд┐рдХреНрд░реЗрддрд╛ рдЕрдкрдбреЗрдЯ (рдореВрд▓ PR https://github.com/urllib3/urllib3/pull/1487) рдХреЗ рдлреЙрд▓реЛ-рдСрди рдЗрд╢реНрдпреВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╕рдЦреНрдд URL рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП: //github.com/urllib3/urllib3/issues/1640), рдХреНрдпрд╛ рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рд╡реИрд╕рд╛ рд╣реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ urllib3 рдмрджрд▓ рдЬрд╛рдПрдЧрд╛), рдпрд╛ рдХреНрдпрд╛ рд╣рдо "рдареАрдХ" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ URL рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ redact_netloc() рдКрдкрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП URL рдХреЛ рдареАрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд┐рдЫрд▓реЗ рддрд░реНрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ urlib3 рдХреЗ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЕрдкрдбреЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛, рдЬреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣реЗ, рдЙрд╕ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рднреА рдкрд╛рдпрд╛ рдХрд┐ рдкрд╛рдЗрдк рд╣рдореЗрд╢рд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд░реАрдбреИрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рдЗрдк рдХреЗ рдкрд╛рд╕ рдЕрднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ "рд╡реИрд╢реНрд╡рд┐рдХ" рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдРрд╕реЗ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреИрд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдореБрджреНрджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред

рдХреНрдпрд╛ рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдпрджрд┐ рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХреА рд╣реИ, рдЙрдирдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ @ рдХрд╛ рдЙрджреНрдзрд░рдг рджреЗрдирд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╣реИ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ urllib3 рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЬреЛрдбрд╝реЗрдВред

рдореИрдВ urllib3 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реЛред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ - рдореИрдВ URL рдХреЛ "рдареАрдХ" рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдирд╛рдЬреБрдХ рдХреЛрдб рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ @ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╡рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рджрд░реНрдж рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВ рдХрд┐рд╕реА рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдЕрд╕реНрдерд╛рдпреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдФрд░ рдЧреИрд░-рдЕрдиреБрдкрд╛рд▓рди URL рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛)ред

рдХреНрдпрд╛ рдпрд╣ рдХреА рдХреАрдордд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╕реБрддрд▓реА рдЕрдкрд▓реЛрдб рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ %40 рдПрдХ рдХреЗ рдмрдЬрд╛рдп @ ред рддреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдЧреБрдкреНрдд рднрдВрдбрд╛рд░рдг рдЗрдВрдЬрди рдореЗрдВ рдПрдХ PyPI рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕рд╛рдЦ рд╣реИред рдпрджрд┐ рдореИрдВ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ foo%40bar.com рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░рд╛ рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рд╕реБрддрд▓реА рдЕрдкрд▓реЛрдб (рдЬреЛ рдЙрд╕реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

twine upload --verbose --repository-url https://mypypi.com -u foo%40bar.com -p <redacted> dist/my-package-*
Uploading distributions to https://mypypi.com
Uploading my-package-1.2.3.tar.gz

100% 166k/166k [00:00<00:00, 430kB/s]  
Content received from server:
<html>
 <head>
  <title>401 Unauthorized</title>
 </head>
 <body>
  <h1>401 Unauthorized</h1>
  This server could not verify that you are authorized to access the document you requested.  Either you supplied the wrong credentials (e.g., bad password), or your browser does not understand how to supply the credentials required.<br/><br/>

рдореИрдВ рдПрдХ рдЕрд▓рдЧ, рдлрд┐рд░ рднреА рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ --extra-index-url рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реИред рд╕рд┐рд░реНрдл @ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИред

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
рдЕрдЬрдЧрд░ 3.7.4
рдкрд╛рдЗрдк 19.2.1

  1. рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдирд┐рдЬреА рд░реЗрдкреЛ рдкрд░ рдкреИрдХреЗрдЬ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  2. рдмреЗрд╢рдХ, 19.1.1 рдкрд╛рдЗрдк рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рднреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ
pip3 install package --extra-index-url https://[email protected]/pypi -vvv

рд╡рд╛рдкрд╕ рдЯреНрд░реЗрд╕ рдХрд░реЗрдВ:

Created temporary directory: /private/var/folders/rb/rg18vqd16lxg47cm1kvgh3yh0000gn/T/pip-ephem-wheel-cache-dkqjnspg
Created temporary directory: /private/var/folders/rb/rg18vqd16lxg47cm1kvgh3yh0000gn/T/pip-req-tracker-_5f9p1zv
Created requirements tracker '/private/var/folders/rb/rg18vqd16lxg47cm1kvgh3yh0000gn/T/pip-req-tracker-_5f9p1zv'
Created temporary directory: /private/var/folders/rb/rg18vqd16lxg47cm1kvgh3yh0000gn/T/pip-install-ajhlm6xm
Looking in indexes: https://pypi.org/simple, https://[email protected]/pypi
Collecting package
  2 location(s) to search for versions of package:
  * https://pypi.org/simple/package/
  * https://[email protected]/pypi/package/
  Getting page https://pypi.org/simple/package/
  Found index url https://pypi.org/simple
  Looking up "https://pypi.org/simple/package/" in the cache
  Request header has "max_age" as 0, cache bypassed
  Starting new HTTPS connection (1): pypi.org:443
  https://pypi.org:443 "GET /simple/package/ HTTP/1.1" 404 13
  Status code 404 not in (200, 203, 300, 301)
  Could not fetch URL https://pypi.org/simple/package/: 404 Client Error: Not Found for url: https://pypi.org/simple/package/ - skipping
  Getting page https://[email protected]/pypi/package/
  Found index url https://private-repo.io/pypi
  Looking up "https://private-repo.io/pypi/package/" in the cache
  Request header has "max_age" as 0, cache bypassed
  Starting new HTTPS connection (1): private-repo.io:443
  https://private-repo.io:443 "GET /pypi/package/ HTTP/1.1" 404 10
  Status code 404 not in (200, 203, 300, 301)
  Could not fetch URL https://[email protected]/pypi/package/: 404 Client Error: Not Found for url: https://private-repo.io/pypi/package/ - skipping
  Given no hashes to check 0 links for project 'package': discarding no candidates
  ERROR: Could not find a version that satisfies the requirement package (from versions: none)
Cleaning up...
Removed build tracker '/private/var/folders/rb/rg18vqd16lxg47cm1kvgh3yh0000gn/T/pip-req-tracker-_5f9p1zv'
ERROR: No matching distribution found for package
Exception information:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 188, in main
    status = self.run(options, args)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 345, in run
    resolver.resolve(requirement_set)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 196, in resolve
    self._resolve_one(requirement_set, req)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 359, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/legacy_resolve.py", line 307, in _get_abstract_dist_for
    self.require_hashes
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 134, in prepare_linked_requirement
    req.populate_link(finder, upgrade_allowed, require_hashes)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/req/req_install.py", line 211, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/local/lib/python3.7/site-packages/pip/_internal/index.py", line 1228, in find_requirement
    'No matching distribution found for %s' % req
pip._internal.exceptions.DistributionNotFound: No matching distribution found for package

@bmckalla рдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп https://:[email protected] рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛? рджреЗрдЦреЗрдВ: https://github.com/pypa/pip/issues/6775#issuecomment -514272956

@TTRh

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ : рдЯреЛрдХрди рдХреЗ рдмрд╛рдж рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо, рд╡рд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ рдЬреЛ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://token:@private-repo.io

@TTRh @jgspiro рдиреЗ рдЯреЛрдХрди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж : рдбрд╛рд▓рд╛ , рдзрдиреНрдпрд╡рд╛рдж!

рдпрджрд┐ рдпрд╣ рд▓рд╛рдпрдХ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк @ рдХреЗ рдмрдЬрд╛рдп% 40 рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реБрддрд▓реА рдЕрдкрд▓реЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

@leviable ~ рдореИрдВ рд╕реБрддрд▓реА рдХреЗ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ -u <username> , рдЗрд╕рд▓рд┐рдП URL-рдХреЛрдЯрд╛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП

рд╕рд┐рд░реНрдл FYI рдХрд░реЗрдВ, url рдкрд╛рд╕рд╡рд░реНрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

password='passwordwith@$$!!'
encoded=$(python3 -c 'from urllib.parse import quote;print(quote("'${password}'"))')
export PIP_EXTRA_INDEX_URL='https://username:'${encoded}'@nexus.hostname.com/repository/pypi-all/simple'
pip install your_package

@TTRh

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ : рдЯреЛрдХрди рдХреЗ рдмрд╛рдж рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо, рд╡рд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ рдЬреЛ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://token:@private-repo.io

рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдЧ рдпрд╛ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдХреЛрдИ : рдирд╣реАрдВ рд╣реЛ рддреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдирд╣реАрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛)?

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрд╢реЛрдзрдиреЛрдВ download.py рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рднреА рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред

рдореИрдВ https://github.com/booleand/pip/commit/9761f46520b94c027b0e6732223e391088f745a5#diff38181ab2fef95958888a46e86004ae7 рдХреЗ рд╕рдорд╛рди рдкреИрдЪ рдкрд░ рдЙрддрд░рд╛

@booleand рдЖрдк рдПрдХ рдкреИрдЪ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@pradyunsg рд╣рд╛рдВ рдореИрдВ рд╣реВрдВ

рдпрджрд┐ рдЖрдк PR рдлрд╛рдЗрд▓ рдХрд░реЗрдВрдЧреЗ рддреЛ @booleand рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред :)

thanks @pradyunsg. filed a PR #6795

Https://github.com/pypa/pip/issues/6775#issuecomment -514284653 рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ URL рдореЗрдВ "рдПрдХ рддрддреНрд╡" рдХреЗ рд▓рд┐рдП # 6796 рдЦреЛрд▓рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @slafs рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рд╕рд╣рд┐рдд) рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдЖрдо рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рддреНрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@cjerdonek рдиреЗ рдЙрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП # 6797 рдЬреЛрдбрд╝рд╛ред

рдореИрдВрдиреЗ рдПрдХ PR (# 6818) рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рджреЛрдиреЛрдВ URL рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореБрджреНрджреЛрдВ (рдпрд╣ рдФрд░ # 6796) рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд▓реЛрдЧ рдПрдХ рд╕реНрдкрд┐рди рдХреЗ рд▓рд┐рдП # 6818 рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдЙрд╕ рд╢рд╛рдЦрд╛ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд╛рдПрдВ:

pip install https://github.com/pradyunsg/pip/archive/fix/URL-authentication-handling.zip

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреАрдЖрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрди рдпреВрдЬрд╝рд░рдиреЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ @ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрдм рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдореМрдЬреВрдж рд╣реИ (рдЗрд╕рдХрд╛ рдХреЛрдИ рдирд╣реАрдВ / рдЧреИрд░-рдХреЛрдИ рдирд╣реАрдВ рд╣реИ), рдФрд░ рджреВрд╕рд░рд╛ рдореБрджреНрджрд╛ рдХреЛрдИ рдкрд╛рд╕рд╡рд░реНрдб рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реНрд╡ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред (рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреЛ рдЧреИрд░-рдЪрд┐рдиреНрд╣рд┐рдд рдХрд┐рдП рдЧрдП @ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдкреВрд░реНрд╡ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ URL рдХреЛ "рдлрд┐рдХреНрд╕" / рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдкреАрдЖрд░ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред

рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реНрд╡ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ

рдЖрд╣ рдпреЗрд╕ред рдореЗрд░рд╛ рдмреБрд░рд╛, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ - рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдИрдореЗрд▓ рдкрддреЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рд╣реИред

"http://[email protected]:[email protected]/path" -> ("http://example.com/path", "[email protected]", "password")

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдкреВрд░реНрд╡ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ URL рдХреЛ "рдлрд┐рдХреНрд╕" / рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдкреАрдЖрд░ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред

рдЖрд╣ рдпреЗрд╕ред рдореБрдЭреЗ рднреА рд╢реБрд░реВ рдореЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ urllib3 рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдПрдХ рдХреЛрдб рдкрде рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд╕реАрдзреЗ рдпрд╣рд╛рдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдХрд┐рдпрд╛ рдерд╛ред

рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдЕрдм рдпрд╣ рд╣реИ рдХрд┐ URL рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореМрдЦрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдФрд░ (рдХрд┐рд╕реА рддрд░рд╣) рд╣рдо рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рдЕрдкрдиреЗ Session рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдЕрдм рдпрд╣ рд╣реИ рдХрд┐ URL рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореМрдЦрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдФрд░ (рдХрд┐рд╕реА рддрд░рд╣) рд╣рдо рдЕрдкрдиреЗ рд╕рддреНрд░ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдирд╣реАрдВ, рдпрджрд┐ рдЖрдк рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдКрдкрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рдмреИрдХ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдореВрд▓ URL рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: https://github.com/pypa/pip/issues/6775#issuecomment -514313192
рдФрд░ рдЖрдкрдХрд╛ PR рдореВрд▓ URL рдХреЛ "рдареАрдХ" рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЖрдкрдХреЗ PR рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рди рдХрд░реВрдВред

рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреАрдЖрд░ рдореЗрдВ рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдВ рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ: https://github.com/pypa/pip/issues/6775#issuecomment -514322734

рд╕рд╣реА рд╣реИ, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреЛ рдорд┐рд▓рд╛ рд░рд╣рд╛ рдерд╛ред

рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рд╕рд╣рд┐рдд) рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдЖрдо рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рддреНрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЧрд░реНрднрдкрд╛рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдЕрд░реНрде рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ URL рдореЗрдВ рдХреЛрдИ "@" рди рд╣реЛ рддреЛ рдЪреЗрддрд╛рд╡рдиреА рдореБрджреНрд░рд┐рдд рдХрд░реЗрдВред рдпрд╣ рд╢рд╛рдпрдж рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЕрдзрд┐рдХ рдЦреЛрдЬ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдорд┐рддреНрд░рд╡рдд рд╣реИред


рдореЗрд░реЗ рдореВрд░реНрдЦ рд╕реНрд╡ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк 19.2 рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢:

  • рдХреЗрд╡рд▓ рдПрдХ рдЯреЛрдХрди (рдпрд╛рдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдХреЛрдИ рдкрд╛рд╕рд╡рд░реНрдб) рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рдкрд╛рдЗрдк рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реНрдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рднрд╛рдЧ рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗред рдпрд╣реА # 6796 рдХреЗ рд▓рд┐рдП рд╣реИред
  • рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬреЛ URL-рдПрдирдХреЛрдбреЗрдб рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдкрд╛рдЗрдк 19.2 рдЯреНрд░реЗрд╕рдмреИрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдкрд╛рдЗрдк 19.1.1 рдРрд╕реЗ URL рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕реНрд░реЛрдд рдпрд╣ рд╣реИ рдХрд┐ urlib3 рдРрд╕реЗ URL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЦреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдирдорд╕реНрддреЗ, рд╣рдо рдкрд╛рдЗрдк 18.1, urllib3 (1.24.1) рдФрд░ рдкрд╛рдпрдерди 2.7 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВред
https://pypi.org/simple --extra-index-url http://user:password@@124.4.56:8086 --trusted-host 124.4.56
https://pypi.org/project/urllib3/ рдКрдкрд░ RFC 3986 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ @cjerdonek @pradyunsg рдХреГрдкрдпрд╛ рдЖрдк рджреЛрдиреЛрдВ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХреЗрдВред

рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдкрд╛рдЗрдк 19.2.2 рдореЗрдВ : рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рд╣реИред

рдЕрдкрдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ @ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдЧ URL рдореЗрдВ @ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: '%' рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб "рдкрд╛рд╕рд╡рд░реНрдб" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЙрд╕реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ред


рдЗрд╕рдореЗрдВ рдПрдХ рдФрд░ рдХрд┐рдВрдХ: рдореЗрд░рд╛ рдкреБрд░рд╛рдирд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб ("%" рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ)ред

рд╕рдВрд╕реНрдХрд░рдг 19.2.2 рдкрд░

% рдХреЛ %25 рд╕рд╛рде рдмрджрд▓рдирд╛ рдпрд╛ рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛, рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:

(рдореЗрд░рд╛ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдирддреЗ рд╣реБрдП: password% ) рдерд╛

ERROR: Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/_internal/cli/base_command.py", line 188, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/_internal/commands/install.py", line 345, in run
    resolver.resolve(requirement_set)
  File "/Library/Python/2.7/site-packages/pip/_internal/legacy_resolve.py", line 196, in resolve
    self._resolve_one(requirement_set, req)
  File "/Library/Python/2.7/site-packages/pip/_internal/legacy_resolve.py", line 359, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/Library/Python/2.7/site-packages/pip/_internal/legacy_resolve.py", line 307, in _get_abstract_dist_for
    self.require_hashes
  File "/Library/Python/2.7/site-packages/pip/_internal/operations/prepare.py", line 134, in prepare_linked_requirement
    req.populate_link(finder, upgrade_allowed, require_hashes)
  File "/Library/Python/2.7/site-packages/pip/_internal/req/req_install.py", line 211, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/Library/Python/2.7/site-packages/pip/_internal/index.py", line 1201, in find_requirement
    req.name, specifier=req.specifier, hashes=hashes,
  File "/Library/Python/2.7/site-packages/pip/_internal/index.py", line 1183, in find_candidates
    candidates = self.find_all_candidates(project_name)
  File "/Library/Python/2.7/site-packages/pip/_internal/index.py", line 1111, in find_all_candidates
    if self._validate_secure_origin(logger, link)
  File "/Library/Python/2.7/site-packages/pip/_internal/index.py", line 998, in _validate_secure_origin
    origin = (parsed.scheme, parsed.hostname, parsed.port)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urlparse.py", line 113, in port
    port = int(port, 10)
ValueError: invalid literal for int() with base 10: 'password%%40mydomain.com'

рдпрд╛

ValueError: invalid literal for int() with base 10: 'password%25%40mydomain.com'

рдХреНрдпрд╛ рдЖрдк URL рдХреЗ рдХреЗрд╡рд▓ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рднрд╛рдЧ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ password%[email protected] ?

рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛ password%[email protected] рдореБрдЭреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рдорд╛рдкрди рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдХреЙрд▓-рдЯреВ-рдПрдХреНрд╢рди рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рд╣реБрдЖ?

рдкрд╛рдЗрдк 19.2 рдХреЛ рдЕрдм URL рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╛рддреНрд░реЛрдВ рдХреЛ @ рдФрд░ % URL рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ %40 рдФрд░ %25 )ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ-рдпреВрдЖрд░рдПрд▓ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:

https://[email protected]:[email protected]/
https://user:password%@mydomain.com/

рдЬреЛ рд╕рдордХрдХреНрд╖ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╣реИрдВ:

https://pradyunsg%40email.com:[email protected]/
https://user:password%[email protected]/

рдХреНрдпреЛрдВ?

рдкрд╛рдЗрдк (рдФрд░ рдЕрдиреБрд░реЛрдз) рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд URL рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ urllib3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред urllib3 рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрдбрд╝реЗ URL рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ 19.2 рдореЗрдВ рдЙрдиреНрдирдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдЦреНрддреА рдХреЗрд╡рд▓ "рдкрдХрдбрд╝реА рдЧрдИ" рдереА, рдЗрд╕рд▓рд┐рдП рдкрд╛рдЗрдк рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕рдЦреНрдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкреНрд░рднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЪреБрдХрд╛ рдерд╛ рдФрд░ рдХрд┐рд╕реА рдиреЗ рднреА рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдЦ рдХреЛ рдареАрдХ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдЖрдк рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдкрд╛рдЗрдк рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЛ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдЗрдк рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рд░рдЦреА рдЬрд╛рддреА рд╣реИ, рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред

рдкрд╛рдЗрдк рдкрд░ рдбреЗрд╡рд▓рдкрд░ рд╕рдордп рдХреА рдкрд░реНрдпрд╛рдкреНрдд рдХрдореА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдкрд╛рдЗрдк рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рддреНрддрдкреЛрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкрд╛рдЗрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рддреНрддрдкреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдкрд╛рдЗрдк рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА, рдФрд░ рдкрд╛рдЗрдк рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ (рдпреВрдПрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ, рддрдХрдиреАрдХреА рд▓реЗрдЦрдХреЛрдВ рдЖрджрд┐) рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

cjerdonek picture cjerdonek  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dstufft picture dstufft  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wrouesnel picture wrouesnel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pradyunsg picture pradyunsg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lululukas picture lululukas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ