Как найти виртуальные программы

Содержание

  1. Детектим виртуалки
  2. Определяем факт запуска приложения в VirtualBox, VMware Workstation, Virtual PC и Parallels Workstation
  3. Как распознать виртуальную машину?
  4. Анализируем оборудование
  5. Хакер #174. Собираем квадрокоптер
  6. Вспомогательные процессы, окна и другие «подозрительные» объекты
  7. Что еще «подозрительного» можно найти в реестре?
  8. Возможности, заложенные производителем
  9. Заключение
  10. Обзор 3-х популярных виртуальных машин для Windows
  11. Для чего используются виртуальные машины
  12. Oracle Virtualbox
  13. Некоторые настройки ВМ и гостевой системы
  14. VMware Workstation Pro
  15. Некоторые опции виртуальной машины VMware
  16. Microsoft Hyper-V
  17. Некоторые опции виртуальных машин Hyper-V
  18. Виртуальные машины. Как сделать компьютер в компьютере
  19. Содержание
  20. Содержание
  21. Что такое виртуальные машины
  22. Зачем нужны виртуальные машины
  23. Основные термины и их понимание
  24. Установка
  25. Как работает виртуальная машина
  26. Создаем виртуальный компьютер
  27. Настраиваем взаимодействие с хостом и сеть
  28. Проблемы с виртуализацией
  29. Виртуализируй это!

Детектим виртуалки

Определяем факт запуска приложения в VirtualBox, VMware Workstation, Virtual PC и Parallels Workstation

Не каждому хочется, чтобы его, кхм, новый текстовый редактор какие-нибудь неприятные дядьки исследовали под виртуальной машиной. Детект виртуалок — обязательный функционал определенного рода софта, и поэтому наша рубрика ну совершенно никак не может обойтись без обзора соответствующих способов!

Как распознать виртуальную машину?

Во-первых, любая виртуальная машина несет на своем борту какое-нибудь специфическое оборудование. Это касается видеоадаптера, жесткого диска, идентификатора процессора, версии BIOS, MAC-адреса сетевой карты.

Во-вторых, виртуальные машины оставляют следы в системе в виде запущенных вспомогательных процессов, драйверов и других специфических объектов.

В-третьих, если как следует покопаться в реестре виртуальной машины, там можно найти много всяких интересных ключей, характерных только для виртуальных машин.

Ну и в-четвертых, некоторые производители специально оставляют возможности, позволяющие обнаружить их продукты.

Что же касается общих признаков наличия виртуальной машины, предложенных в свое время госпожой Рутковской (характерное расположение таблиц IDT, GDT и LDT, а также время выполнения операций процессором), то в настоящий момент все эти признаки трудно поддаются анализу и приведению к какому-нибудь общему знаменателю, главным образом из-за многоядерности и многоликости современных процессоров.

Анализируем оборудование

Начнем, пожалуй, с жесткого диска. Если посмотреть идентификатор жесткого диска в диспетчере устройств на виртуальной машине, то в его составе можно увидеть интересные строчки:

Самый простой способ узнать наименование жесткого диска — прочитать значение ключа с именем «0» в ветке реестра HKLMHARDWARESYSTEMCurrentControlSetServicesDiskEnum.

В этом месте перечисляются все дисковые накопители в системе, и первым, как раз в ключе с именем «0», будет тот диск, с которого произошла загрузка системы.

1Идентификатор жесткого диска VirtualBox в реестре

Хакер #174. Собираем квадрокоптер

Как читать реестр, я думаю, ты знаешь. Используем сначала API RegOpenKeyEx для открытия нужного ключа, далее с помощью RegQueryValueEx читаем значение. Выглядеть это должно примерно вот так:

Далее все просто — используем strstr для поиска нужных нам строк в считанном значении и, в зависимости от результата сравнения, делаем вывод. Версия BIOS содержится в ключе «SystemProductName» в ветке HKLMHARDWAREDESCRIPTIONSystemBIOS. К примеру, для VMware там будет лежать строка «VMware Virtual Platform», а для VirtualBox — «VBOX –1».

Прочитать это все можно с помощью все тех же API — RegOpenKeyEx и RegQueryValueEx.

2Версия BIOS Parallels Workstation в реестре

Данные о видеоадаптере можно подглядеть в HKLMSystemCarrentControlSetEnumPCI. В этой ветке перечислено все, что подключено к шине PCI, в том числе и видеокарта. Для VirtualPC это строчка вида VEN_5333&DEV_8811&SUBSYS_00000000&REV_00, которая определяет видеоадаптер S3 Trio 32/64, эмулируемый виртуалкой от Microsoft — на реальном железе такое оборудование нынче днем с огнем не сыскать (а у меня такая была в конце прошлого века. — Прим. ред.). Для VirtualBox видеокарта описана последовательностью VEN_80EE&DEV_BEEF&SUBSYS_00000000&REV_00, что расшифровывается как «VirtualBox Display», а у Parallels Workstation — строка VEN_1AB8&DEV_4005&SUBSYS_04001AB8&REV_00 определяет видеоадаптер «Parallels Display».

Помимо этого, в VirtualBox можно найти строку VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00, определяющую некий «VirtualBox Device», а у Parallels Workstation строки VEN_1AB8&DEV_4000&SUBSYS_04001AB8&REV_00 и VEN_1AB8&DEV_4006&SUBSYS_04061AB8&REV_00, определяющие «Parallels Tools Device» и «Parallels Memory Controller» соответственно.

Алгоритм действий следующий: пытаемся открыть нужный нам ключ, и если он открывается успешно, то оборудование, описанное этим ключом, в наличии и можно делать вывод о присутствии какой-либо виртуальной машины:

Идентификатор процессора определяется с помощью команды cpuid. Благодаря ей можно получить много всякой полезной информации об установленном процессоре. Вид выдаваемой этой командой информации зависит от содержимого регистра EAX. Результат работы команды записывается в регистры EBX, ECX и EDX. Подробно про эту команду можно почитать в любой книге по программированию на ассемблере. Для наших целей мы будем использовать эту инструкцию, предварительно положив в регистр EAX значение 0x40000000:

После выполнения этого кода на VMware Workstation в переменных ID_1, ID_2 и ID_3 будут записаны значения 0x61774d56, 0x4d566572 и 0x65726177 соответственно (в символьном представлении это не что иное, как «VMwareVMware»), на VirtualBox в ID_1 и в ID_2 будет лежать значение 0x00000340, а на Parallels Workstation в ID_1 0x70726c20, в ID_2 — 0x68797065 и в ID_3 — 0x72762020 (что соответствует строке «prl hyperv»).

Использование MAC-адреса для идентификации производителя сетевой карты, конечно, не самый надежный способ (ибо MAC-адрес довольно-таки просто поменять), но тем не менее его вполне можно применить для детекта виртуальных машин в качестве дополнительной проверки.

Ты наверняка знаешь, что первые три байта MAC-адреса сетевой карты определяют ее производителя. Производители виртуальных машин в этом плане не исключение:

Вытащить эти первые три байта из MAC-адреса нам поможет API-функция GetAdaptersInfo:

Вспомогательные процессы, окна и другие «подозрительные» объекты

Для нормальной работы практически все виртуальные машины требуют установки дополнений к гостевой операционной системе, например VBoxGuestAddition для VirtualBox или Parallels Tools для Parallels Workstation. Без этих дополнений работа с виртуальной машиной несколько затруднительна (ни тебе нормального разрешения экрана и полноэкранного режима, ни взаимодействия с USB-девайсами, ни нормальной настройки сетевых подключений). В общем, все производители виртуалок не рекомендуют использовать их без этих дополнений. А эти самые дополнения оставляют очень заметный след в виде запущенных процессов:

Для поиска процесса по имени мы воспользуемся функциями CreateToolhelp32Snapshot, Process32First и Process32Next:

Помимо непосредственно самих процессов, демаскирующим признаком могут стать окна, открытые этими процессами. Окон в каждой из рассматриваемых виртуальных машин может быть довольно много, и все их мы перечислять не будем, а ограничимся одним или двумя. Итак:

3Открытые окна для VMware (красным выделено окно класса VMSwitchUserControlClass)

Найти окно по имени класса очень просто — для этого есть функция FindWindow:

