Pip: рдПрдХ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ `--рдкреНрд░реЛрд╕реЗрд╕-рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХреНрд╕` рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рджрд┐рд╕ре░ 2016  ┬╖  72рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/pip

  • рдкрд┐рдк рд╕рдВрд╕реНрдХрд░рдг: 8.1.1
  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: 3.5.2
  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: рдЙрдмрдВрдЯреВ 16.04

рд╡рд┐рд╡рд░рдг:

--process-dependency-links рдХреЛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдкрд╛рдЗрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡реИрдз рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ: https://github.com/pypa/pip/pull/1955

рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЬрдм рддрдХ рдкреАрдИрдкреА 508/440 рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреАрдЖрдИрдкреА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рдЗрд╕реЗ рд╢рд╛рдпрдж рдЧреИрд░-рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдХреЗ setup рд▓рд┐рдП dependency_links рддрд░реНрдХ рдЕрднреА рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рдмрд╣рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рд╣реИ: http://setuptools.readthedocs.io/en/latest/setuptools.html#dependencies -that-aren-t- рдЗрди-рдкреАрдкреАрдЖрдИ

рдореИрдВрдиреЗ рдХреНрдпрд╛ рдЪрд▓рд╛рдпрд╛ рд╣реИ:

$ pip install request --process-dependency-links
Collecting request
  Downloading request-0.0.12.tar.gz
  DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
... 
awaiting PR auto-locked needs discussion maintenance

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

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХреНрдпрд╛ рд╣реИ?

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

рдЕрдм рдореЗрд░реЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп --рдкреНрд░реЛрд╕реЗрд╕-рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдмрд╣рд┐рд╖реНрдХреГрдд рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдмрд╛рд░ рд╣рдЯрд╛рдП рдЧрдП рдзреНрд╡рдЬ рд╣реИ?

рдХреНрдпрд╛ setup.py рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрд░реАрдХрд╛ рдПрдХ рдлреЛрд░реНрдХрдб рдкреАрдкреАрдЖрдИ рдкреИрдХреЗрдЬ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рднреНрд░рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

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

рдорд╛рдирд╛ред рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИред

4295

3610

[#3939 рдореЗрдВ рд▓рд┐рдЦрд╛, рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ]

рддреЛ, рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рд╣реИ: рдЕрдЧрд░ рдореИрдВ requirements.txt рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ (рдХреНрдпреЛрдВрдХрд┐, рдХрд╣реЗрдВ, рдореБрдЭреЗ setup.cfg рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЪрд╛рд╣рд┐рдП), рдореБрдЭреЗ рдХреИрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП a рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпреВрдЖрд░рдПрд▓?

рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

[options]
install_requires = 
  requests==2.18.4
  https://github.com/example/example_lib/archive/master.zip

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдЕрдЬреАрдм рдФрд░ рдбреНрд░реЙрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреИрдиреЛрдирд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдХреИрд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдирд╣реАрдВ?

рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ dependency_links рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ setup.cfg рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ setup.py рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЦрдмрд░ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ? рдирд┐рд░реНрднрд░рддрд╛_рд▓рд┐рдВрдХреНрд╕_ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ/рдирд┐рдЬреА рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЕрдХреЗрд▓реЗ рд╣реИрдВ: https://stackoverflow.com/questions/3472430/how-can-i-make-setuptools-install-a-package-thats-not-on-pypi

devpi рддрд░рд╣ @robertour рдЙрдкрдХрд░рдг рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдм рд╕рдорд░реНрдерди

@dstufft btw - рдореИрдВ рдпрд╣ рддрд░реНрдХ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рджреЗрд╡рдкреА рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ

IMHO рдЗрдВрдбреЗрдХреНрд╕ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ + рд╡реНрд╣рд╛рдЗрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ/рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдПрдХ рдСрдкреНрд╕ рд╕реНрддрд░ рдкрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ

@RonnyPfannschmidt , рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ (рдЗрд╕ reddit рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛:

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

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореБрдЭреЗ рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ, рдпрд╛ setup.py рдореЗрдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓реЗрдЧрд╛ред

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

4175 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рд╕рдорд░реНрдерди рдкреАрдЖрдИрдкреА 10 рдореЗрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдЪрд╛рд░ @pfmoore @dstufft?

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ https://github.com/pypa/pip/pull/4175/commits/86b07792e7ae762beeaeb471ab9db87e31bc285d рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП @ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ #4175 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ . рд╡рд╣рд╛рдБ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣ рдереАрдВ рдХрд┐ рд╣рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП @ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ PyPI рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд▓реЛрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо PyPI рд╕реЗ рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдордирдорд╛рдиреЗ URL рд╕реЗ рд╕рд╛рдорд╛рди рд╣рдбрд╝рдк рд╕рдХреЗрдВ) , рд╕рдВрднрд╡рддрдГ)ред

рдЗрд╕реЗ рддрдм рддрдХ рдкрджрд╛рд╡рдирдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рди рд╣реЛ, рдЕрд░реНрдерд╛рдд PEP 508 рд╕рдорд░реНрдердиред рддрдм рддрдХ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХреНрдпрд╛ рд╣реИ?

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

рдЕрдм рдореЗрд░реЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп --рдкреНрд░реЛрд╕реЗрд╕-рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдмрд╣рд┐рд╖реНрдХреГрдд рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдмрд╛рд░ рд╣рдЯрд╛рдП рдЧрдП рдзреНрд╡рдЬ рд╣реИ?

рдХреНрдпрд╛ setup.py рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрд░реАрдХрд╛ рдПрдХ рдлреЛрд░реНрдХрдб рдкреАрдкреАрдЖрдИ рдкреИрдХреЗрдЬ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рднреНрд░рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдЖрдЗрдП рдЗрд╕ рдкрд░ рдЖрддреЗ рд╣реИрдВред

--process-dependency-links рдкрд╛рд╕ рдЖрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрд╡рдЬ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдпреВрдЖрд░рдПрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

@pradyunsg рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░рдиреЗ рдХреА рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреЛрдЬрдирд╛ рди рд╣реЛ, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕ рдЬрд╝реЛрдВрдмреА рдХреЛ рдЖрд░рд╛рдо рдХрд░рдиреЗ рджреЗрдВ рдпрд╛ рд╣рдЯрд╛ рджреЗрдВ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкрд╛рдЗрдк рдХрд╣рддрд╛ рд╣реИ "рдирд╣реАрдВ, рдореИрдВ рдЖрдкрдХрд╛ рдХрд░реНрдЬ рдирд╣реАрдВ рд▓реЗрддрд╛"

рдПрдХ рдкрд╛рдЗрдк рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдкреАрдЖрдИрдкреА рдХреЛ рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдмрдирдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред рдкрд┐рдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ PyPI рдХреЛ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдБ PyPI рдореЗрдВ рдирд┐рд╣рд┐рдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред рддреЛ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  1. рдХреНрдпрд╛ PyPI рдкрд░ рдкреИрдХреЗрдЬ рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ dependency_links рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реИ?
  2. рдХреНрдпрд╛ dependency_links (рдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЕрдкрд▓реЛрдб рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдИрдкреАрдЖрдИ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
  3. рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрдпрд╛ рдкрд╛рдЗрдк рдХреЗрд╡рд▓ PyPI рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ (рдЪрд╛рд╣реЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рд╣реЛ) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

рддреЛ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде:

  1. рдкрд┐рдк рдХрднреА рднреА рдкреАрдИрдкреАрдЖрдИ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ)
  2. --process-dependency-links рдзреНрд╡рдЬ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХрд╕реНрдЯрдо рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд▓рд┐рдВрдХ рд╕реНрдЯрд╛рдЗрд▓ рдлреАрдЪрд░ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЖрдкрд╕ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА) рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдЗрдк рдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ PyPI рдкрд░ рдЕрдкрд▓реЛрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм #4175 рд╣реИ? рдЬреЛ 86b0779 рдХреА рд╡рдЬрд╣ рд╕реЗ рдмреНрд▓реЙрдХ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо https://github.com/pypa/pip/blob/master/src/pip/_internal/req/req_install.py#L167 рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рджреЗ рд╕рдХреЗрдВ рдпрджрд┐ comes_from PyPI рд╣реИ?

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

@pfmoore рд╣рд╛рдБ рдареАрдХ рдпрд╣реА рд╣реИ, рдФрд░ рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рд╕реНрддреЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдареАрдХ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреАрдЖрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреВрдВрдЧрд╛ред

рдЬреЛ рдореИрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ "рдЕрд░реЗ, рдореБрдЭреЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ" рдЬрдм рдЖрдк рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЕрд╡рдзрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛_рд▓рд┐рдВрдХ рд╕рдорд░реНрдерди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдФрд░ рдЗрд╕ рдмреАрдЪ, рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрдЖрдИрдкреА рдЕрднреА рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рдкрд░ рдЬреЛрд░ рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдСрдкреНрдЯ-рдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛:

  • PEP 508 url-deps рдХреЛ рдПрдХ рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦреЗрдВ

    • рдПрдХ рддрд░рдл: рдзреНрд╡рдЬ рдХрд╛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛

  • рдкреАрдИрдкреАрдЖрдИ рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдиреЗ рдкрд░ рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓-рдбрд┐рдкреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
  • рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХ рдмрд╣рд┐рд╖реНрдХреГрдд рд░рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд┐рдерд┐ рд╣реИ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ

    • рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрд▓ рд░рд┐рд▓реАрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рдЕрдм рдПрдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЕрд╡рдзрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рд╡рд╣ рдХрд▓ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдирд╣реАрдВ рднреЗрдЬрд╛ред рдЕрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ @pfmoore рдХреА рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдЬреИрд╕рд╛ рд╣реА рд╣реИред

рд╡рд╛рд╣!

рдХреНрдпрд╛ URL рд╡рд┐рд╡рд░рдгрд┐рдпреЛрдВ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдлрд╝реНрд▓реИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдкреАрдИрдкреА 508 рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рддрд░реНрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдо рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдкрд░ рдЕрдкрдиреЗ рдлреИрд╕рд▓реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИред

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

рдореБрдЭреЗ рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдо рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдкрд░ рдЕрдкрдиреЗ рдлреИрд╕рд▓реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рдЭреБрдХрд╛рд╡ рдЗрд╕ рдУрд░ рд╣реИ: "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВ" рдФрд░ рдХрдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рд╕реЗ @ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдХреИрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдЭреБрдХрд╛рд╡ рдЗрд╕ рдУрд░ рд╣реИ: "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВ" рдФрд░ рдХрдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред

рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрд╛рдзрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдмрд╣реБрдд рдЕрд╡рдЧрдд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЕрдзрд┐рдХ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдХрд╛рд╕, рдмрдВрдж рд╕реНрд░реЛрдд , рдХрдбрд╝рд╛рдИ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдЖрдЙрдЯ, рдЖрджрд┐)ред рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдЭреБрдХрд╛рд╡ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ (PyPI) рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдПрдВ рдирд╣реАрдВ рдбрд╛рд▓рдирд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рд╣рдо рдЯреНрд░реЗрдб-рдСрдлрд╝ рдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рд╣реИ рдмрдирд╛рдирд╛ред

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ, "рдпрджрд┐ рдкреИрдХреЗрдЬ рдХрд┐рд╕реА рдРрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рд╣реИ" URL рд▓рд┐рдВрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдСрдкреНрдЯ рдЗрди рд╣реИред

рджреЗрдЦреЛ? рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд░рд╛рдп рдирд╣реАрдВ

рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдПрдВ рди рдбрд╛рд▓реЗрдВ рдЬреЛ рдЙрдирдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рд╣рдо рдЙрди рдЯреНрд░реЗрдб-рдСрдл рдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рд╣реИред

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

"рдпрджрд┐ рдкреИрдХреЗрдЬ рдХрд┐рд╕реА рдРрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рд╣реИ" URL рд▓рд┐рдВрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдСрдкреНрдЯ рдЗрди рд╣реИред

рдореБрдЭреЗ рдпрд╣рд╛рдБ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред :/

рджреЗрдЦреЛ? рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реА рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ

рд╣реЗрд╣реЗред

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

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ, "рдпрджрд┐ рдкреИрдХреЗрдЬ рдХрд┐рд╕реА рдРрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рд╣реИ" URL рд▓рд┐рдВрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдСрдкреНрдЯ рдЗрди рд╣реИред

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

рдЗрд╕реЗ рддрдм рддрдХ рдСрдкреНрдЯ-рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдЗрд╕реЗ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдзреЗ рд▓рд┐рдВрдХ (HTTPS/рдЖрджрд┐ рдорд╛рдирдХрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ PyPI рд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рджреВрд╕рд░реЗ рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ рд╣рдо @pfmoore рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ ...
рдХреНрдпрд╛ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдмрджреНрдз рдореЗрдЬрдмрд╛рдиреЛрдВ/рд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛? рдзреНрд╡рдЬ рдХрд╛ рдирд╛рдо IMO рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ @pradyunsg рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж --whitelisted-host ?

@masdeseiscaracteres рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ рд╣реЛрдЧрд╛ - рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдкреИрдХреЗрдЬ рдкреАрдИрдкреАрдЖрдИ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдпрджрд┐ рдЗрд╕рдХреА рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ @ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реЛред рд▓реЗрдХрд┐рди рдкреАрдИрдкреАрдЖрдИ рдкрд░ рд╡реИрд╕реЗ рднреА рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдо рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЕрднреА рддрдХ рдЗрд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ)ред @ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдЙрдкрдпреЛрдЧ рдареАрдХ рд░рд╣реЗрдВрдЧреЗред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ https://github.com/pypa/pip/issues/4187#issuecomment -389846189 рдореЗрдВ @pfmoore рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред :)

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

