рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдпрд╛ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ,
virtualenv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЗрдпрд╛рди рдмреЗрдХрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рддред
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╡реНрдпрд╛рдкрдХ рдирд┐рдХрд▓рд╛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЕрдм рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ 3.3 рдкрд╛рдпрдерди рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ virtualenv рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓
рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реИ ред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд╡реЗрдирд╡ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╕рдордп, рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ,
pyvenv.cfg
рдирд╛рдо pyvenv.cfg
рдлрд╝рд╛рдЗрд▓ pyvenv.cfg
; - рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдореБрдЦреНрдп рдШрд░ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧрд╛;
- рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ (рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдХрд░
os.py
рджреНрд╡рд╛рд░рд╛); - рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ - рд╕рдм рдХреБрдЫ рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рдорд╛рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реИред
рд╡реЗрдирд╡ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрд╡рд░рдг рд╣реИред
рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ
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
рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдЧреБрдг рджреВрдВрдЧрд╛:
- reference.bin_path - рджреНрд╡рд┐рдкрджреАрдп рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде,
- reference.env_dir - рдирд┐рд░реНрдорд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде,
- reference.env_exe - рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдкрдеред
рддрджрдиреБрд╕рд╛рд░, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
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_DIR__
__VENV_NAME__
__VENV_BIN_NAME__
__VENV_PYTHON__
рдЙрджрд╛рд╣рд░рдг рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
__VENV_PYTHON__
рдХреЛ рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
install_scripts
рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдмрд┐рди / рд╕рдХреНрд░рд┐рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
...