Я б просто уникав використання virtualenv
після Python3.3 + і замість цього використовував стандартну бібліотеку, що постачається venv
. Щоб створити нове віртуальне середовище, ви введете:
$ python3 -m venv <MYVENV>
virtualenv
намагається скопіювати бінарний файл Python у каталог бін віртуального середовища. Однак він не оновлює посилання на файли бібліотеки, вбудовані в цей двійковий файл, тому якщо ви будуєте Python з джерела в несистемний каталог з відносними іменами шляху, бінарний Python розривається. Оскільки саме так ви робите копіювальний Python, який роздається, це великий недолік. BTW для перевірки вбудованих посилань на файли бібліотеки на OS X, використовуйте otool
. Наприклад, з вашого віртуального середовища введіть:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Отже, я б уникнув virtualenvwrapper
і pipenv
. pyvenv
застаріло. pyenv
Здається, він часто використовується там, де virtualenv
його використовують, але я б утримався від нього також, оскільки, думаю, venv
також робить те pyenv
, для чого створений.
venv
створює віртуальне середовище в оболонці, яке є свіжим та пісочним , із встановленими користувачем бібліотеками , і це багатопітонна безпека . Свіже, оскільки віртуальне середовище починається лише зі стандартних бібліотек, які постачаються з python, вам доведеться знову встановлювати будь-які інші бібліотеки, pip install
поки віртуальне середовище активне. Пісочниця, оскільки жодна з цих нових установок бібліотеки не видно за межами віртуального середовища, тому ви можете видалити все середовище та почати заново, не переживаючи про вплив на встановлення базового пітона. Бібліотеки, які встановлюються користувачем, оскільки цільова папка віртуальної середовища створена безsudo
в деякому каталозі, який ви вже маєте, тому вам не знадобляться sudo
дозволи на встановлення в нього бібліотек. Нарешті, це багатопітонна безпека , оскільки при активації віртуальних середовищ оболонка бачить лише версію python (3.4, 3.5 тощо), яка була використана для створення цього віртуального середовища.
pyenv
подібний тим, venv
що дозволяє керувати кількома середовищами python. Однак, якщо pyenv
ви не можете зручно встановити бібліотеку відката до певного стартового стану, і вам, швидше за все, потрібні admin
привілеї в якийсь момент для оновлення бібліотек. Тому я думаю, що це також найкраще використовувати venv
.
За останні кілька років я виявив багато проблем у системах збирання (пакети emacs, окремі розробники додатків python, інсталятори ...), які врешті-решт стикаються з проблемами virtualenv
. Я думаю, що python стане кращою платформою, коли ми усунемо цю додаткову опцію та використовуватимемо лише venv
.