рдЕрдЧрд░ рдХреЛрдИ рдРрд╕реЗ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рдж рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдПрдХ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдг test_install_pep508_with_url_in_install_requires рдЬреЛ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдкреАрдИрдкреАрдЖрдИ рд╕реЗ рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рддреА рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдореБрдЭреЗ рдпреВрдЖрд░рдПрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдкреАрдИрдкреАрдЖрдИ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП PyPI рдкрд░ рдПрдХ рдкреИрдХреЗрдЬ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред https://pypi.org/project/pep-508-url-deps/


рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ -- comes_from рдХреЛрдИ URL рдпрд╛ рдкрде рдирд╣реАрдВ рд╣реИ, рдпрд╣ 'box==0.1.0 from file:///private/tmp/box' рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдм рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рдХрд┐ рдкреИрдХреЗрдЬ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИред :)

@pfmoore рдпрд╣ рдореБрджреНрджрд╛ рдореЗрд░реЗ рджрд┐рд▓ рдХреЗ рдХрд░реАрдм рдФрд░ рдкреНрд░рд┐рдп рд╣реИ ЁЯШД рдХреНрдпрд╛ @pradyunsg рдХрд╛ рдЕрдкрд▓реЛрдб рдЖрдкрдХреЛ рд╡рд╣ рджреЗрддрд╛ рд╣реИ

@bstrdsmkr рдирд╣реАрдВ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ @pradyunsg рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ comes_from рд╕реНрд░реЛрдд URL рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рд╕рдордп рдХрдм рд╣реЛрдЧрд╛ (рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реВрдЪреА рдореЗрдВ рдЙрдЪреНрдЪ рдирд╣реАрдВ рд╣реИ)ред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ :-)

рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреИрдХреЗрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реИред

рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕реБрдзрд╛рд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:

if req.url and is_like(req.url, PYPI.url):
    raise

https://github.com/pypa/pip/blob/master/src/pip/_internal/req/req_install.py#L172 рдореЗрдВ
рдЬрд╣рд╛рдВ is_like() рд░рд┐рдЯрд░реНрди True рдЕрдЧрд░ рдпреВрдЖрд░рдПрд▓ рдПрдХ рд╣реА рдбреЛрдореЗрди рдкрд░ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡реЛ рд╕рд╣реА рд╣реИ?

рд╣рд╛рдВред рдореБрдЭреЗ рднреА рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред рд╡рд╣ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред

рдФрд░, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдПрдХ рд╕рдорд╛рдЪрд╛рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдиреЗ/рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ рдХреЛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рд╕рдВрджреЗрд╢ + рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЧрд╛рдЗрдб рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрднрд╛рдЧ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдПред

рдПрдХ рдкрд╛рдЗрдк рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдкреАрдЖрдИрдкреА рдХреЛ рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдмрдирдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред рдкрд┐рдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ PyPI рдХреЛ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдБ PyPI рдореЗрдВ рдирд┐рд╣рд┐рдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред

рдирд╣реАрдВ, рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ IMHO рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз VCS рдХреА рддреБрд▓рдирд╛ рдореЗрдВ pypi рдореЗрдВ рдореИрд▓рд╡реЗрдпрд░ рдЫрд┐рдкрд╛рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

IMHO рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ VCS рдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ pypy рдФрд░ рдХреБрдЫ рдордЬрдмреВрдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рдорд╛рдг рдХреЗ рд╕рд╛рде рдПрдХ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕реА рд░рдЦреЗрдВ рдХрд┐ VCS рдореЗрдВ рд╕рд╛рдордЧреНрд░реА pypy рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдорд╛рди рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ

0 рдкрдВрдЬреАрдХрд░рдг

dev -- public key --> pypa

1 рдЕрдкрд▓реЛрдбрд┐рдВрдЧ

setuptools -- git+https:/.... --> pypa
pypi --> Tor --> give me that commit --> vcs
pypi <-- Tor <-- here -- vcs
pypi checks the signature matches the dev

2 рдирд┐рд╖реНрдХреНрд░рд┐рдп:

pypi --> Tor --> give me that commit --> vcs
pypi <-- Tor <-- here -- vcs
pypi checks it

2 рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

flips a coin
if coin == 1:
  pip -- give me package git+https:/... --> pypi
  pip <-- signature || content -- pypi
  pip -- give me the signature --> vcs
  pip <-- signature -- vcs
else:
  pip -- give signature of package git+https:/... --> pypi
  pip <- signature -- pypi
  pip --> Tor --> give me that commit --> vcs
  pip <-- Tor <-- here -- vcs