Помимо процессов и окон, указывающих на наличие ВМ, можно найти и другие «подозрительные» объекты — например, если покопаться в гостевой ОС виртуальной машины утилитой WinObj или какой-нибудь аналогичной, то можно найти вот такие объекты:

4«Подозрительные» объекты в VirtualBox

Проверить наличие «подозрительного» объекта очень просто, достаточно попытаться открыть его с помощью CreateFile:

Что еще «подозрительного» можно найти в реестре?

Помимо признаков наличия специфического оборудования, в реестре можно увидеть и другие следы, оставляемые виртуальными машинами. Некоторые из них базируются в ветке HKLMHARDWAREACPIDSDT. Достаточно в этом месте проверить наличие таких вот ключей:

Проверку реализуем так же, как мы проверяли наличие определенного оборудования. Просто делаем попытку открыть нужный нам ключ и, в случае успеха, делаем вывод о наличии ВМ.

5Ключ PRLS__ в реестре Parallels Workstation

Возможности, заложенные производителем

Некоторые производители (в частности, VMware и Microsoft) специально реализуют возможности управления своими продуктами, которые можно использовать для наших целей.

В Virtual PC используются инвалидные (не «инвалидные», а «альтернативно одаренные». И вообще-то они «недействительные». — Прим. ред.) команды процессора с опкодами 0x0F, 0x3F, 0x07 и 0x0B, попытка выполнения которых на реальном процессоре вызовет исключение, в то время как на Virtual PC все пройдет нормально. С помощью этих команд можно достаточно просто задетектить виртуалку от Microsoft:

В VMware Workstation для взаимодействия гостевой и основной ОС реализован небольшой бэкдор в виде порта с номером 0x5658. Для его использования необходимо в EAX положить «магическое» число 0x564d5868 (в символьном представлении — «VMXh»), а в ECX записать одну из команд взаимодействия гостевой и основной ОС (например, команда 0x0A возвращает версию установленной VMware Workstation). Короче, выглядит все это приблизительно так:

Заключение

Как видишь, признаков, характерных для виртуальных машин, предостаточно, и для того, чтобы их увидеть, сильно глубоко копать совсем не нужно.

Источник

Обзор 3-х популярных виртуальных машин для Windows

Чтобы иметь под рукой сразу несколько операционных систем с отдельным рабочим пространством и приложениями, не нужно покупать второй (третий, четвертый и т. д.) компьютер. Потому что всё это уместится в вашем единственном ПК. Как? Благодаря виртуальным машинам (ВМ) — особым программам, которые создают (эмулируют) внутри основной операционной системы воображаемые (виртуальные) компьютеры.

Виртуальный ПК почти как настоящий. У него есть собственный процессор, память, жесткий диск, сетевой адаптер и всё остальное. Конечно, это не физические устройства, но сделаны они так, чтобы операционные системы считали их именно такими — настоящими. virtual machine windows1

На одном физическом компьютере одновременно может работать несколько виртуальных. Сколько именно — зависит от аппаратных ресурсов: чем шустрее процессор, объемнее оперативка, просторнее накопитель, тем больше. Обычный домашний ПК средней производительности на базе Windows 10 справляется с одновременной работой трех-пяти легковесных ОС (например, Windows XP, Android и Lubuntu + основная система). Или двух-трех относительно тяжеловесных (например, основная Windows 10 + виртуальные Windows 7 и Mac OS X). Как вы уже поняли, приложения-эмуляторы виртуальных компьютеров позволяют устанавливать и запускать на них самые разные ОС.

Для чего используются виртуальные машины

Виртуальные машины общего назначения (в отличие от специализированных — таких, как, например, VM Java), используют:

Ну и конечно, виртуальные машины повсеместно используют для распределения рабочих ресурсов серверов.

Сегодня мы не будем касаться промышленного применения ВМ, а рассмотрим только то, что может быть полезно домашним пользователям ОС Windows.

Oracle Virtualbox

Виртуальная машина Oracle Virtualbox, пожалуй, наиболее известна и популярна у домашних пользователей ПК. Она русифицирована, бесплатна, поддерживает все основные операционные системы, включая Android, и довольно проста в применении. Сделать минимально необходимые настройки и установить в нее операционную систему сможет даже слабо подготовленный юзер, если имеет под рукой инструкцию по установке выбранной ОС.

Даже беглого взгляда на рабочую область Virtualbox достаточно, чтобы понять, что здесь к чему и как примерно пользоваться программой. Слева — список всех операционных систем, установленных на платформу Virtualbox (гостевых), справа — окно параметров виртуального компьютера выбранной из списка ОС или окно снимков — сохраненных состояний этой системы (некий аналог точек восстановления). На верхней панели — основные инструменты управления: кнопки мастера создания новой ВМ, перехода в меню настроек и запуска ВМ. Вверху справа — кнопки переключения вкладок левой части окна (на скриншоте показана вкладка настроек).

Освоить основные функции программы — установку и запуск операционной системы, настройку параметров виртуального компьютера, большинству пользователей удается без инструкций. А для самых пытливых умов, стремящихся постичь все секреты Virtualbox, на официальном сайте есть англоязычный учебник.

Рассмотрим процесс создания новой виртуальной машины и начало установки в нее Windows 10.

knopka sozdat

imya i tip os

obem pamyati

sozdanie novogo virtualnogo zhestkogo diska

virtualbox disk image

dinamicheskij zhestkij disk

razmer fajla diska

Некоторые настройки ВМ и гостевой системы

Клик в окне виртуальной машины захватывает курсор мыши (т. е. он будет двигаться только в пределах виртуального экрана). Для возврата курсора в основную ОС нажмите комбинацию Ctrl+Alt.

Для доступа ко всему набору функций гостевой ОС нужно установить специальные дополнения. Зайдите в меню «Устройства», щелкните «Подключить образ диска дополнений гостевой ОС» и следуйте дальнейшим инструкциям.

Чтобы подключить к гостевой системе папку для обмена файлами с основной, кликните в меню «Устройства» пункт «Общие папки». Нажмите на значок «папка+» в открывшемся окне и через поле «путь к папке» укажите ее в проводнике (в нем показаны каталоги основной системы).

Если хотите, чтобы настройка работала постоянно, отметьте «Авто-подключение» и «Создать постоянную папку». Общая папка будет доступна из проводника виртуальной машины как сетевая.

Чтобы сохранить текущее состояние гостевой ОС, откройте меню «Машина» и выберите «Сделать снимок состояния».

sozdanie snimka sostoyaniya

Чтобы изменить порядок опроса загрузочных устройств (например, для загрузки виртуальной машины с DVD), завершите работу гостевой ОС, откройте ее настройки (в главном окне Virtualbox) и зайдите на первую вкладку раздела «Система». В списке «Порядок загрузки» отметьте нужный носитель и, нажимая кнопки со стрелками, передвиньте его наверх.

VMware Workstation Pro

VMware Workstation pro — не менее функциональный продукт, чем Vrtualbox, но рассчитанный на профессиональное применение и интеграцию с другими сервисами производителя. Не бесплатный и довольно дорогостоящий, однако тоже очень популярный у домашних пользователей Windows.

Бесплатная версия VMware для личного использования тоже существует. Это VMware Workstation Player, но малая функциональность, сильно уступающая даже некоммерческому Vrtualbox, отвернула от него любовь наших сограждан.

Полноценный VMware Workstation Pro, с которым мы будем знакомиться сегодня, как и конкурент, поддерживает массу операционных систем, включая мобильные и Mac OS X (кстати, он совместим с большим количеством редакций OS X, нежели Virtualbox), и эмулирует все основные устройства компьютера. Еще он эмулирует интерфейс BIOS, в отличие от Vrtualbox.

Рассмотрим, как проходит процесс создания виртуальной машины и запуск установки Windows 10 на платформе VMware Workstation Pro.

Дизайн основного окна программы (который, кстати, видоизменяется от версии к версии) не позволит запутаться даже начинающему пользователю.

vybor tipa konfiguratsii

fajl obraza ustanovki

vvod klyucha windows dlya ustanovki

imya i raspolozhenie vm

ukazanie razmera diska

parametry virtualnogo kompyutera

