Сегодня я увидел пример использования команды virtualenv . Это были следующие четыре команды:

virtualenv /tmp/vetest
source /tmp/vetest/bin/activate
pip install ipython-notebook
deactivate

Первая команда создает /tmp/vetest/ в котором есть четыре подкаталога: lib , include , local , bin .

Тогда мы используем source . Что оно делает? Насколько я понимаю, это ставит меня в виртуальную среду. Находясь там, я могу устанавливать разные вещи (иначе я не могу этого сделать, так как у меня нет прав root).

При деактивации я покидаю виртуальную среду. Это то, что я понимаю до сих пор.

Несколько вопросов остаются неясными для меня. Что эта команда имеет отношение к Python? Является ли эта команда "стандартной" для систем Unix? virtualenv делает нечто большее, чем просто создание новых каталогов? Что такое каталог /tmp/ ?

1 ответ1

2

Удивительно, но поиск в Google " virtualenv " приводит вас к документации в virtualenv. Если вы хотите использовать его, я предлагаю хотя бы краткое прочтение.

Как следует из названия, virtualenv - это инструмент для создания изолированных или "виртуальных" сред для Python. Он позволяет вам настроить несколько независимых экземпляров для разных проектов, каждый со своими модулями и даже версиями Python. Это полезно в различных обстоятельствах, не в последнюю очередь, когда у вас нет прав администратора и вы хотите установить модули Python. Из документов:

Основная проблема, которую нужно решить, - это зависимости, версии и косвенные права доступа. Представьте, что у вас есть приложение, которому требуется версия 1 LibFoo, а другому приложению требуется версия 2. Как вы можете использовать оба этих приложения? Если вы устанавливаете все в /usr/lib/python2.7/site-packages (или где-либо в другом месте вашей платформы), легко оказаться в ситуации, когда вы непреднамеренно обновляете приложение, которое не следует обновлять.

Или, в целом, что если вы хотите установить приложение и оставить его? Если приложение работает, любое изменение в его библиотеках или версиях этих библиотек может нарушить работу приложения.

Кроме того, что если вы не можете установить пакеты в глобальный каталог site-packages ? Например, на общем хосте.

Во всех этих случаях virtualenv может вам помочь. Он создает среду, которая имеет свои собственные установочные каталоги, которая не разделяет библиотеки с другими средами virtualenv (и, по желанию, также не имеет доступа к глобально установленным библиотекам).

Так что у вас есть это. lib/ находятся модули. include/ предназначен для заголовков и других общих ресурсов. local/ предназначен для вещей, которые живут за пределами основного модуля site-packages` (в lib/), таких как ваши собственные приложения.И наконец, bin/`- это место, где живут исполняемые файлы.

Каталог /tmp , как это звучит, является временным каталогом - используется для временного хранения вещей. В зависимости от системы, они могут удаляться или не удаляться периодически или при перезагрузке системы. Или нет, это зависит. Ваша первая команда создала подкаталог /tmp именем vetest/ .

Ваша вторая команда, source , в основном означает «запустить команды, перечисленные в этом файле». Это встроенная команда, часть оболочки. Результатом этой команды является запуск виртуальной среды. Теперь вы должны увидеть (venv) в командной строке.

Оказавшись внутри, вы использовали программу установки Python, или pip , которая автоматически включается в каждый virtualenv. pip связывается с индексом пакетов Python или PyPI. Это самое близкое, что есть у сообщества Python к центральному репозиторию, похожему на Perl CPAN или Ruby's rubygems.org. В вашем случае, pip искал модуль ipython-notebook , которого, к сожалению, не существует (ноутбук является частью базовой установки IPython ). Если бы вы запустили pip install ipython вы бы получили что-то вроде:

Downloading/unpacking ipython
  Downloading ipython-0.13.2.zip (6.4MB): 6.4MB downloaded
  Running setup.py egg_info for package ipython

Installing collected packages: ipython
  Running setup.py install for ipython

    Installing ipcluster3 script to /tmp/vetest/bin
    Installing irunner3 script to /tmp/vetest/bin
    Installing ipcontroller3 script to /tmp/vetest/bin
    Installing iptest3 script to /tmp/vetest/bin
    Installing pycolor3 script to /tmp/vetest/bin
    Installing iplogger3 script to /tmp/vetest/bin
    Installing ipengine3 script to /tmp/vetest/bin
    Installing ipython3 script to /tmp/vetest/bin

Successfully installed ipython
Cleaning up...

Из /tmp/vetest вы теперь можете набрать ipython3 notebook (при условии, что у вас есть Python 3, который вы должны использовать в любом случае), чтобы запустить сервер IPython Notebook и сеанс в браузере. К сожалению, это не удастся, потому что вам не хватает связок, таких как tornado , но они легко устанавливаются с помощью pip . Список основных зависимостей доступен на веб-сайте IPython. Для дополнительных функций, таких как pylab требуются NumPy , SciPy и matplotlib .

Наконец, команда deactivate завершает сеанс virtualenv .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .