рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп "рд╡рд░реНрдЪреБрдиреЗрд▓" рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдЬрдЧрд░ 3 "рд╡реЗрдирд╡" рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, venv
рдФрд░ virtualenv
рд╡рд╛рддрд╛рд╡рд░рдг рджреЛрдиреЛрдВ рдЕрдЬрдЧрд░ 3 рдХреЗ "рд╡реЗрдирд╡" рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдХреЛ рдПрдХ рд╕рдХреНрд░рд┐рдп outer
virtualenv рдХреЗ рддрд╣рдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХрдИ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рд╛рдЗрдЯ-рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИред python -m pip
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рд╕реЗрдЯ рдЕрдк:
[vagrant@vagrant-arch ~]$ python3.6 -m venv venv
[vagrant@vagrant-arch ~]$ virtualenv -p python3.6 outer
[vagrant@vagrant-arch ~]$ source outer/bin/activate
(outer) [vagrant@vagrant-arch ~]$ python -m venv virtualenv
bin
рд╕рд╛рдордЧреНрд░реА:
[vagrant@vagrant-arch ~]$ ls venv/bin/
activate activate.csh activate.fish easy_install easy_install-3.6 pip pip3 pip3.6 python python3 python3.6
[vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate activate.csh activate.fish python python3
site-packages
рд╕рд╛рдордЧреНрд░реА:
[vagrant@vagrant-arch ~]$ ls venv/lib/python3.6/site-packages/
__pycache__ easy_install.py pip pip-9.0.1.dist-info pkg_resources setuptools setuptools-28.8.0.dist-info
[vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
[vagrant@vagrant-arch ~]$
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ python -m pip
"рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ", рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореВрд▓ рд╡рд░реНрдЪреБрдЕрди рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
(outer) [vagrant@vagrant-arch ~]$ deactivate
[vagrant@vagrant-arch ~]$ source virtualenv/bin/activate
(virtualenv) [vagrant@vagrant-arch ~]$ python -m pip install tox
рд╕рдХреНрд░рд┐рдп рд╡реЗрдирд╡ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╖рд╛рдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate activate.csh activate.fish python python3
рд▓реЗрдХрд┐рди рдореВрд▓ virtualenv рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/lib/python3.6/site-packages/
__pycache__ pip pkg_resources pluggy-0.5.2.dist-info py-1.4.34.dist-info setuptools-36.6.0.dist-info six.py tox-2.9.1.dist-info virtualenv.py wheel
easy_install.py pip-9.0.1.dist-info pluggy py setuptools six-1.11.0.dist-info tox virtualenv-15.1.0.dist-info virtualenv_support wheel-0.30.0.dist-info
(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/bin
activate activate.csh activate.fish activate_this.py easy_install easy_install-3.6 pip pip3 pip3.6 python python-config python3 python3.6 tox tox-quickstart virtualenv wheel
рдореИрдВрдиреЗ --copies
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╡реЗрдирд╡ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ред
рдЗрд╕реЗ рдпрд╣рд╛рдВ рднреА рджреЗрдЦреЗрдВ: https://github.com/pre-commit/pre-commit/issues/755
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ .real_prefix
рдиреГрддреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП venv
рдУрд░ рд╕реЗ рдПрдХ рдлрд╝рд┐рдХреНрд╕реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ pre-commit
рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ
рдпрд╣ рдмреАрдкреАрдУ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: https://bugs.python.org/issue30811
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡реЗрд╡ рдХреА рдУрд░ рд╕реЗ
.real_prefix
рдбрд╛рдВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд╛рд╣рд┐рдП venv
рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд┐ рдпрд╣ рднреАрддрд░ рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдПрдХ virtualenv
, рдпрд╛ рдЪрд╛рд╣рд┐рдП virtualenv
рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ рдмрдирд╛рдиреЗ venv
? рдПрдХ рддрд░рдл, virtualenv
venv
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, venv
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рд╖-рд╡реЗрд╡ рдореЗрдВ рдЬреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ:
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрде рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ python3
рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк python3.6
рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди python3
рдЕрдВрдХ python3.4
ред
рдореИрдВрдиреЗ рдРрд╕реЗ рд╣реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛: https://github.com/pre-commit/pre-commit/blob/805a2921ad0d34698433972c6fcb1a6dca47191d-pre_commit/languages/python_venv.py#L13 -L1339-L1339
(рдореБрдЦреНрдп рдЕрдВрддрд░ рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ bin/$(basename exe)
рдмрдЬрд╛рдп bin/python3
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
рдПрд╣, рд╣рд╛рдБ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡реАрд╡реА рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@gaborbernat рдмрд░реНрдбрд╛рд░рд┐рдпреЛ / рдкреНрдпреВ # 173 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред @ рдХреБрд░рдирд╕реБрдЭрд░ рдХреА рджреЗрдЦрднрд╛рд▓ рдореЗрдВ рдЭрдВрдХрд╛рд░?
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереАред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдмрд╕ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@gaborbernat рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ "рд╡рд░реНрдЪреБрдЕрди рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣рд╛ рд╡реАрд╡реАрдПрди" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ # 1339 рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
@FranklinYu рдЕрджреНрдпрддрди рд╢реАрд░реНрд╖рдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ?
рдпрд╣ рдЕрдм рдкреВрд░реЗ рдЬреЛрд░реЛрдВ рдкрд░ # 1366 рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд╛рд╣рд┐рдП
venv
рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд┐ рдпрд╣ рднреАрддрд░ рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдПрдХvirtualenv
, рдпрд╛ рдЪрд╛рд╣рд┐рдПvirtualenv
рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ рдмрдирд╛рдиреЗvenv
? рдПрдХ рддрд░рдл,virtualenv
venv
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░,venv
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИредрдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рд╖-рд╡реЗрд╡ рдореЗрдВ рдЬреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ:
https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c7373d57432d5e/src/tox_venv/ooks.py#L10 -L49
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрде рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓
python3
рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкpython3.6
рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рдиpython3
рдЕрдВрдХpython3.4
ред