Список всех установленных гостевых операционных систем находится на вкладке «Мой компьютер».

Некоторые опции виртуальной машины VMware

До установки VMware Tools окно гостевой системы, как и в Virtualbox, захватывает курсор мыши. Для возврата его в основную ОС нажмите Ctrl+Alt.

Чтобы попасть в интерфейс BIOS виртуальной машины, выделите ее в списке, откройте меню запуска (кнопка «play» на верхней панели) и кликните «При включении (машины) войти в режим BIOS».

vhod v rezhim bios pri vklyuchenii

Microsoft Hyper-V

Диспетчер виртуальных машин Hyper-V — это встроенный компонент операционных систем всех редакций Windows 7-10, за исключением начальной и домашних. Если разобраться, он не хуже и не сложнее, чем два рассмотренных выше, просто некоторые пользователи ничего не знают о его существовании и только поэтому предпочитают сторонний софт.

Чтобы активировать диспетчер Hyper-V, зайдите в раздел приложений панели управления Windows, щелкните «Включение и выключение компонентов Виндовс» и в открывшемся окошке отметьте «Hyper-V».

Перезагрузите компьютер, откройте поиск и с его помощью запустите диспетчер Hyper-V.

Список всех виртуальных машин Hyper-V отображается в средней части окна диспетчера. Чтобы запустить любую из них, кликните 2 раза по ее имени. В окошке, которое откроется после этого, нажмите кнопку «Пуск».

Чтобы виртуальные машины Hyper-v могли подключаться к Интернету, запустите через панель «Действия» диспетчер виртуальных коммутаторов. Выберите в показанном ниже списке тип сети «Внешняя» и нажмите «Создать виртуальный коммутатор». Сети «Внутренняя» и «Частная» предназначены для соединения виртуальных компьютеров между собой, и большинству пользователей не нужны.

На следующей странице обычно ничего менять не требуется, кроме, если хотите, имени подключения. В выпадающем списке «Внешняя сеть» должен быть указан сетевой адаптер физического компьютера, который соединен с роутером или кабелем интернет-провайдера. Ниже должен стоять флажок «Разрешить управляющей ОС предоставлять общий доступ к адаптеру» (т. е. к Интернету).

Кстати, Hyper-v поддерживает не только операционные системы семейства Windows, но и некоторых конкурентов, в частности, Linux и FreeBSD. Полный список всех совместимых с ним платформ, а также условия их использования в среде Windows, приведены на сайте MSDN.microsoft.

Некоторые опции виртуальных машин Hyper-V

Чтобы сделать снимок состояния запущенной гостевой ОС, Откройте верхнее меню ее окна «Действие» и щелкните «Контрольная точка». Либо нажмите комбинацию Ctrl+N.

Доступ к настройкам отдельной виртуальной машины открывается из ее контекстного меню в списке главного окна диспетчера и скрывается за кнопкой «Параметры».

Прочие возможности программы тоже весьма незамысловаты и осваиваются без особого труда.

Источник

Виртуальные машины. Как сделать компьютер в компьютере

q93 1ce6c9d96eb71a7e5a5bd765b9c50191a81f8e0b21fe330bf854f918e82ca816

q93 bb6fa769bbe393c849a725fde858008447abd5d70bc1309ef92fa65760f39295

Содержание

Содержание

В одном обычном компьютере можно создать сразу несколько виртуальных, чтобы познакомиться с возможностями Linux или другими экзотическими ОС, запустить очень старую и сегодня неподдерживаемую программу, пройти заново игру детства на современном железе. Или же запустить Windows Vista внутри Windows 7 внутри Windows 8 внутри Windows 10. Просто потому, что захотелось.

Что такое виртуальные машины

Виртуальная машина — это эмулятор компьютера в самом широком смысле. Это почти как эмулятор игровой приставки или Android-устройства, только настраивается гораздо гибче.

Например, на эмуляторе Sony PlayStation не получится запустить игру под Nintendo GameBoy. А эмулятор DOSbox — это очень условный, специализированный виртуальный компьютер с эмуляцией определенного списка старого оборудования и со встроенной системой DOS, так что запустить там Windows 10 не получится.

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

Зачем нужны виртуальные машины

В деловых процессах виртуальные машины используются активно — там это нужно. Центры обработки данных, облачные вычисления, виртуальные серверы, разграничение доступа и все такое. На одном и том же железе может работать отдельный файловый архив, отдельный веб-сервер, отдельный сервер авторизации — и все на разных системах, полностью изолированных друг от друга. Но зачем нужна технология виртуальных машин обычному домашнему пользователю?

Вот простой пример: у вас есть компьютер и на нем, скорее всего, установлена операционная система Windows. Для изучения программирования вам требуется linux, но вы не хотите экспериментировать со своим компьютером, разбивать личный диск на несколько разделов и рисковать потерей данных. Виртуальная машина позволит работать в другой системе, при этом родная Windows никак не пострадает.

Или, например, есть очень важная и нужная программа, которая запускается только под WindowsXP конкретной версии и сборки. Причем эта программа откажется запускаться, если оперативной памяти больше 128 мегабайт. Можно отпилить часть микросхем от современного модуля на 16 гигабайт, но что-то вам подсказывает, что так делать не нужно. А вот виртуальная машина поможет запустить капризный софт, эмулируя компьютер с нужным объемом памяти.

А вот, допустим, игра двадцатилетней давности, которую вы нашли на антресолях и пытаетесь установить в приступе ностальгии. Игра отказывается верить в существование восьмиядерного процессора и вылетает с ошибкой «так не бывает». Виртуальная машина с нужными характеристиками поможет вспомнить былые времена и запустить игру.

q93 10629d1657af1fd5830cb120807a77fc2ee0e8cbd873acd1f8a769c78c6cd16a

Часто виртуальная машина используется в качестве «песочницы» — маленькой игровой площадки для программы, которая вызывает у вас подозрения. Чтобы не рисковать, вы запускаете сомнительную программу внутри виртуальной машины, а не на настоящем компьютере: софт честно делает свою работу, потом шифрует все файлы и требует денег, например. Но в виртуальной системе, в той самой «песочнице» не было никаких ценных данных, поэтому вы можете спокойно удалить виртуальную машину с наглой программой внутри. Здорово же!

Наконец, приверженцы техники Apple или убежденные Linux-пользователи тоже могут использовать виртуальную машину, чтобы запустить какой-то специфический софт, который работает только под Windows.

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

Основные термины и их понимание

Гость (guest, гест, гостевая система, таргет) — это виртуальный компьютер, один или несколько, который запускается на хосте.

Хост — это основной компьютер, на котором запускаются виртуальные машины. Производительность хоста должна быть достаточной, чтобы тянуть и собственную систему, и гостевую. Для запуска одной виртуальной машины вполне достаточно возможностей любого современного компьютера. Но для нормальной работы нескольких систем одновременно лучше иметь не меньше шестнадцати гигабайт оперативной памяти, а образы компьютеров создавать на скоростном SSD-накопителе. По очевидным причинам, у вас не получится создать виртуальную машину с характеристиками выше, чем у самого хоста — если на основном компьютере всего 8 гигабайт оперативной памяти, то создать таргет с 16 ГБ не выйдет.

Гипервизор — специализированная программа для создания виртуальных машин и управления ими. Для домашнего пользования есть бесплатные программы-гипервизоры с минимальным количеством настроек и функций. В бизнес-сфере используются более продвинутые решения, а некоторые гипервизоры и вовсе устанавливаются вместо операционной системы, чтобы сразу несколько мощных компьютеров можно было объединить в большой виртуальный хост. Это называется «консолидация серверов». Дорогое удовольствие, как по затратам на железо, так и на гипервизор.

Образ — термин достаточно известный, обозначает файл с полной цифровой копией какого-либо носителя внутри. Обычно применяется в отношении оптических дисков, но в нашем случае в образе может храниться и дискета, и виртуальный жесткий диск.

Установка

Чтобы начать знакомство с виртуальной машиной потребуется установить гипервизор. Таковых существует множество: платных и не очень, для тонкой настройки всего и вся или базового «нажал — заработало». Virtualbox — один из наиболее популярных гипервизоров, потому что бесплатный, доступен под Windows, Mac OS и Linux, активно развивается и поддерживается сообществом разработчиков и энтузиастов. Скачать VirtualBox можно с официального сайта, но учтите, он на английском.