pip checks if the signature matches the public key and signature from pypa
pip -- give me public key --> keyserver
pip <-- PK -- keyserver
pip checks signature given by VCS against the sdist given by pypy
pip caches public key and repo location

1 рд╕реНрдерд╛рдкрд┐рдд рд╕реНрд░реЛрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдХрд╛рд░рдг рд╡реАрд╕реАрдПрд╕ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ
2 рд▓реЗрдЦрдХ рднреА рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
3 pypa рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдзреЛрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
4 рд▓реЗрдЦрдХ pypy рдХреЛ рджрд┐рдП рдЧрдП рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдХрд░ рдзреЛрдЦрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ pypy рдХреЛ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рд╢рд╛рдЦрд╛ рдХреЛ рдпреВрдЖрд░рдЖрдИ рдХрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рджреЗрдВ рддреЛ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

@KOLANICH рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк pypy/pypa рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм PyPI (рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕) рд╕реЗ рд╣реИред PyPy, Python рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред PyPA (рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЕрдереЙрд░рд┐рдЯреА) рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕реНрдкреЗрд╕ рдореЗрдВ рдкреНрд░рдореБрдЦ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдХреГрдкрдпрд╛, рдкрд░рд┐рд╡рд░реНрдгреА рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рд╣реА рдХрд░реЗрдВ рдпрд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░реЗрдВред

рдЖрдк рдореМрдЬреВрджрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рдХрдо рдХрд░рдиреЗ/рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд/рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ (рд╡реНрдпрд╡рд╣рд╛рд░реНрдп) рд╕рдВрдХреНрд░рдордг рдпреЛрдЬрдирд╛ рдФрд░ рдПрдХ рдкреАрдУрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреАрдИрдкреАрдЖрдИ рд╕реЗ рдЕрддреАрдд рдореЗрдВ рдкреАрдИрдкреА 470 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рдерд╛ред

PyPI рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рджрд╛рди/рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЯреЛрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдПрдХ рдЕрдиреНрдп рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рд░рдЦрд░рдЦрд╛рд╡/рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ред рдпреЗ рджреЛрдиреЛрдВ рдкреНрд░рдореБрдЦ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдЪрд╛рд▓реВ рд░рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдЗрдирдХреА рд▓рд╛рдЧрдд рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ/рджреГрд╢реНрдпрдорд╛рди рди рд╣реЛред


рдХрдо рдирд╣реАрдВ, рдпрд╣ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдкреАрдИрдкреАрдЖрдИ рдХреЗ рдирдП рд╕реНрд╡рд░реВрдк рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк https://github.com/pypa/warehouse рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ

рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рджреЗрдЦреЗрдВ #5571 -- рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдзрдХреЗрд▓рд╛ рдЧрдпрд╛ рд╣реИред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдФрд░ рднреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ: рдЬрдм рдЖрдк PyPI рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХрд┐рд╕реА рдРрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╣реИ рдЬреЛ PyPI рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЬреИрд╕реЗред рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯрд░реА) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, pypi.org?

