Virtualenv: рдкрд╛рдЗрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ рд╢реЗрдмрд╛рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдкрд╛рд░ рд╣реЛ рдЧрдИ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдкреНрд░реИрд▓ 2014  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/virtualenv

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

рд▓рд┐рдирдХреНрд╕ рдкрд░, рдкрд╛рдЗрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЗрд╕ рдкрд╛рдЗрдк рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╢реЗрдмреИрдВрдЧ (#!) рд▓рд╛рдЗрди рд╣реИ рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рд╣реИред

рдпрджрд┐ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдкреВрд░реНрдг рдкрде рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ (рдЧрд╣рд░рд╛рдИ рд╕реЗ рдШреЛрдВрд╕рд▓рд╛ рдФрд░/рдпрд╛ рдмрдбрд╝реЗ рдкрде рдирд╛рдо), рддреЛ рдпрд╣ рд╢реЗрдмреИрдВрдЧ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╢реЗрдмреИрдВрдЧ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдХрд░реНрдиреЗрд▓ рдореЗрдВ BINPRM_BUF_SIZE рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ /usr/include/linux/binfmts.h рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд┐рди Linux рдорд╢реАрдиреЛрдВ рдкрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдпрд╣ рд╕реАрдорд╛ 128 рдкрд░ рд╕реЗрдЯ рд╣реИред

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

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

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

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рднреНрд░рдорд┐рдд рд▓рдЧрддрд╛ рд╣реИ:

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

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ pip install -r requirements.txt рдмрдЬрд╛рдп python -m pip install -r requirements.txt

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

рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рднреАред

рдЙрдкрд╛рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реИрдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ setuptools (рдпрджрд┐ рдЖрдк sdist рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ) рдпрд╛ distlib (рдпрджрд┐ рдЖрдк рд╡реНрд╣реАрд▓ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ) рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдПрдХ рдУрдПрд╕ рд╕реАрдорд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдлрд┐рдХреНрд╕ _is't_ рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рд╕рдордп рдореЗрдВ, рдкрд░реНрд▓ рдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рджреВ рдордВрддреНрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ (рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧреБрдЧрд▓реНрд╕ ...) рд╣рд╛рдВ, рдРрд╕рд╛ рдХреБрдЫ (рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрд┐рдд)

#!/bin/sh
eval 'exec /the/long/interpreter/path/to/python $0 ${1+"$@"}'

рдЖрдкрдХреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рдкрд╛рдпрдерди рдиреЗ eval-exec рд▓рд╛рдЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд┐рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

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

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

рдореИрдВ рдЗрд╕реЗ рднреА рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬреЗрдирдХрд┐рдВрд╕ рдмрд┐рд▓реНрдб рдХреЗ рднреАрддрд░ рд╕реЗ pip рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ pwd рдХреЗ рд▓рд┐рдП _very_ рд▓рдВрдмреЗ рд░рд╛рд╕реНрддреЗ рд╣реИрдВред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдмрд┐рд▓реНрдб рдЧреБрд▓рд╛рдо рд╣реИрдВ (рд╕рднреА рдореЗрдВ BINPRM_BUF_SIZE 128 рдкрд░ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рдкрд╛рдЗрдк рдФрд░ рдкрд╛рдпрдерди рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ) рдФрд░ рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдирд╣реАрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрде рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рднреАред

рдореБрдЭреЗ @ рдмреА-рд▓реЙрдиреНрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рд╣реИ; рдЕрдЧрд░ virtualenv рдПрдХ рдРрд╕рд╛ рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдлреНрд▓реИрдЯ-рдЖрдЙрдЯ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ virtualenv рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реА рд╣реЗрдбрд░ рд╕реЗ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдо рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╣реИрдВ (рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдУрдПрд╕рдПрдХреНрд╕ рдХрд░рддрд╛ рд╣реИ?)

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдУрдПрд╕ рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВ, рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ ...

  1. рдХреНрдпрд╛ ctypes рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
  2. рдХреИрд╕реЗ рдХреБрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
# on Linux, BINPRM_BUF_SIZE == 128, giving us a maximum shebang length of 127
# 2 bytes for #!, 11 bytes for '/bin/python' leaves us with 114
if sys.platform() == 'Linux' and len(home_dir) > 114:
    log.warn("bin/activate may not work your system, as the length of the shebang line will exceed 128 characters")
  1. рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред
  2. рдореИрдВ рдПрдХ рд╡рд┐рдВрдбреЛрдЬрд╝ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдПрдХ рдкреАрдЖрд░ рдмрдврд╝рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓реЛрдЧ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ ...

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреА рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреАрдЖрд░ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж @jantman рдФрд░ @pfmoore : рдореБрд╕реНрдХрд╛рди:

BINPRM_BUF_SIZE рдХреЛ рдХрд░реНрдиреЗрд▓ рд╣реЗрдбрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдореБрдЯреНрдареА рднрд░ рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рд╣реЗрдбрд░ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдХрдореА, рдЬреЛ рдХрд╣реАрдВ рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ)ред

рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рднреА рд╕рдордп рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ ( рдпрд╣рд╛рдВ рдЕрдзрд┐рдХрддрдо рд╢реЗрдмреИрдВрдЧ рд▓рдВрдмрд╛рдИ рдХрд╛ рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди execve(2) рдореИрди рдкреЗрдЬ рдХреЗ "рдиреЛрдЯреНрд╕" рдЦрдВрдб рдореЗрдВ рджреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреЙрдЬрд╝рд┐рдХреНрд╕-рд╕рдВрдЧрдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреАрдПрд╕рдбреА рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ 8,000 рд╡рд░реНрдгреЛрдВ рдХреА рд╕реАрдорд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

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

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

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдкреНрд░реВрдл-рдСрдл-рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЛрдб рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдкрде рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╢реА-рдмреИрдВрдЧ рд▓рдВрдмрд╛рдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдпрд╣рд╛рдБ рд╣реИ: https://gist.github.com/jantman/ba39f98936643bc948bd

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

рд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдиреЗ рдЬреИрд╕реЗ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрдпреЛрдВ рди рдмрдирд╛рдПрдВ? рдЕрдЧрд░ рдЕрдЬрдЧрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдм рдХреБрдЫ рдЖрдбрд╝реВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рджреЛрд╣рд░рд╛рдирд╛:

  1. рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ setuptools рдФрд░ distlib рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ - рдХреЛрдб рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдпрд╛ рдкреАрдЖрдИрдкреА рдореЗрдВ рдирд╣реАрдВ рд╣реИред
  2. рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдУрдПрд╕рдПрдХреНрд╕, рдмреАрдПрд╕рдбреА, ... рд╕рд╣рд┐рдд рд╕рднреА рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рди рдХрд┐ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ (рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╢рд░реНрдд рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ)

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

рд╣рдордиреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ рд╣реИред

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

#!/usr/bin/env python

рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдмрд┐рди рдбреАрдЖрдИрдЖрд░ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред Virtualenv рд╕рдХреНрд░рд┐рдпрдг рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рднреНрд░рдорд┐рдд рд▓рдЧрддрд╛ рд╣реИ:

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

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ pip install -r requirements.txt рдмрдЬрд╛рдп python -m pip install -r requirements.txt

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

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

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

LeonSpors picture LeonSpors  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

schlamar picture schlamar  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

erbatyr picture erbatyr  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

neildhar picture neildhar  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