Эффективная среда Python: Чувствуйте себя как дома

Оглавление

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

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

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

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

К концу этой статьи вы сможете ответить на такие вопросы, как:

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

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

Оболочки

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

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

Оболочки Unix

Unix - это семейство операционных систем, впервые разработанных на заре развития вычислительной техники. Популярность Unix сохраняется и по сей день, в значительной степени вдохновляя Linux и macOS. Первые оболочки были разработаны для использования с Unix и Unix-подобными операционными системами. Чтобы узнать, как использовать оболочку Linux, ознакомьтесь с Использование терминала в Linux..

Оболочка Борна (sh)

Оболочка Bourne, разработанная Стивеном Борном для Bell Labs в 1979 году, была одной из первых, в которой была реализована идея переменных среды, условных обозначений и циклов. Она послужила надежной основой для многих других оболочек, используемых сегодня, и по-прежнему доступна в большинстве систем по адресу /bin/sh.

Снова оболочка Борна (bash)

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

Z-оболочка (zsh)

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

zsh также предоставляет платформу для глубокой настройки. Проект Oh My Zsh предоставляет богатый набор тем и плагинов и часто используется совместно с zsh.

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

Xonsh

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

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

Оболочки Windows

Как и в случае с Unix-подобными операционными системами, Windows также предлагает множество вариантов оболочек. Оболочки, предлагаемые в Windows, различаются по функциям и синтаксису, поэтому вам, возможно, придется попробовать несколько, чтобы найти ту, которая вам больше всего нравится. Чтобы ознакомиться с вашими возможностями и основными командами, ознакомьтесь с Использование терминала в Windows.

Команда (cmd.exe)

CMD (сокращение от “команда”) - это командная строка по умолчанию для Windows. Она является преемницей COMMAND.COM, оболочки, созданной для DOS (дисковой операционной системы).

Поскольку DOS и Unix развивались независимо, команды и синтаксис в CMD заметно отличаются от оболочек, созданных для Unix-подобных систем. Однако CMD по-прежнему предоставляет те же основные функциональные возможности для просмотра файлов и манипулирования ими, выполнения команд и просмотра выходных данных.

PowerShell

PowerShell был выпущен в 2006 году и также поставляется с Windows. Он предоставляет Unix-подобные псевдонимы для большинства команд, поэтому, если вы переходите на Windows с macOS или Linux или вынуждены использовать обе, то PowerShell может вам отлично подойти.

PowerShell значительно более мощный, чем CMD. С помощью PowerShell вы можете:

  • Преобразовать выходные данные одной команды во входные данные другой
  • Автоматизировать задачи с помощью доступных функций управления Windows
  • Используйте скриптовый язык для выполнения сложных задач

Подсистема Windows для Linux

Microsoft выпустила подсистему Windows для Linux (WSL) для запуска Linux непосредственно в Windows. Если вы установили WSL, то можете использовать zsh, bash, или любую другую Unix-подобную оболочку. Если вам нужна надежная совместимость в ваших средах Windows, macOS или Linux, обязательно попробуйте WSL. Вы также можете рассмотреть возможность двойной загрузки Linux и Windows в качестве альтернативы.

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

Эмуляторы терминалов

Ранние разработчики использовали терминалы для взаимодействия с центральным компьютером. Это были устройства с клавиатурой и экраном или принтером, которые отображали результаты вычислений.

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

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

  • Цвета текста для выделения синтаксиса в вашем коде или выделения значимого текста в выходных данных команды
  • Прокрутка для просмотра предыдущей команды или ее выходных данных
  • Копирование/вставка для переноса текста в оболочку или из нее из других программ
  • Вкладки для одновременного запуска нескольких программ или разделения вашей работы на разные сеансы

Терминалы macOS

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

Terminal

Если вы используете компьютер Mac, то, возможно, вы уже использовали встроенное приложение Terminal. Терминал поддерживает все обычные функции, и вы также можете настроить цветовую гамму и несколько горячих клавиш. Это достаточно удобный инструмент, если вам не нужно много наворотов. Вы можете найти приложение Terminal в разделе Приложения → Утилиты → Терминал на macOS. Чтобы узнать больше о терминале, ознакомьтесь с разделом Использование терминала на macOS.

iTerm 2

Я уже давно пользуюсь iTerm2. Это еще больше расширяет возможности разработчика на Mac, предлагая гораздо более широкую палитру настроек и возможностей повышения производительности, которые позволяют вам:

  • Интеграция с командной оболочкой для быстрого перехода к ранее введенным командам
  • Создание пользовательского выделения поисковых запросов при выводе команд
  • Откройте URL-адреса и файлы, отображаемые в терминале, с помощью Cmd+нажмите

API Python поставляется с последними версиями iTerm2, так что вы можете даже улучшить свои навыки работы с Python, разработав более сложные настройки!

iTerm2 достаточно популярен, чтобы пользоваться первоклассной интеграцией с несколькими другими инструментами, и имеет здоровое сообщество, создающее плагины и так далее. Это хороший выбор из-за более частого цикла выпуска по сравнению с Terminal, который обновляется так же часто, как macOS.

Hyper

Относительный новичок, Hyper - это терминал, построенный на Electron, платформе для создания настольных приложений с использованием веб-технологий. Приложения Electron легко настраиваются, потому что в их основе лежит “просто JavaScript”. Вы можете создать любую функциональность, для которой сможете написать JavaScript.

С другой стороны, JavaScript - это язык программирования высокого уровня, и он не всегда будет работать так же хорошо, как языки низкого уровня, такие как Objective-C или Swift. Будьте внимательны к плагинам, которые вы устанавливаете или создаете!

Терминалы Windows

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

Командная строка

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

Cygwin

Cygwin - это сторонний набор инструментов для Windows, который предоставляет Unix-подобную оболочку. Это была моя предпочтительная настройка, когда я работал в Windows, но вы можете рассмотреть возможность использования подсистемы Windows для Linux, поскольку она получает большее распространение и совершенствуется.

Терминал Windows

Недавно Microsoft выпустила терминал с открытым исходным кодом для Windows 10 под названием Windows Terminal. Он позволяет работать в CMD, PowerShell и даже в подсистеме Windows для Linux. Если вам необходимо выполнить значительный объем работы с командной оболочкой в Windows, то, вероятно, лучше всего использовать Windows Terminal! Windows Terminal все еще находится на поздней стадии бета-тестирования, поэтому пока не поставляется с Windows. Инструкции по получению доступа см. в документации.

Управление версиями Python

Выбрав терминал и оболочку, вы можете сосредоточить свое внимание конкретно на вашей среде Python.

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

macOS и большинство операционных систем Unix поставляются с версией Python, установленной по умолчанию. Это часто называют системным Python. Системный Python работает просто отлично, но обычно он устарел. На момент написания этой статьи macOS High Sierra по-прежнему поставляется с Python 2.7.10 в качестве системного Python.

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

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

Как вы с этим справляетесь? Здесь вам помогут инструменты.

pyenv

pyenv это опытный инструмент для установки нескольких версий Python на macOS и управления ими. Я рекомендую установить его с помощью Homebrew. Если вы используете Windows, вы можете использовать pyenv-win. После установки pyenv вы можете установить несколько версий Python в свою среду Python с помощью нескольких коротких команд:

$ pyenv versions
* system
$ python --version
Python 2.7.10
$ pyenv install 3.7.3  # This may take some time
$ pyenv versions
* system
  3.7.3

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

$ pyenv global 3.7.3
$ pyenv versions
  system
* 3.7.3 (set by /Users/dhillard/.pyenv/version)

$ pyenv local 3.7.3
$ pyenv versions
  system
* 3.7.3 (set by /Users/dhillard/myproj/.python-version)

$ pyenv shell 3.7.3
$ pyenv versions
  system
* 3.7.3 (set by PYENV_VERSION environment variable)

$ python --version
Python 3.7.3

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

conda

Если вы работаете в области обработки данных, возможно, вы уже используете Anaconda (или Miniconda). Anaconda - это своего рода универсальный магазин программного обеспечения для анализа данных, который поддерживает не только Python.

Если вам не нужны пакеты data science или все то, что поставляется в комплекте с Anaconda, pyenv может оказаться для вас лучшим облегченным решением. Однако управление версиями Python в каждой из них довольно похоже. Вы можете установить версии Python аналогично pyenv, используя команду conda:

$ conda install python=3.7.3

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

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

Виртуальные среды

Теперь вы знаете, как управлять несколькими версиями Python. Часто вам приходится работать над несколькими проектами, для которых требуется одна и та же версия Python.

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

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

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

venv

venv поставляется с Python версии 3.3+. Вы можете создавать виртуальные среды, просто передав ему путь для хранения python среды, установленных пакетов и так далее:

$ python -m venv ~/.virtualenvs/my-env

Вы активируете виртуальную среду, используя ее activate скрипт:

$ source ~/.virtualenvs/my-env/bin/activate

Вы выходите из виртуальной среды с помощью команды deactivate, которая становится доступной при активации виртуальной среды:

(my-env)$ deactivate

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

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

pyenv-virtualenv

Если вы используете pyenv, то pyenv-virtualenv дополняет pyenv подкомандой для управления виртуальными средами:

// Create virtual environment
$ pyenv virtualenv 3.7.3 my-env

// Activate virtual environment
$ pyenv activate my-env

// Exit virtual environment
(my-env)$ pyenv deactivate

Я ежедневно переключаю контексты между большим количеством проектов. В результате у меня есть по меньшей мере дюжина различных виртуальных сред для управления в моей среде Python. Что действительно приятно в pyenv-virtualenv, так это то, что вы можете настроить виртуальную среду с помощью команды pyenv local, а pyenv-virtualenv автоматически активировать нужные среды при переключении в разные каталоги:

$ pyenv virtualenv 3.7.3 proj1
$ pyenv virtualenv 3.7.3 proj2
$ cd /Users/dhillard/proj1
$ pyenv local proj1
(proj1)$ cd ../proj2
$ pyenv local proj2
(proj2)$ pyenv versions
  system
  3.7.3
  3.7.3/envs/proj1
  3.7.3/envs/proj2
  proj1
* proj2 (set by /Users/dhillard/proj2/.python-version)

pyenv и pyenv-virtualenv обеспечили особенно плавный рабочий процесс в моей среде Python.

conda

Ранее вы видели, что conda в качестве основного метода работы использует среды, а не версии Python. conda имеет встроенную поддержку для управления виртуальными средами:

// Create virtual environment
$ conda create --name my-env python=3.7.3

// Activate virtual environment
$ conda activate my-env

// Exit virtual environment
(my-env)$ conda deactivate

conda установит указанную версию Python, если она еще не установлена, поэтому вам не нужно сначала запускать conda install python=3.7.3.

pipenv

pipenv это относительно новый инструмент, который стремится объединить управление пакетами (подробнее об этом чуть позже) с управлением виртуальной средой. Это в основном отвлекает вас от управления виртуальной средой, что может быть замечательно, если все идет гладко:

$ cd /Users/dhillard/myproj

// Create virtual environment
$ pipenv install
Creating a virtualenv for this project…
Pipfile: /Users/dhillard/myproj/Pipfile
Using /path/to/pipenv/python3.7 (3.7.3) to create virtualenv…
✔ Successfully created virtual environment!
Virtualenv location: /Users/dhillard/.local/share/virtualenvs/myproj-nAbMEAt0
Creating a Pipfile for this project…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (a65489)!
Installing dependencies from Pipfile.lock (a65489)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

// Activate virtual environment (uses a subshell)
$ pipenv shell
Launching subshell in virtual environment…
 . /Users/dhillard/.local/share/virtualenvs/test-nAbMEAt0/bin/activate

// Exit virtual environment (by exiting subshell)
(myproj-nAbMEAt0)$ exit

pipenv выполняет всю тяжелую работу по созданию виртуальной среды и ее активации за вас. Если вы посмотрите внимательно, то увидите, что он также создает файл с именем Pipfile. После первого запуска pipenv install этот файл содержит всего несколько элементов:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.7"

В частности, обратите внимание, что отображается python_version = "3.7". По умолчанию pipenv создает виртуальную среду Python, используя ту же версию Python, под которой она была установлена. Если вы хотите использовать другую версию Python, то вы можете создать Pipfile самостоятельно перед запуском pipenv install и указать нужную версию. Если у вас установлен pyenv, то pipenv будет использовать его для установки указанной версии Python, если это необходимо.

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

Чтобы получить более полное представление о виртуальных средах, обязательно прочитайте Виртуальные среды Python: Учебник для начинающих.

Управление пакетами

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

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

pip

pip ( pip installs packages) уже несколько лет является стандартом де-факто для управления пакетами в Python. Он был во многом вдохновлен более ранним инструментом под названием easy_install. Питон включены pip в стандартный дистрибутив начиная с версии 3.4. pip автоматизирует процесс загрузки пакетов и делает питон осведомлены о них.

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

$ pyenv virtualenv 3.7.3 proj1
$ pyenv activate proj1
(proj1)$ pip list
Package    Version
---------- ---------
pip        19.1.1
setuptools 40.8.0

(proj1)$ python -m pip install requests
Collecting requests
  Downloading .../requests-2.22.0-py2.py3-none-any.whl (57kB)
    100% |████████████████████████████████| 61kB 2.2MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Downloading .../chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 1.7MB/s
Collecting certifi>=2017.4.17 (from requests)
  Downloading .../certifi-2019.6.16-py2.py3-none-any.whl (157kB)
    100% |████████████████████████████████| 163kB 6.0MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
  Downloading .../urllib3-1.25.3-py2.py3-none-any.whl (150kB)
    100% |████████████████████████████████| 153kB 1.7MB/s
Collecting idna<2.9,>=2.5 (from requests)
  Downloading .../idna-2.8-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 26.6MB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed packages

$ pip list
Package    Version
---------- ---------
certifi    2019.6.16
chardet    3.0.4
idna       2.8
pip        19.1.1
requests   2.22.0
setuptools 40.8.0
urllib3    1.25.3

pip установлен requests, а также несколько пакетов, от которых это зависит. pip list отображает все установленные в данный момент пакеты и их версии.

Предупреждение: Вы можете удалить пакеты, например, с помощью pip uninstall requests, но это приведет к удалению только requests — не какая-либо из его зависимостей.

Наиболее распространенным способом указания зависимостей проекта для pip является использование файла requirements.txt. В каждой строке файла указывается имя пакета и, при необходимости, версия для установки:

scipy==1.3.0
requests==2.22.0

Затем вы можете запустить python -m pip install -r requirements.txt, чтобы установить все указанные зависимости одновременно. Подробнее о pip см. в разделе Что такое Pip? Руководство для начинающих питонистов.

pipenv

pipenv выполняет большинство тех же базовых операций, что и pip, но относится к пакетам немного по-другому. Помните Pipfile, который создает pipenv? Когда вы устанавливаете пакет, pipenv добавляет этот пакет в Pipfile, а также добавляет более подробную информацию в новый файл блокировки, который называется Pipfile.lock. Файлы блокировки действуют как моментальный снимок точного набора установленных пакетов, включая прямые зависимости, а также их подзависимости.

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

$ pipenv install requests
Installing requests…
Adding requests to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock (444a6d) out of date, updating to (a65489)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success!
Updated Pipfile.lock (444a6d)!
Installing dependencies from Pipfile.lock (444a6d)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:00

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

pipenv также проводится различие между зависимостями разработки и производственными (обычными) зависимостями. Во время разработки вам могут понадобиться некоторые инструменты, такие как black или flake8, которые вам не понадобятся, когда вы запускаете свое приложение в рабочей среде. Вы можете указать, что пакет предназначен для разработки, при его установке:

$ pipenv install --dev flake8
Installing flake8…
Adding flake8 to Pipfile's [dev-packages]…
✔ Installation Succeeded
...

pipenv install ( без каких-либо аргументов) установит только ваши производственные пакеты по умолчанию, но вы можете указать ему также установить зависимости разработки с помощью pipenv install --dev.

poetry

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

$ poetry new myproj
Created package myproj in myproj
$ ls myproj/
README.rst    myproj    pyproject.toml    tests

Аналогично тому, как pipenv создает Pipfile, poetry создает файл pyproject.toml. Этот последний стандарт содержит метаданные о проекте, а также версии зависимостей:

[tool.poetry]
name = "myproj"
version = "0.1.0"
description = ""
authors = ["Dane Hillard <github@danehillard.com>"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]
pytest = "^3.0"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Вы можете устанавливать пакеты с помощью poetry add (или в качестве зависимостей разработки с помощью poetry add --dev):

$ poetry add requests
Using version ^2.22 for requests

Updating dependencies
Resolving dependencies... (0.2s)

Writing lock file


Package operations: 5 installs, 0 updates, 0 removals

  - Installing certifi (2019.6.16)
  - Installing chardet (3.0.4)
  - Installing idna (2.8)
  - Installing urllib3 (1.25.3)
  - Installing requests (2.22.0)

poetry также поддерживается файл блокировки, и у него есть преимущество перед pipenv, поскольку он отслеживает, какие пакеты являются зависимыми. В результате вы можете удалить requests и его зависимости с помощью poetry remove requests.

conda

С помощью conda вы можете использовать pip для установки пакетов как обычно, но вы также можете использовать conda install для установки пакетов из разных каналов , которые представляют собой наборы пакетов, предоставляемых Anaconda или другими поставщиками. Чтобы установить requests с канала conda-forge, вы можете запустить conda install -c conda-forge requests.

Подробнее об управлении пакетами читайте в conda разделе Настройка Python для машинного обучения в Windows.

Интерпретаторы Python

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

Python 3.7.3 (default, Jun 17 2019, 14:09:05)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 2
4
>>> exit()

REPL считывает то, что вы вводите, оценивает это как код на Python, и выводит результат. Затем он ожидает, чтобы повторить все сначала. Это примерно столько, сколько предоставляет стандартный Python REPL, чего достаточно для выполнения значительной части типичной работы.

IPython

Как и Anaconda, IPython представляет собой набор инструментов, поддерживающих не только Python, но одной из его основных функций является альтернативный Python REPL. REPL IPython нумерует каждую команду и явно помечает входные и выходные данные каждой команды. После установки IPython (python -m pip install ipython), вы можете выполнить команду ipython вместо команды python, чтобы использовать IPython REPL:

Python 3.7.3
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0.dev -- An enhanced Interactive Python. Type '?' for help.

In [1]: 2 + 2
Out[1]: 4

In [2]: print("Hello!")
Out[2]: Hello!

IPython также поддерживает завершение работы с вкладками , более мощные функции справки и тесную интеграцию с другими инструментами, такими как matplotlib для построения графиков. IPython стал основой для Jupyter, и оба они широко используются в сообществе специалистов по обработке данных благодаря их интеграции с другими инструментами.

IPython REPL также легко настраивается, поэтому, хотя он и не является полноценной средой разработки, он все же может повысить вашу производительность. Стоит обратить внимание на его встроенные и настраиваемые волшебные команды.

bpython

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

Текстовые редакторы

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

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

В этой области есть очень много вариантов на выбор, поэтому я не буду пытаться подробно описывать их здесь. Ознакомьтесь с Python IDE и редакторами кода (руководство) для получения общего обзора. Хорошей стратегией является поиск простого, небольшого текстового редактора для быстрого внесения изменений и полнофункциональной среды IDE для более сложной работы. Vim и PyCharm, соответственно, это мои любимые редакторы.

Советы и рекомендации по использованию среды Python

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

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

Вот несколько заключительных советов.

Знайте свою текущую виртуальную среду

Как упоминалось ранее, это отличная идея - отображать активную версию Python или виртуальную среду в командной строке. Большинство инструментов сделают это за вас, но если нет (или если вы хотите настроить приглашение), то значение обычно содержится в переменной окружения VIRTUAL_ENV.

Отключите ненужные временные файлы

Вы когда-нибудь замечали, что *.pyc файлы разбросаны по всем каталогам вашего проекта? Эти файлы представляют собой предварительно скомпилированный байт-код Python — они помогают Python быстрее запускать ваше приложение. В рабочей среде это отличная идея, потому что это даст вам некоторый прирост производительности. Однако во время локальной разработки они редко бывают полезны. Установите PYTHONDONTWRITEBYTECODE=1, чтобы отключить это поведение. Если вы найдете варианты использования для них позже, то сможете легко удалить это из своей среды Python.

Настройте свой интерпретатор Python

Вы можете повлиять на поведение REPL, используя файл запуска. Python прочитает этот файл запуска и выполнит содержащийся в нем код перед вводом в REPL. Задайте переменной окружения PYTHONSTARTUP путь к вашему файлу автозагрузки. (Мой путь находится в ~/.pystartup.) Если вы хотите нажать Up для просмотра истории команд и Tab для завершения, как это предусмотрено в вашей оболочке, затем укажите этот запуск файл попробуйте.

Заключение

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

  • Выберите терминал с эстетичным дизайном и расширенными функциями, которые вам нравятся
  • Выберите оболочку с таким количеством (или небольшим количеством) опций настройки, которое вам нужно
  • Управляйте несколькими версиями Python в вашей системе
  • Управляйте несколькими проектами, использующими одну версию Python, используя виртуальные среды Python
  • Устанавливайте пакеты в своих виртуальных средах
  • Выберите REPL, который соответствует вашим потребностям в интерактивном кодировании

Когда у вас будет готовая среда Python, я надеюсь, вы поделитесь снимками экрана, скринкастами или постами в блоге о своей идеальной настройке ✨

Back to Top