рдЕрдм, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ setuptools (рдЙрд░реНрдл рд░рдирд┐рдВрдЧ setup.py install ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ pip install рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЕрдм рдЕрдЪрд╛рд░ рдореЗрдВ рд╣реЛрдЧрд╛ред рдХрдИ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рдд рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред

рдЕрдм, рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреАрдкреАрдП рдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рднреА рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ pip рдХреЛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ / рдЬрд┐рди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рднрдВрдбрд╛рд░ рд╣реИрдВред

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

@ wvxvw-traiana рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреАрдЖрд░ #5571 рд╕реЗ рдЪреВрдХ рдЧрдП рд╣реИрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдкреАрдЖрд░ (рдФрд░ рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬ рдореЗрдВ - 18.0) рдкрд╛рдЗрдк рдкреАрдИрдкреА 508 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджреЗрдЧрд╛ред

рдЙрд╕рдХреЗ рдмрд╛рдж рдкреАрдЖрд░ (рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ 18.1+ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдкреАрдЖрдИрдкреА рдХреЗрд╡рд▓ рдРрд╕реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдордирд╛ рдХрд░ рджреЗрдЧрд╛ рдпрджрд┐ рдкреИрдХреЗрдЬ рдЬреЛ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ pypi.org рд╕реЗ рдЖрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкреАрдкреАрдЖрдИ рд╕реЗ рд╕рд╛рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред
рдпрджрд┐ рдЖрдк pypi.org рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рд╕рд╛рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рдореЗрдВ рд╕рд╛рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ

@bstrdsmkr рдХреНрдпрд╛ рдпрд╣ рд╡рд╣реА рдореВрд▓ рд╣реИ рдпрд╛ pypi рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ? рдЕрд░реНрдерд╛рдд

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рд╕рд╛рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдкрд░ рдХреБрдЫ рдФрд░ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдбрд╛рдпрд░реЗрдХреНрдЯ рдпреВрдЖрд░рдПрд▓ рд▓рд┐рдВрдХ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╣реАрдВ рд╕реЗ рднреА рдордирдорд╛рдиреЗ рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕ рд╕рдордЭ рдкрд░ рд╕реАрдзреЗ рдпреВрдЖрд░рдПрд▓ рд▓рд┐рдВрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
  2. рд▓реЛрдЧ рдкреАрдИрдкреАрдЖрдИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреАрдИрдкреАрдЖрдИ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ) рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рдпрдерди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ PyPI рдкреИрдХреЗрдЬ рдХреЗ рд╕рдордЭреМрддреЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо PyPI рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реАрдзреЗ URL рд▓рд┐рдВрдХ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рдпрд╣ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭ рдбрд╛рд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдм рдХреБрдЫ рдСрдбрд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреАрдИрдкреАрдЖрдИ рд╕реЗ рдЬреЛ рд╡реЗ рдмрд╛рд╣рд░реА рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред
  3. рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдПрдХ рд╕реЗрдЯрдкреВрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реЗрдЯрдкреВрд▓ рдХреА рдЖрдВрддрд░рд┐рдХ рдорд╢реАрдирд░реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкрд╛рдЗрдк рджреНрд╡рд╛рд░рд╛ред рдЗрд╕рд▓рд┐рдП рд╕реАрдзреЗ URL рд▓рд┐рдВрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдорд╛рдирдХ рдкреНрд░рддреНрдпрдХреНрд╖ URL рдлрд╝реЙрд░реНрдо рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд╡рдпрдВ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

рдХреЛрдИ рд╣реИ рдЬреЛ setuptools (рдЙрд░реНрдл рд░рдирд┐рдВрдЧ setup.py install) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЕрдм рдЕрдЪрд╛рд░ рдореЗрдВ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╕рд╣реА рд╣реИ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ setuptools рдиреЗ рд╕реАрдзреЗ рдпреВрдЖрд░рдПрд▓ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╣рдордд рдорд╛рдирдХ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдирд┐рдЬреА рд░реЗрдкреЛ рд╕реЗ рд╕рд╛рдорд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреАрдкреАрдкреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдУрд░, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдореБрдЭ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ред

рджреВрд╕рд░реА рдУрд░, рдпрд╣ "рдлрд┐рдХреНрд╕" рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд░рдЦрд╛ ... рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

echo "not-pypi 151.101.61.63" >> /etc/hosts
pip install --index-url not-pypi

рдореЗрд░рд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рддрд╣-рд╕реНрддрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред (рдЕрдиреНрдп рд╣рдорд▓реЗ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдЖрдк setup.py рдореЗрдВ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП https://github.com/pypa/pip/pull/4175#issuecomment -266305694 рджреЗрдЦреЗрдВред

@dpwrussell pypi.org рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдирд┐рдЬреА рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдирд┐рдЬреА рд░реЗрдкреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ wvxvw-traiana рдпрд╣ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЖрдкрдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл pypi.org рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рд╡рд░реНрддрдорд╛рди рдЪрд░реНрдЪрд╛ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд, рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

5726 рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЖрдИрдПрдордУ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░реА рдмрд┐рдЯ рд╣реИред

рдареАрдХ рд╣реИ рдлрд┐рд░ред рдореБрдЭреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВ:

  • рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдЕрднреА рднреА рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИрдВ рдФрд░ рдЕрдм рдкрд╛рдЗрдк 19.0 рдореЗрдВ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВред
  • рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ
  • PyPI рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрджрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ PEP 508 URL рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░ рджреЗрдЧрд╛ред

@pfmoore рдиреЗ рдЗрди рдлреИрд╕рд▓реЛрдВ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдпрд╛ рд╣реИ: https://github.com/pypa/pip/issues/4187#issuecomment -415067034

@pradyunsg setup.py рдореЗрдВ install_requires рдореЗрдВ PEP 508 URL рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХрдм рджреА рдЬрд╛рдПрдЧреА? рдХреНрдпрд╛ рдХреЛрдИ рддрд┐рдерд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ?

рдкрд┐рдк рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ -- рд╡рд╣ 18.1 рд╣реИ, рдЬреЛ рдЕрдХреНрдЯреВрдмрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдк https://pip.pypa.io/en/latest/Development/release-process/ рдкрд░ рдкрд╛рдЗрдк рдХреЗ 3 рдорд╣реАрдиреЗ рдХреЗ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред :)

рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ https://github.com/pypa/wheel/issues/249 рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ pypa/wheel#249 рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдЗрд╕ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд┐рдк 18.1 рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ

PEP 508 URL рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред

рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рд╡реЗ рдкреИрдХреЗрдЬ PyPI рдкрд░ рд╣реЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ PyPI рд╕реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп pip рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, PyPI рдРрд╕реЗ рдмрд╛рд╣рд░реА URL рдирд┐рд░реНрднрд░рддрд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реАрдзреЗ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ред (#4187)

рддреЛ рдЗрд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реЗ PyPI URL рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдкреИрдХреЗрдЬ рдХреЛ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@JarnoRFB рдкреИрдХреЗрдЬ рдЬреЛ PyPI рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрдирдореЗрдВ url рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдкреИрдХреЗрдЬ рдЬреЛ PyPI рдкрд░ рд╣реЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЙрдирдореЗрдВ url рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдЬреАрдердм (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╕реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреАред рдРрд╕реА рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

pip install git+https://github.com/bstrdsmkr/some_package.git

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

рдПрдХ рдорд╛рдореВрд▓реА рдЬреЛрдбрд╝:

...рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА url рд╕реЗ рдЗрдВрд╕реНтАНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ urls рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

...рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА URL (VCS рдпрд╛ рдЕрдиреНрдп) рдпрд╛ рдХрд┐рд╕реА рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдкреИрдХреЗрдЬ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ PyPI рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣...

рддреЛ рдХреНрдпрд╛ рдкрд╛рдЗрдк рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ install_requires рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЯреИрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рдереА рдФрд░ рд╡рд░реНрддрдорд╛рди рдкрд╛рдЗрдк рдкреНрд░рд▓реЗрдЦрди install_requires рдкреНрд░рд▓реЗрдЦрди рдХреЛ setuptools рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА dependency_links рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред

рд╕реНрд╡рдпрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдЧреИрд░-рдкреАрдИрдкреАрдЖрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ "рдЫреВрдЯ" рдкрд╛рдЗрдк 18.0 рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЧрдИ рдереА

AFAIK, install_requires рдореЗрдВ URL рдирд┐рд░реНрднрд░рддрд╛ рдкрд╛рдЗрдк 18.1 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ:

PEP 508 URL рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред

рд╕реНрд░реЛрдд: рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕

рдЙрд╣, рдореЗрд░реА рдУрд░ рд╕реЗ рдЯрд╛рдЗрдкреЛ - @pietrodn рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ

рдореИрдВ рдпрд╣рд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рд╕рдлрд▓ рдЙрджрд╛рд╣рд░рдг рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдереЗ (рдореЗрд░реА рддрд░рд╣) рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ - рдкреНрд░рдХреНрд░рд┐рдпрд╛-рдирд┐рд░реНрднрд░рддрд╛-рд▓рд┐рдВрдХред рдЗрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм GitHub рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрд░реЛрддреЛрдВ (PyPI рдирд╣реАрдВ) рд╕реЗ рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЧрдП рд╣реИрдВ, рдпрд╛ pip install рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt, рдпрд╛ python setup.py install, рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдкрд░ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрд╕реНрдХрд░рдг 18+, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдл-рд╡рд┐рд╖рдп рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдореЗрд░реА рдорд╛рдлрд╝реА:

рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВред txt рдлрд╝рд╛рдЗрд▓, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдкреИрдХреЗрдЬ "рдлреВ" рдХреА рдЧрд┐рдЯрд╣рдм рджреЗрд╡ рд╢рд╛рдЦрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

scipy>=0.17
matplotlib>=2.0
foo @ git+https://github.com/foo-organization/foo@dev#egg=foo-9999

рдЖрдкрдХреА setup.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:

import os, sys
from setuptools import setup, find_packages

def read_requirements():
    """Parse requirements from requirements.txt."""
    reqs_path = os.path.join('.', 'requirements.txt')
    with open(reqs_path, 'r') as f:
        requirements = [line.rstrip() for line in f]
    return requirements

setup(
    ..., # Other stuff here
    install_requires=read_requirements(),
    )

рдХреБрдЫ рд▓реЛрдЧ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ install_requires рдФрд░ requirements.txt рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдФрд░ рдПрдХ рдЬрд╛рд░реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрд╣, рд╕рд╛рдлред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдкреИрдХреЗрдЬ "рдП" рдФрд░ "рдмреА" рджреЛрдиреЛрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреИрдХреЗрдЬ "рдП" рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ "рдмреА" рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдЖрдк "рдП" рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдмреА" рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛрддрд╛) - рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

рдореИрдВрдиреЗ рдЖрдЬ рд╕реБрдмрд╣ рдпрд╣ рднреА рдкрдврд╝рд╛ рдХрд┐ install_requires рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдереЛрдбрд╝реЗ рдЦрд░рд╛рдм рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рд╕реЗрдЯрдкреНрдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкрд╛рдЗрдк рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреБрд░рд╛рдиреА рд╣реИ ...

рдореИрдВрдиреЗ рдЖрдЬ рд╕реБрдмрд╣ рдпрд╣ рднреА рдкрдврд╝рд╛ рдХрд┐ install_requires рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдереЛрдбрд╝реЗ рдЦрд░рд╛рдм рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рд╕реЗрдЯрдкреНрдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкрд╛рдЗрдк рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреБрд░рд╛рдиреА рд╣реИ ...

рдЖрдк install_requires рдХреЛ setup_requires рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЖрд╣, рд╕рд╛рдлред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдкреИрдХреЗрдЬ "рдП" рдФрд░ "рдмреА" рджреЛрдиреЛрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреИрдХреЗрдЬ "рдП" рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ "рдмреА" рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдЖрдк "рдП" рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдмреА" рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛрддрд╛) - рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

@stevebrasier рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдмреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдП рдореЗрдВ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрд┐рди рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣рд┐рд╖реНрдХрд░рдг рдорд╛рд░реНрдЧ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдерд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рдХреЛ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреАрдИрдкреА 508 рдпреВрдЖрд░рдПрд▓, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, 18.1.1 рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рдирд┐рд░реНрднрд░рддрд╛ рд▓рд┐рдВрдХ рд╕реЗ URL рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 3 рдорд╣реАрдиреЗ рд▓рдВрдмреА рдЦрд┐рдбрд╝рдХреА рдереА, рдЬреЛ рдХрд┐ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╕рдордп рд╣реИред

@rgerkin рд╣рд╛рдп, рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд╛рдн рдХреЗ рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ,

PACKAGE@ git+ ssh://[email protected] :OWNER/PACKAGE рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред git@рд╢рд╛рдЦрд╛
рдкрдврд╝рдирд╛ https://pypi.org/simple/PACKAGE/
'рдкреИрдХреЗрдЬ' рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреГрд╖реНрда рдирд╣реАрдВ рдорд┐рд▓рд╛ (рд╢рд╛рдпрдж рдЧрд▓рдд рд╡рд░реНрддрдиреА?)
рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕реНрдХреИрдирд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ (рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ)
рдкрдврд╝рдирд╛ https://pypi.org/simple/

рдкреИрдХреЗрдЬ @ git+ ssh://[email protected] :рд╕реНрд╡рд╛рдореА/рдкреИрдХреЗрдЬред git@рд╢рд╛рдЦрд╛ , рдпрд╣ install_requires рдореЗрдВ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдВрджрд╛рдЬрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдХреНрдпреЛрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?

@KevinMars рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рд╣реИ, рдЙрд╕рдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ git_ssh, bitbucket, a.git рдкреНрд░рддреНрдпрдп, рдПрдХ рдирд╛рдорд┐рдд рд╢рд╛рдЦрд╛ рдФрд░ рдХреЛрдИ рд╕рдВрд╕реНрдХрд░рдг рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЪреАрдЬреЗрдВ рдЖрдкрдХреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдмрдЬрд╛рдп рдкреАрдИрдкреАрдЖрдИ рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрдИрдкреА рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░ рд░рд╣реА рд╣реЛрдВред рдЖрдк рдкреАрдЖрдИрдкреА рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдХреБрдЫ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдХрд╛ рдкреНрд░рдпреЛрдЧ setup.py рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП python setup.py install рдЕрднреА рднреА рдореЗрдВ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ dependency_links ред

рдЖрдкрдХреА setup.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:

import os, sys
from setuptools import setup, find_packages

def read_requirements():
    """Parse requirements from requirements.txt."""
    reqs_path = os.path.join('.', 'requirements.txt')
    with open(reqs_path, 'r') as f:
        requirements = [line.rstrip() for line in f]
    return requirements

setup(
    ..., # Other stuff here
    install_requires=read_requirements(),
    )

@rgerkin рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдмреАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдкреАрдмреАрдЖрд░ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ?

@ рдХреЗрд╡рд┐рди рдорд╛рд░реНрд╕ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдлрд┐рдХреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛? рдореИрдВ рдПрд╕рдПрд╕рдПрдЪ рдкрд░ рдПрдХ рдирд┐рдЬреА рдмрд┐рдЯрдмрдХреЗрдЯ рд░реЗрдкреЛ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рд╛рдЦрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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

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

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

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

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

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

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

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