Я б просто уникав використання 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.