рдПрдХ рдмреЙрдХреНрд╕ рдореЗрдВ рдЕрдЬрдЧрд░ - рдЕрдЬрдЧрд░ 3.3 рдореЗрдВ venv

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

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╡реНрдпрд╛рдкрдХ рдирд┐рдХрд▓рд╛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЕрдм рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ 3.3 рдкрд╛рдпрдерди рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ virtualenv рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реИ ред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


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


рд╡реЗрдирд╡ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрд╡рд░рдг рд╣реИред

рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ venv рдорд╛рдзреНрдпрдо рд╕реЗ venv рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд╛рдЗрд╡реЗрдирд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 pyvenv /path/to/new/venv 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдпреЗрдЧреА, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╕рднреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧреАред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреЙрд▓ рдереЛрдбрд╝реА рдФрд░ рдЕрдзрд┐рдХ рд╣реЛрдЧреА:
 c:\Python33\python -m venv /path/to/new/venv 


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

Virtualenv рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирдП venv рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЦрд╛рд▓реА рд╣реИред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рддрдп 3.4 рдореЗрдВ рдЕрдЬрдЧрд░ 3.3 рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред (рдзрдиреНрдпрд╡рд╛рдж, svetlov )ред

рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓?


рдЖрдк рдмрд┐рди / рд╕рдХреНрд░рд┐рдп (рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдкрд┐рдпреЛрдВ / рд╕рдХреНрд░рд┐рдп) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА рд╕рдХреНрд░рд┐рдпрдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 cd /path/to/new/venv . bin/activate python3 some_script.py 


рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдмрд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдмреБрд▓рд╛рдУ рдФрд░ рд╕рдм рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
 /path/to/new/venv/bin/python3 some_script.py 


рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рд╕реАрдзреЗ #!/usr/bin/env python3 рдорд╛рдзреНрдпрдо рд╕реЗ #!/usr/bin/env python3 , рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдпрдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ред

рдЕрджреНрдпрддрди


рдпрджрд┐ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рднреА рдХрднреА-рдХрднреА рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣ рд╕рд░рд▓ рд╣реИ - рд╣рдо рд╡реЗрд╡ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг, --upgrade рдЬреЛрдбрд╝рдирд╛:
 pyvenv --upgrade /path/to/new/venv 


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

EnvBuilder рдПрдХреНрд╕рдЯреЗрдВрд╢рди


рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╕рднреА рдХрд╛рд░реНрдп venv.EnvBuilder рд╡рд░реНрдЧ рдкрд░ venv.EnvBuilder , рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

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

рд╡рд╛рддрд╛рд╡рд░рдг create(self, env_dir) , рдореВрд▓ (рд╡рд░реНрдЧ create(self, env_dir) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореВрд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
  def create(self, env_dir): env_dir = os.path.abspath(env_dir) context = self.ensure_directories(env_dir) self.create_configuration(context) self.setup_python(context) if not self.upgrade: self.setup_scripts(context) self.post_setup(context) 


рд╡рд┐рдзрд┐ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ: рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ( ensure_directories ), рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ( create_configuration ) setup_python , рдЕрдЬрдЧрд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ ( setup_python ) рдЬреЛрдбрд╝рдХрд░ рдФрд░ рд╕рдХреНрд░рд┐рдпрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( setup_scripts ) setup_scripts ред

рдЕрдВрдд рдореЗрдВ, post_setup рд╣реБрдХ post_setup , рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ post_setup рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ upgrade рд╕рд╛рде рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рдФрд░ рд╣реБрдХ рдЬреЛрдбрд╝рдХрд░ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
 class ImprovedEnvBuilder(venv.EnvBuilder): def create(self, env_dir): """Overwrite create method (add more hooks)""" env_dir = path.abspath(env_dir) context = self.ensure_directories(env_dir) self.create_configuration(context) self.setup_python(context) if not self.upgrade: self.setup_scripts(context) self.post_setup(context) else: self.post_upgrade(context) def post_upgrade(self, context): pass 


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


рддрджрдиреБрд╕рд╛рд░, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 import subprocess import venv class MyEnvBuilder(venv.EnvBuilder): def post_setup(self, context): script = '/path/to/some_script.py' subprocess.call([context.env_exe, script]) 


Venv рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ


рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

Virtualenv рдореЗрдВ, рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ #/usr/bin/env python3 рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ . bin/activate . bin/activate ред рдпрджрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ venv рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред EnvBuilder рдХреЗ рдЕрдВрджрд░, install_scripts(self, context, path) рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рдмрдирд╛рдП рдЧрдП рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИред path рдЖрдкрдХреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ "рд╕рд╛рдорд╛рдиреНрдп", "рдПрдирдЯреА", "рдкреЙрдЬрд╝рд┐рдХреНрд╕", рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрде рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓реЗрдВред рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП "рд╕рд╛рдорд╛рдиреНрдп" рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ, "рдПрдирдЯреА" рдореЗрдВ - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, "рдкреЙрдЬрд╝рд┐рдХреНрд╕" - рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдФрд░ рдЕрдиреНрдп рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:


рдЙрджрд╛рд╣рд░рдг рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
 #!__VENV_PYTHON__ import sys import my_module if __name__ == '__main__': sys.exit(my_module.run(sys.argv)) 


__VENV_PYTHON__ рдХреЛ рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

install_scripts рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдмрд┐рди / рд╕рдХреНрд░рд┐рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

...


Source: https://habr.com/ru/post/In157287/


All Articles