Начиная с шестой версии в VirtualBox убрали поддержку 32-битных хост-систем, но пятая версия до сих пор доступна для скачивания. В любом случае, можно скачать обе версии. Для более комфортной работы потребуется еще и набор расширений — ExtensionPack.

Устанавливается VirtualBox довольно просто, достаточно последовательно соглашаться со всеми предложениями. Перед установкой появится большое предупреждение о том, что компьютер будет отключен от сети, на время установки виртуальных сетевых карт — это нормально. А в ходе установки появится несколько подтверждающих окон — это устанавливается эмулятор USB, сетевых карт и других устройств.

Ну а после установки появится основное окно гипервизора на родном русском языке.

q93 ae044ce20c596968880e985ad03d24babcb4ce3caf7ea855ed7f599f39a2554b

Первым же делом желательно установить пакет расширений — он добавляет поддержку USB 2.0, подключение по протоколу RDP, поддержку накопителей с NVMe и прочие полезные вещи. В стандартной установке все эти возможности отсутствуют из-за различных лицензий: сам гипервизор бесплатный во все стороны, а расширения бесплатны только для личного пользования и ознакомления.

Чтобы установить расширения достаточно запустить файл Extensionpack дабл-кликом, но делать это нужно после установки самого Virtualbox — потому что установщик расширений запускается внутри гипервизора.

q93 d757459ce4ac2179a9dce7142356571b99723ef44fd2f3a2383220d20dc132d9

Как работает виртуальная машина

Гипервизор создает файл образа жесткого диска, резервирует определенное количество оперативной памяти и занимает процессорное время — это необходимо для работы «контейнера», в котором будет работать виртуальная машина. Изнутри же «контейнер» выглядит как полноценный компьютер с жестким диском, оптическим приводом, дисководом, сетевой картой, видеоадаптером, звуковой картой и прочим оборудованием. Причем заменить видеокарту обычно нельзя — она эмулируется как встроенная в материнскую плату. А вот в оптический привод можно либо загрузить образ из файла, либо использовать существующий привод хоста.

Процессор виртуализируется как минимум одним ядром. Для старых систем лучше не использовать многоядерность — не поймут, испугаются и будут глючить. А новым больше двух ядер нужно выдавать только при реальной необходимости.

Подключенные к хосту USB-устройства можно пробросить внутрь виртуальной машины. Достаточно выбрать для конкретной машины нужный пункт из меню «Устройства — USB». При этом, например, флэшка исчезнет из списка накопителей в хост-системе и станет видна в виртуальной машине. Также можно поступить с любым другим USB-устройством, но не забудьте сначала установить Extensionpack, иначе скорость USB 1.1 вас огорчит.

q93 303c1ce0ebe0f3add70a525cfe8b6fd17490a1ad2c21cba2bd18b64fba833958

Чтобы файлы на основной системе были доступны в виртуальной ОС можно воспользоваться общими папками: они монтируются как сетевые пути, но удобнее автоматически их монтировать как сетевой диск — он будет подключаться при загрузке системы. Подробности разберем на этапе настройки.

Создаем виртуальный компьютер

Создать новую виртуальную машину в VirtualBox поможет встроенный мастер настройки. Достаточно ввести название виртуального компьютера, а гипервизор на его основе попытается определить нужную операционную систему и выдаст рекомендуемые параметры. Если название слишком оригинальное, то потребуется указать тип гостевой операционной системы вручную.

q93 17faa81f8b2d17211202875d78f6b6be085af1bc782fb1f8f0637583bf1f59be

Несмотря на то, что в списке поддерживаемых систем есть даже Windows 3.1, лучше всего виртуализируются относительно свежие системы, начиная хотя бы с Windows 2000. С win9x немного сложнее: сначала нужно загрузить DOS из образа дискеты, а уже потом запускать установщик — в те времена загрузочные CD не делали, потому что оптические носители только-только появлялись.

Следующим шагом будет выбор объема оперативной памяти и виртуального жесткого диска — если нет специальных требований, то автоматически предложенные значения можно не менять.

После создания виртуальной машины необходимо открыть ее настройки и подключить образ загрузочного компакт-диска на вкладке «носители». И теперь можно запускать виртуальный компьютер.

q93 98237d2c6ec074f92ca8edf91dbf6e8b2f1235dbd3de687b5c64ba10acca8b23

Установка системы у многих пользователей не вызовет лишних вопросов, поэтому подробно описывать этот процесс не будем. А последующая установка драйверов — другое дело. В VirtualBox есть специальный «диск с драйверами», который называется «Дополнения гостевой ОС» — его можно подключить через пункт меню.

Дополнения — это диск с драйверами, который загружается в виртуальный привод оптических дисков. В Windows-системах достаточно запустить файл autorun с диска, а под Linux — соответствующий скрипт. Главная выгода от установки гостевых драйверов — возможность произвольно менять размеры окна виртуальной машины, а разрешение экрана автоматически подстроится. А, ну и цвета станут повеселее: не 16 базовых, а 32 миллиона оттенков.

q93 b1ef1f4c26b3b8b9df857eee63ecbeedad61d67421c1c81c7fd6a91dfc5bb3c3

Настраиваем взаимодействие с хостом и сеть

Виртуальная машина с настройками «по умолчанию» получает доступ в интернет, но не имеет никакой связи с основным компьютером. А иногда эта связь нужна…

q93 47de809cf905fda2c472d3db9d8344070c2bd12b589a863d501266551fb15a46

В настройках можно включить двусторонний буфер обмена. Он, правда, работает только с текстовой информацией, но упрощает ввод интернет-адресов и консольных команд. Для приема-передачи файлов можно настроить сетевые папки. Любая папка на хосте может быть подключена в виде сетевой папки в гостевой системе. Дополнительно можно выдать права гостевой системе на запись в эту папку и автоматически подключать папку в качестве диска при загрузке системы. Так, например, папка Downloads на хост-системе может быть доступна из гостевой системы через сетевое окружение по адресу //vboxsvr/Downloads или автоматически подключаться как сетевой диск.

q93 aee1d89c8ed1bf0afb28d459c03f332dfec6e8c2b0c282d4057bef94ec14713b

Для экспериментов с Linux-системами и виртуальными серверами часто требуется доступ из хоста к веб-серверу, который запускается на гостевой ОС. Для этого нужно переключить режим сетевой карты с «NAT» на «виртуальный адаптер хоста» или же «Virtualbox Host-only Ethernet Adapter». В последнем случае у гостевой системы не будет личного доступа в интернет, но она сможет общаться с основным компьютером. Так, например, с хоста можно постучаться на файловый сервер, который работает на виртуальной машине.

q93 8f1b058222b7365e3cfec2788e39665503cf989f8b7ede2110dd2f91c4542ca6

В данном случае это специализированный linux-дистрибутив openmediavault для создания сетевого хранилища, который запущен в виртуальной машине с типом сетевого адаптера «только хост».

Проблемы с виртуализацией

Главная проблема — отсутствие вменяемой поддержки видеоадаптера и 3D-ускорения. На обычной хост-системе вы можете пользоваться новейшей видеокартой, но все ее преимущества в виртуальной машине будут недоступны. Впрочем, старые игры не особо требовательны к видео — в большинстве случаев справится и встроенный видеоадаптер процессора.

Второй момент — поддержка современного интернета старыми системами. Открыть любой сайт в системе, которая устарела лет на 10–20, может быть проблематично. Либо страница загрузится не полностью, либо не загрузится вовсе.

q93 af792ca2a5cde4670392d9d1e3d07914c56283e265c419816d0322ea74d668fa

Виртуализируй это!

Виртуальные машины позволят вам изучить экзотические ОС на современном компьютере. Помимо множества современных Linux-дистрибутивов, это может быть:

Также можно установить старую версию Windows и попробовать покорить современный интернет. Во времена технологии Active Desktop в windows98 интернет был очень другим.

Источник

Время на прочтение
8 мин

Количество просмотров 260K

Язык программирования Python считается достаточно простым. На нем легче и быстрее пишутся программы, по сравнению с компилируемыми языками программирования. Для Python существует множество библиотек, позволяющих решать практически любые задачи. Есть, конечно, и минусы и другие нюансы, но это отдельная тема.

Довольно часто я вижу, как мои знакомые и друзья начинают изучать Python и сталкиваются с проблемой установки и использования сторонних библиотек. Они могут несколько часов потратить на установку библиотеки, и даже, могут не справиться с этим и забить на неё. В то время как, в большинстве случаев, это можно было сделать за несколько минут.

Статья начинается с базовых вещей: с установки Python 3, инструментов разработки Pip и Virtualenv и среды разработки PyCharm в Windows и в Ubuntu. Для многих это не представляет трудностей и возможно, что уже всё установлено.

После чего будет то, ради чего задумывалась статья, я покажу как в PyCharm создавать и использовать виртуальные окружения и устанавливать в них библиотеки с помощью Pip.

Установка Python и Pip

Pip является менеджером пакетов для Python. Именно с помощью него обычно устанавливаются модули/библиотеки для разработки в виде пакетов. В Windows Pip можно установить через стандартный установщик Python. В Ubuntu Pip ставится отдельно.

Установка Python и Pip в Windows

Для windows заходим на официальную страницу загрузки, где затем переходим на страницу загрузки определенной версии Python. У меня используется Python 3.6.8, из-за того, что LLVM 9 требует установленного Python 3.6.

Далее в таблице с файлами выбираем “Windows x86-64 executable installer” для 64-битной системы или “Windows x86 executable installer” для 32-битной. И запускаем скачанный установщик, например, для версии Python 3.8.1 он называется python-3.8.1-amd64.exe.

Во время установки ставим галочку возле Add Python 3.x to PATH и нажимаем Install Now:

Установка Python 3 в Windows 10

Установка Python и Pip в Ubuntu

В Ubuntu установить Python 3 можно через терминал. Запускаем его и вводим команду установки. Вторая команда выводит версию Python.

sudo apt install python3-minimal
python3 -V

Далее устанавливаем Pip и обновляем его. После обновления необходимо перезапустить текущую сессию (или перезагрузить компьютер), иначе возникнет ошибка во время вызова Pip.

sudo apt install python3-pip
pip3 install --user --upgrade pip

Основные команды Pip

Рассмотрим основные команды при работе с Pip в командой строке Windows и в терминале Ubuntu.

Если виртуальные окружения не используются, то во время установки пакета(ов) полезно использовать дополнительно ключ --user, устанавливая пакет(ы) локально только для текущего пользователя.

Установка VirtualEnv и VirtualEnvWrapper

VirtualEnv используется для создания виртуальных окружений для Python программ. Это необходимо для избежания конфликтов, позволяя установить одну версию библиотеки для одной программы, и другу для второй. Всё удобство использования VirtualEnv постигается на практике.

Установка VirtualEnv и VirtualEnvWrapper в Windows

В командной строке выполняем команды:

pip install virtualenv
pip install virtualenvwrapper-win

Установка VirtualEnv и VirtualEnvWrapper в Ubuntu

Для Ubuntu команда установки будет следующей:

pip3 install --user virtualenv virtualenvwrapper

После которой в конец ~/.bashrc добавляем:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source ~/.local/bin/virtualenvwrapper.sh

При новом запуске терминала должны будут появиться сообщения, начинающиеся на virtualenvwrapper.user_scripts creating, что говорит об успешном завершении установки.

Работа с виртуальным окружением VirtualEnv

Рассмотрим основные команды при работе с VirtualEnv в командой строке Windows и в терминале Ubuntu.

Находясь в одном из окружений, можно ставить пакеты через Pip, как обычно и нет необходимости добавлять ключ --user:

pip3 install markdown

Для Windows можно указать в переменных среды WORKON_HOME для переопределения пути, где хранятся виртуальные окружения. По умолчанию, используется путь %USERPROFILE%Envs.

Установка PyCharm

PyCharm — интегрированная среда разработки для языка программирования Python. Обладает всеми базовыми вещами необходимых для разработки. В нашем случае огромное значение имеет хорошее взаимодействие PyCharm с VirtualEnv и Pip, чем мы и будем пользоваться.

Установка PyCharm в Windows

Скачиваем установщик PyCharm Community для Windows с официального сайта JetBrains. Если умеете проверять контрольные суммы у скаченных файлов, то не забываем это сделать.

В самой установке ничего особенного нету. По сути только нажимаем на кнопки next, и в завершение на кнопку Install. Единственно, можно убрать версию из имени папки установки, т.к. PyCharm постоянно обновляется и указанная версия в будущем станет не правильной.

Установка PyCharm в Ubuntu

Скачиваем установщик PyCharm Community для Linux с официального сайта JetBrains. Очень хорошей практикой является проверка контрольных сумм, так что если умеете, не ленитесь с проверкой.

Распаковываем архив с PyCharm и переименовываем папку с программой в pycharm-community, убрав версию из названия.

Теперь в директории ~/.local (Ctrl + H — Показ скрытый файлов), создаем папку opt, куда и перемещаем pycharm-community. В результате по пути /.local/opt/pycharm-community должны размещаться папки bin, help и т.д. Таким образом PyCharm будет находится в своём скромном месте и никому не будет мешать.

Далее выполняем команды в терминале:

cd /home/maksim/.local/opt/pycharm-community/bin
sh ./pycharm.sh

Производим установку. И очень важно в конце не забыть создать desktop файл для запуска PyCharm. Для этого в Окне приветствия в нижнем правом углу нажимаем на ConfigureCreate Desktop Entry.

Создание desktop файла

Установка PyCharm в Ubuntu из snap-пакета

PyCharm теперь можно устанавливать из snap-пакета. Если вы используете Ubuntu 16.04 или более позднюю версию, можете установить PyCharm из командной строки.

sudo snap install pycharm-community --classic

Использование VirtualEnv и Pip в PyCharm

Поддержка Pip и Virtualenv в PyCharm появилась уже довольно давно. Иногда конечно возникают проблемы, но взаимодействие работает в основном стабильно.

Рассмотрим два варианта работы с виртуальными окружениями:

  1. Создаём проект со своим собственным виртуальным окружением, куда затем будут устанавливаться необходимые библиотеки;
  2. Предварительно создаём виртуальное окружение, куда установим нужные библиотеки. И затем при создании проекта в PyCharm можно будет его выбирать, т.е. использовать для нескольких проектов.

Первый пример: использование собственного виртуального окружения для проекта

Создадим программу, генерирующую изображение с тремя графиками нормального распределения Гаусса Для этого будут использоваться библиотеки matplotlib и numpy, которые будут установлены в специальное созданное виртуальное окружение для программы.

Запускаем PyCharm и окне приветствия выбираем Create New Project.

В мастере создания проекта, указываем в поле Location путь расположения создаваемого проекта. Имя конечной директории также является именем проекта. В примере директория называется ‘first_program’.

Далее разворачиваем параметры окружения, щелкая по Project Interpreter. И выбираем New environment using Virtualenv. Путь расположения окружения генерируется автоматически. В Windows можно поменять в пути папку venv на Envs, чтобы команда workon находила создаваемые в PyCharm окружения. Ставить дополнительно галочки — нет необходимости. И нажимаем на Create.

Настройка первой программы в PyCharm

Теперь установим библиотеки, которые будем использовать в программе. С помощью главного меню переходим в настройки FileSettings. Где переходим в Project: project_nameProject Interpreter.

Чистое окружение у проекта

Здесь мы видим таблицу со списком установленных пакетов. В начале установлено только два пакета: pip и setuptools.

Справа от таблицы имеется панель управления с четырьмя кнопками:

  • Кнопка с плюсом добавляет пакет в окружение;
  • Кнопка с минусом удаляет пакет из окружения;
  • Кнопка с треугольником обновляет пакет;
  • Кнопка с глазом включает отображение ранних релизов для пакетов.

Для добавления (установки) библиотеки в окружение нажимаем на плюс. В поле поиска вводим название библиотеки. В данном примере будем устанавливать matplotlib. Дополнительно, через Specify version можно указать версию устанавливаемого пакета и через Options указать параметры. Сейчас для matplotlib нет необходимости в дополнительных параметрах. Для установки нажимаем Install Package.

