Я бы просто избегал использования virtualenv
после Python3.3 + и вместо этого использовал стандартную библиотеку venv
. Чтобы создать новую виртуальную среду, вы должны набрать:
$ python3 -m venv <MYVENV>
virtualenv
пытается скопировать двоичный файл Python в каталог bin виртуальной среды. Однако он не обновляет ссылки на библиотечные файлы, встроенные в этот двоичный файл, поэтому, если вы собираете Python из исходного кода в несистемный каталог с относительными именами путей, двоичный код Python разрывается. Поскольку именно так вы делаете копируемый распространяемый Python, это большой недостаток. Кстати, чтобы проверить ссылки на файлы встроенной библиотеки на 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 . Свежесть, потому что виртуальные среды начинаются только со стандартных библиотек, которые поставляются с Python, вам придется заново устанавливать любые другие библиотеки, pip install
пока виртуальная среда активна. Песочница, потому что ни одна из этих новых библиотек не видна за пределами виртуальной среды, поэтому вы можете удалить всю среду и начать заново, не беспокоясь о том, как повлияет на вашу базовую установку Python. Пользовательские библиотеки, потому что целевая папка виртуальной среды создается безsudo
в каком-то каталоге у вас уже есть, поэтому вам не понадобятся sudo
разрешения для установки в него библиотек. Наконец, он безопасен для нескольких Python , поскольку при активации виртуальных сред оболочка видит только версию Python (3.4, 3.5 и т. Д.), Которая использовалась для создания этой виртуальной среды.
pyenv
похоже на venv
то, что позволяет управлять несколькими средами Python. Однако pyenv
вы не можете удобно откатить установку библиотеки до некоторого начального состояния, и вам, вероятно, понадобятся admin
привилегии для обновления библиотек. Поэтому я думаю, что это также лучше всего использовать venv
.
За последние пару лет я обнаружил много проблем в системах сборки (пакеты emacs, сборщики автономных приложений Python, установщики ...), которые в конечном итоге сводятся к проблемам virtualenv
. Я думаю, что Python станет лучшей платформой, если мы исключим эту дополнительную опцию и будем использовать только ее venv
.