Установка библиотеки matplotlib

После установки закрываем окно добавления пакетов в проект и видим, что в окружение проекта добавился пакет matplotlib с его зависимостями. В том, числе был установлен пакет с библиотекой numpy. Выходим из настроек.

Теперь мы можем создать файл с кодом в проекте, например, first.py. Код программы имеет следующий вид:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)

def gauss(sigma, mu):
    return 1/(sigma * (2*np.pi)**.5) * np.e ** (-(x-mu)**2/(2 * sigma**2))

dpi = 80
fig = plt.figure(dpi=dpi, figsize=(512 / dpi, 384 / dpi))

plt.plot(x, gauss(0.5, 1.0), 'ro-')
plt.plot(x, gauss(1.0, 0.5), 'go-')
plt.plot(x, gauss(1.5, 0.0), 'bo-')

plt.legend(['sigma = 0.5, mu = 1.0',
            'sigma = 1.0, mu = 0.5',
            'sigma = 1.5, mu = 0.0'], loc='upper left')

fig.savefig('gauss.png')

Для запуска программы, необходимо создать профиль с конфигурацией. Для этого в верхнем правом углу нажимаем на кнопку Add Configuration…. Откроется окно Run/Debug Configurations, где нажимаем на кнопку с плюсом (Add New Configuration) в правом верхнем углу и выбираем Python.

Далее указываем в поле Name имя конфигурации и в поле Script path расположение Python файла с кодом программы. Остальные параметры не трогаем. В завершение нажимаем на Apply, затем на OK.

Создание конфигурации для Python программы

Теперь можно выполнить программу и в директории с программой появится файл gauss.png:

Графики нормального распределение гаусса

Второй пример: использование предварительно созданного виртуального окружения

Данный пример можно использовать во время изучения работы с библиотекой. Например, изучаем PySide2 и нам придется создать множество проектов. Создание для каждого проекта отдельного окружения довольно накладно. Это нужно каждый раз скачивать пакеты, также свободное место на локальных дисках ограничено.

Более практично заранее подготовить окружение с установленными нужными библиотеками. И во время создания проектов использовать это окружение.

В этом примере мы создадим виртуальное окружения PySide2, куда установим данную библиотеку. Затем создадим программу, использующую библиотеку PySide2 из предварительно созданного виртуального окружения. Программа будет показывать метку, отображающую версию установленной библиотеки PySide2.

Начнем с экран приветствия PyCharm. Для этого нужно выйти из текущего проекта. На экране приветствия в нижнем правом углу через ConfigureSettings переходим в настройки. Затем переходим в раздел Project Interpreter. В верхнем правом углу есть кнопка с шестерёнкой, нажимаем на неё и выбираем Add…, создавая новое окружение. И указываем расположение для нового окружения. Имя конечной директории будет также именем самого окружения, в данном примере — pyside2. В Windows можно поменять в пути папку venv на Envs, чтобы команда workon находила создаваемые в PyCharm окружения. Нажимаем на ОК.

Создание окружения для PySide2

Далее в созданном окружении устанавливаем пакет с библиотекой PySide2, также как мы устанавливали matplotlib. И выходим из настроек.

Теперь мы можем создавать новый проект использующий библиотеку PySide2. В окне приветствия выбираем Create New Project.

В мастере создания проекта, указываем имя расположения проекта в поле Location. Разворачиваем параметры окружения, щелкая по Project Interpreter, где выбираем Existing interpreter и указываем нужное нам окружение pyside2.

Создание нового проекта использующего библиотеку PySide2

Для проверки работы библиотеки создаем файл second.py со следующий кодом:

import sys

from PySide2.QtWidgets import QApplication, QLabel
from PySide2 import QtCore

if __name__ == "__main__":
    app = QApplication(sys.argv)

    label = QLabel(QtCore.qVersion())
    label.show()

    QtCore.qVersion()

    sys.exit(app.exec_())

Далее создаем конфигурацию запуска программы, также как создавали для первого примера. После чего можно выполнить программу.

Заключение

У меня нет богатого опыта программирования на Python. И я не знаком с другими IDE для Python. Поэтому, возможно, данные IDE также умеют работать с Pip и Virtualenv. Использовать Pip и Virtualenv можно в командой строке или в терминале. Установка библиотеки через Pip может завершиться ошибкой. Есть способы установки библиотек без Pip. Также создавать виртуальные окружения можно не только с помощью Virtualenv.

В общем, я лишь поделился небольшой частью опыта из данной области. Но, если не вдаваться в глубокие дебри, то этого вполне достаточно знать, чтобы писать простые программы на Python с использованием сторонних библиотек.

Python знаменит своей обширной стандартной библиотекой и девизом
“батарейки в комплекте”
(batteries included).
Даже из коробки Python позволяет удобно и быстро решить огромный пласт задач,
например, например, работа с файлами, запуск простого веб-сервера,
работа с электронной почтой, парсинг XML и JSON, и так далее. Во всяком случае,
это намного удобнее, чем писать shell-скрипты 😅

Кроме того, у Python имеется огромная экосистема сторонних библиотек,
поддерживаемых сообществом энтузиастов. Эти библиотеки реализуют отсутствующую
в стандартной поставке функциональность, либо пере-реализуют уже имеющуюся, но
удобнее. Если у вас возникла потребность в какой-то функциональности, то
почти наверняка кто-то уже написал для этого библиотеку, и нужно просто погуглить.

Установка сторонней библиотеки

Каждый начинающий программист знает, как установить библиотеку. Набираем

и понеслась! Множество библиотек в своих инструкциях по установке именно так
и предлагают их устанавливать. Это и правда работает, это и правда так просто,
но есть нюансы. В этом месте закопаны очень популярные грабли, по которым
прошлось множество начинающих питонистов, в том числе и я.

Как pip устанавливает пакеты

Давайте разберемся, что же происходит, когда юзер набирает в терминал такую
команду. В общих чертах происходит следующее.

  1. pip обращается в PyPI (Python Package Index) и
    находит там запрашиваемый пакет.
  2. Пакет скачивается. Обычно это просто zip-архив, который содержит
    код библиотеки, разложенный внутри согласно формату. Современным и
    рекомендуемым форматом пакетов является wheel (PEP-427),
    но в дикой природе встречаются и другие форматы.
  3. pip устанавливает пакет.
  4. Библиотека установлена, ее можно импортировать и использовать.

Давайте подробнее разберем третий шаг. Установка пакета — звучит загадочно и
сложно, но на самом деле ничего сложного здесь не происходит. pip просто
распаковывает zip-архив в определенное место (это справедливо для формата wheel,
для установки пакетов в других форматах могут потребоваться дополнительные
действия, но давайте разберем самый распространённый и простой случай). Куда
именно происходит установка? Это можно узнать, выполнив следующую команду:

$ python -m site
sys.path = [
    '/Users/and-semakin',
    '/Users/and-semakin/.asdf/installs/python/3.8.2/lib/python38.zip',
    '/Users/and-semakin/.asdf/installs/python/3.8.2/lib/python3.8',
    '/Users/and-semakin/.asdf/installs/python/3.8.2/lib/python3.8/lib-dynload',
    '/Users/and-semakin/env/lib/python3.8/site-packages',
]
USER_BASE: '/Users/and-semakin/.local' (exists)
USER_SITE: '/Users/and-semakin/.local/lib/python3.8/site-packages' (doesn't exist)
ENABLE_USER_SITE: False

В списке sys.path можно увидеть директорию site-packages — именно туда
и будет установлена библиотека. Давайте в этом убедимся.

До установки пакета:

$ ls -l /Users/and-semakin/env/lib/python3.8/site-packages
total 8
drwxr-xr-x   3 and-semakin  awesome    96 Apr 18 17:39 __pycache__
-rw-r--r--   1 and-semakin  awesome   126 Apr 18 17:39 easy_install.py
drwxr-xr-x   7 and-semakin  awesome   224 Apr 18 17:39 pip
drwxr-xr-x   9 and-semakin  awesome   288 Apr 18 17:39 pip-19.2.3.dist-info
drwxr-xr-x   7 and-semakin  awesome   224 Apr 18 17:39 pkg_resources
drwxr-xr-x  42 and-semakin  awesome  1344 Apr 18 17:39 setuptools
drwxr-xr-x  11 and-semakin  awesome   352 Apr 18 17:39 setuptools-41.2.0.dist-info

Установим пакет:

После установки пакета:

$ ls -l /Users/and-semakin/env/lib/python3.8/site-packages
total 8
drwxr-xr-x   3 and-semakin  awesome    96 Apr 18 17:39 __pycache__
drwxr-xr-x   7 and-semakin  awesome   224 Apr 18 17:41 certifi
drwxr-xr-x   8 and-semakin  awesome   256 Apr 18 17:41 certifi-2020.4.5.1.dist-info
drwxr-xr-x  43 and-semakin  awesome  1376 Apr 18 17:41 chardet
drwxr-xr-x  10 and-semakin  awesome   320 Apr 18 17:41 chardet-3.0.4.dist-info
-rw-r--r--   1 and-semakin  awesome   126 Apr 18 17:39 easy_install.py
drwxr-xr-x  11 and-semakin  awesome   352 Apr 18 17:41 idna
drwxr-xr-x   8 and-semakin  awesome   256 Apr 18 17:41 idna-2.9.dist-info
drwxr-xr-x   7 and-semakin  awesome   224 Apr 18 17:39 pip
drwxr-xr-x   9 and-semakin  awesome   288 Apr 18 17:39 pip-19.2.3.dist-info
drwxr-xr-x   7 and-semakin  awesome   224 Apr 18 17:39 pkg_resources
drwxr-xr-x  21 and-semakin  awesome   672 Apr 18 17:41 requests
drwxr-xr-x   8 and-semakin  awesome   256 Apr 18 17:41 requests-2.23.0.dist-info
drwxr-xr-x  42 and-semakin  awesome  1344 Apr 18 17:39 setuptools
drwxr-xr-x  11 and-semakin  awesome   352 Apr 18 17:39 setuptools-41.2.0.dist-info
drwxr-xr-x  16 and-semakin  awesome   512 Apr 18 17:41 urllib3
drwxr-xr-x   8 and-semakin  awesome   256 Apr 18 17:41 urllib3-1.25.9.dist-info

Как видим, в директорию site-packages добавилась библиотека requests вместе
со всеми своими зависимостями.

Важные мысли, которые я пытаюсь донести:

  1. установка библиотеки напрямую влияет на файловую систему;
  2. у интерпретатора Python есть только одна директория site-packages, куда
    pip и устанавливает пакеты.

А это значит, что в один интерпретатор Python нельзя установить две версии
одной библиотеки одновременно. При установке новой версии предыдущая “перезатирается”.
Просто как если бы вы распаковали другой архив с совпадающими именами файлов
в то же самое место.

Боль — это жизненный опыт

Что же будет, если вам понадобится работать над двумя проектами, которые
будут требовать разных, не совместимых между собой версий одной и той же
библиотеки? Возможно, между этими версиями в библиотеку были внесены
какие-то крупные ломающие изменения, например, переименовались методы/функции
или изменился набор аргументов.

Например, проект А:

# requirements.txt
requests==2.23.0

Проект Б:

# requirements.txt
requests==1.2.3

Вы просто не сможете работать над такими проектами одновременно. Установка
зависимостей одного проекта сломает другой, и наоборот. При переключении между
проектами придётся каждый раз устанавливать зависимости нужного проекта, что
довольно легко забыть сделать.

Ситуация кажется маловероятной, но я гарантирую, что рано или поздно это
случится, если устанавливать зависимости всех своих проектов в один интерпретатор.
Всё усугубляется тем фактом, что прямые зависимости вашего проекта тянут за
собой свои зависимости (под-зависимости),
те, в свою очередь, тоже могут от чего-то зависеть (под-под-зависимости). В
итоге вы получаете целое дерево зависимостей. И если где-то в этом дереве
окажется библиотека не той версии, что ожидалось, то весь проект может начать
очень странно работать. Вы получите такие эзотерические ошибки, которых
еще никто в интернете до вас не встречал. Если всё сразу сломалось, то считайте,
что легко отделались — по крайней мере, так довольно просто понять, в чём проблема.
Но бывают и ситуации намного хуже, когда приложение просто начинает немножко
иначе работать, без каких-либо ошибок, и возможно придется потратить долгие
часы на траблшутинг, чтобы найти настоящую причину.

Надеюсь, я убедил вас, что устанавливать зависимости нескольких проектов в
один интерпретатор — это очень-очень плохо. Но как же тогда правильно?

Виртуальные окружения

Решение очевидно — у каждого проекта должен быть свой интерпретатор Python,
со своей собственной изолированной директорией site-packages. Это и есть
основная идея, стоящая за виртуальными окружениями. Виртуальное окружение —
это самостоятельная копия интерпретатора со своими пакетами.

Как создавать виртуальные окружения

Начиная с Python версии 3.5 (на данный момент это самая старая из официально
поддерживаемых версий языка, так что справедливо ожидать, что как минимум
везде установлен Python 3.5 или новее), создать виртуальное окружение стало
очень просто:

$ python -m venv <путь к виртуальному окружению>

Например, допустим, что мы работаем над проектом blog_source:

# заходим в директорию с проектом
$ cd src/blog_source

# создаем виртуальное окружение прямо рядом с кодом в директории env
$ python -m venv env

Создавать виртуальное окружения рядом с кодом — это распространённая практика,
так проще ничего не перепутать, но вообще виртуальное окружение может быть
где угодно, и директория тоже может называться как угодно. Обратите внимание,
что если вы создаете виртуальное окружение в директории под управлением
системы контроля версий (git), то его не нужно коммитить.
Лучше вообще добавьте его (env/) в .gitignore.

В директорию env будет скопирован тот самый интерпретатор, при помощи
которого виртуальное окружение и создавалось. Т.е. если

то в виртуальном окружении будет та же самая версия:

$ env/bin/python -V
Python 3.8.2

Активируем окружение

Посмотрим, что внутри директории env:

$ ls -l env/
total 8
drwxr-xr-x  13 and-semakin  awesome  416 Apr 18 18:55 bin
drwxr-xr-x   2 and-semakin  awesome   64 Apr 18 18:55 include
drwxr-xr-x   3 and-semakin  awesome   96 Apr 18 18:55 lib
-rw-r--r--   1 and-semakin  awesome  113 Apr 18 18:55 pyvenv.cfg

$ ls -l env/bin/
total 88
-rw-r--r--  1 and-semakin  awesome  8471 Apr 18 18:55 Activate.ps1
-rw-r--r--  1 and-semakin  awesome  2218 Apr 18 18:55 activate
-rw-r--r--  1 and-semakin  awesome  1270 Apr 18 18:55 activate.csh
-rw-r--r--  1 and-semakin  awesome  2422 Apr 18 18:55 activate.fish
-rwxr-xr-x  1 and-semakin  awesome   268 Apr 18 18:55 easy_install
-rwxr-xr-x  1 and-semakin  awesome   268 Apr 18 18:55 easy_install-3.8
-rwxr-xr-x  1 and-semakin  awesome   250 Apr 18 18:55 pip
-rwxr-xr-x  1 and-semakin  awesome   250 Apr 18 18:55 pip3
-rwxr-xr-x  1 and-semakin  awesome   250 Apr 18 18:55 pip3.8
lrwxr-xr-x  1 and-semakin  awesome    59 Apr 18 18:55 python -> /Users/and-semakin/.asdf/installs/python/3.8.2/bin/python
lrwxr-xr-x  1 and-semakin  awesome     6 Apr 18 18:55 python3 -> python

Обратите внимание, что в директории bin есть некий файл activate в
нескольких вариантах для разных шеллов. Это и есть “точка входа” в виртуальное
окружение. Просто создать виртуальное окружение мало, нужно его активировать.
Но сначала проверим, какие python и pip (исполняемые файлы) используются
в обычном режиме работы:

$ which python
/Users/and-semakin/.asdf/shims/python
$ which pip
/Users/and-semakin/.asdf/shims/pip

Это мой обычный Python, вне виртуального окружения, назовём его глобальным.
Теперь активируем виртуальное окружение:

$ source env/bin/activate
(env) $

Для Windows процесс активации будет отличаться (допустим, что виртуальное окружение
создано в C:srcblog_source):

# cmd
C:srcblog_source> envScriptsactivate.bat

# либо в PowerShell
PS C:srcblog_source> envScriptsActivate.ps1

Обратите внимание, что приветствие шелла изменилось (добавилось (env)), чтобы
показать, что мы “внутри” виртуального окружения под названием env.

Теперь проверим еще раз, какие python и pip используются:

(env) $ which python
/Users/and-semakin/src/blog_source/env/bin/python
(env) $ which pip
/Users/and-semakin/src/blog_source/env/bin/pip

Посмотрите на пути — мы внутри виртуального окружения! Теперь можно смело
устанавливать любые пакеты, и это никак не повлияет на глобальный Python или
на другие виртуальные окружения:

(env) $ pip install requests flask whatever-you-need

Можно запускать любые файлы, и они будут иметь доступ к установленным пакетам:

(env) $ python make_money.py
Done! You are rich!

IDE тоже нужно настроить, указав путь к bin/python внутри виртуального
окружения, тогда редактор сможет лучше вам помогать.

По завершению работы с виртуальным окружением можно просто набрать deactivate,
либо закрыть окно терминала:

(env) $ deactivate
$ which python
/Users/and-semakin/.asdf/shims/python

И мы видим, что команда python снова вызывает глобальный интерпретатор.
При этом виртуальное окружение осталось в своей директории, оно просто не
активно. В следующий раз, когда будет нужно поработать с виртуальным
окружением, не забудьте снова его активировать.

Виртуальное окружение можно полностью удалить, когда оно перестанет быть
нужным:

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

Вот так можно работать с виртуальными окружениями в Python. Всегда устанавливайте
зависимости проектов только в изолированные виртуальные окружения. Не смешивайте
зависимости разных проектов в одном окружении.

Когда в инструкции по установке библиотеки написано pip install ...,
подразумевается, что у читателя есть понимание, что он делает. Думаю,
разработчики библиотек не пишут про создание виртуальных окружений
только потому, что это сильно раздуло бы все инструкции.

Ничего не устанавливайте в глобальный интерпретатор

Иногда возникает желание установить какой-нибудь пакет прямо в глобальный
интерпретатор, потому что по смыслу этот пакет вроде как должен быть вне
виртуальных окружений. Например, это может быть какая-нибудь программа,
типа poetry,
docker-compose,
youtube-dl или
howdoi. Руки набирают в терминал:

Установка начинается, прогресс-бары заполняются, но в итоге всё завершается
чем-то типа такого:

error: could not create '/lib/python2.7/site-packages/poetry': Permission denied

Можно попробовать установить, используя sudo, и это сработает, но это
считается очень плохой практикой,
и я настоятельно рекомендую так не делать по нескольким причинам:

  1. Угроза безопасности.

    В секции про установку пакетов я упомянул, что для пакетов других форматов,
    кроме wheel, могут потребоваться дополнительные действия. На самом деле,
    при установке пакета формата sdist исполняется файлsetup.py, в котором
    потенциально могут содержаться любые действия — от честной установки пакета,
    до rm -rf / или установки криптомайнера в систему. Т.к. в PyPI пакет
    загрузить может кто угодно, никогда нельзя быть уверенным, что именно сделает пакет
    при установке. Выполнять такой скрипт с системными привилегиями (sudo) —
    не самый мудрый ход.

  2. Может нарушить целостность системы.

    Часто в операционных системах принято устанавливать программы через
    пакетный менеджер (будь то apt, dnf или pacman). Этот же пакетный
    менеджер затем может без следа удалить установленную программу, потому что он
    ведёт учёт файлов — какой программе какие файлы принадлежит. Если начать
    изменять файлы программ каким-либо образом, помимо пакетного менеджера,
    то это может нарушить его работу. pip, конечно, установит что нужно,
    но после этого могут возникнуть проблемы с системным пакетным менеджером.

Как правильно:

  1. сказать pip, чтобы он установил пакет не в директорию site-packages, а в
    домашнюю директорию пользователя при помощи флага --user:

    $ pip install --user poetry  # без sudo!
    

    Обязательно нужно убедиться, что директория, куда установится пакет,
    перечислена в переменной $PATH. Путь к директории можно получить при помощи
    следующей команды:

    $ python -m site --user-base
    /Users/and-semakin/.local
    

    К получившемуся пути нужно в конце добавить /bin для Linux и MacOS,
    либо Scripts для Windows, так что
    в моём случае (MacOS) в $PATH нужно добавить вот такой путь:
    /Users/and-semakin/.local/bin.

    Подробнее про этот метод установки читайте здесь.

  2. установить программу через пакетный менеджер ОС, например:

    $ sudo dnf install python-poetry
    

    Часто мейнтейнеры ОС создают обёртки для пакетов из PyPI, которые можно
    установить при помощи системного пакетного менеджера. Как правило, такие
    обёртки называются python-<имя пакета> или python3-<имя пакета>.
    Это делается как раз для того, чтобы дать пользователям возможность
    устанавливать Python-программы, не нарушая работу пакетного менеджера ОС.
    Кроме того, эти пакеты проходят проверку безопасности, так что риск получить
    криптомайнер значительно ниже.

Выводы

  • всегда устанавливайте зависимости проектов в отдельные виртуальные окружения;
  • если нужно установить пакет “глобально”, то используйте либо pip install --user ...,
    либо прибегните к помощи пакетного менеджера операционной системы;
  • никогда не используйте sudo pip ... — считайте, что это табу.

Да, виртуальные окружения — определенно не самая удобная часть разработки на
Python, и уж точно не самая простая тема, к этому просто нужно привыкнуть.
Несколько раз повторил, выработал привычку — в целом, ничего сложного.
Кроме того, экосистема Python развивается очень быстро, и я надеюсь,
что скоро правильная установка пакетов
и управление виртуальными окружениями станут намного легче.
Уже сейчас можно пользоваться такими инструментами,
которые в некоторой мере прячут от пользователя виртуальные окружения:

  • poetry;
  • pipenv.

Стабильных вам зависимостей и кода без багов!

Полезно почитать:

  • Документация: https://docs.python.org/3/library/venv.html

Сегодня уже ни для кого не секрет, что для просмотра и редактирования текстовых и графических файлов совсем не обязательно устанавливать на компьютер соответствующие программы. Просмотр и редактирование данных поддерживают многие популярные облачные сервисы, но все они без исключения уступают ресурсу rollApp, представляющему собой настоящий каталок виртуальных приложений, которые можно запускать, используя самый что ни на есть обычный браузер.

Сейчас в базе сервиса имеется более 170 приложений и игр, причём большинство из них в плане функциональности практически ничем не уступает инсталлируемым программам. Здесь вы найдете игры, текстовые и графические редакторы, архиваторы и утилиты, средства для работы с аудио, образовательные программы и инструменты для разработчиков.

Сервис rollApp

С их помощью вы можете просматривать, редактировать и сохранять данные, правда для этого вам придётся подключить к rollApp одно из облачных хранилищ. Это может быть Google Drive, Dropbox, Box, OneDrive, Яндекс.Диск и WebDAW.

Сервис rollApp

Работать в виртуальных приложениях можно так же, как если бы они были установлены на локальном компьютере. Обработка данных выполняется на удалённом сервере, где располагается программное обеспечение, на ПК же пользователь имеет дело только с графическим интерфейсом.

Сервис rollApp

Производительность виртуальных программ зависит по большей части от качества соединения, хотя некоторые программы, например, 3D-редакторы всё же могут предъявлять к графическим возможностям системы определённые требования.

Сервис rollApp

Регистрация для работы с rollApp обязательна. Некоторые программы можно запускать в тестовом режиме, но тогда вы не сможете загружать и сохранять файлы, впрочем, есть и такие приложения, для работы в которых требуется платная подписка. Услуги сервиса предоставляются на платной основе, однако в течении 14-ти дней ими можно пользоваться бесплатно. Есть и другие, не столь существенные ограничения, например, пользователи, не имеющие премиум-подписки, не могут запускать более чем три приложения одновременно.

Сервис rollApp

Виртуальные программы rollApp: www.rollapp.com

Загрузка…

Добавить комментарий