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

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

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

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

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

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

Содержание

Консоли

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

Консоли Unix

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

Bourne Shell (sh)

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

Bourne-Again Shell (bash)

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

Z Shell (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, различаются по функциям и синтаксису, поэтому вам может потребоваться попробовать несколько, чтобы найти ту, которая вам больше всего нравится.

CMD (cmd.exe)

CMD (сокращение от «command») — это оболочка CLI по умолчанию для 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, являются полнофункциональными и отличаются в основном эстетикой и конкретной интеграцией с другими инструментами.

Терминал

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

iTerm2

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

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

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

iTerm2 достаточно популярен, чтобы пользоваться первоклассной интеграцией с несколькими другими инструментами, а также имеет плагины для создания здорового сообщества и так далее. Это хороший выбор из-за более частого цикла выпуска по сравнению с Терминалом, который обновляется так же часто, как и 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, вероятно, ваш лучший выбор! Терминал Windows все еще находится на поздней стадии бета-тестирования, поэтому он еще не поставляется с 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 — это проверенный временем инструмент для установки и управления несколькими версиями 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. среда. См. Managing Multiple Python Versions with pyenv для получения подробного обзора инструмента.

conda

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

Если вам не нужны пакеты для анализа данных или все вещи, которые поставляются с 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 -m venv ~/.virtualenvs/my-env

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

$ 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 с помощью дополнительной команды для управления виртуальными средами:

// Создаем виртуальную среду
$ pyenv virtualenv 3.7.3 my-env

// Активируем виртуальную среду
$ pyenv activate my-env

// Выход из виртуальной среды
(my-env)$ pyenv deactivate

Изо дня в день я переключаю контекст между большим количеством проектов. В результате у меня есть как минимум дюжина различных виртуальных сред, которыми нужно управлять в моей среде Python. Что действительно хорошо в pyenv-virtualenv, так это то, что вы можете настроить виртуальную среду с помощью локальной команды pyenv и иметь автоматическую настройку 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 имеет встроенную поддержку для управления виртуальными средами:

// Создаем виртуальную среду
$ conda create --name my-env python=3.7.3

// Активируем виртуальную среду
$ conda activate my-env

// Выход из виртуальной среды
(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. Python включил pip в стандартный дистрибутив, начиная с версии 3.4. pip автоматизирует процесс загрузки пакетов и сообщает Python о них.Если у вас несколько виртуальных сред, вы можете увидеть, что они изолированы, установив несколько пакетов в одном:

$ 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 установил запросы, а также несколько пакетов, от которых он зависит. В списке pip показаны все установленные на данный момент пакеты и их версии.

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

Обычный способ указать зависимости проекта для pip — использовать файл requirements.txt. Каждая строка в файле указывает имя пакета и, при желании, версию для установки:

scipy==1.3.0
requests==2.22.0

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

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.

poentry

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

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

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

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

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

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

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

Вы можете установить пакеты с помощью поэзии 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, потому что он отслеживает, какие пакеты являются подчиненными. В результате вы можете удалить запросы и их зависимости с помощью поэтических запросов на удаление.

conda

С conda вы можете использовать pip для установки пакетов как обычно, но вы также можете использовать conda install для установки пакетов из разных каналов, которые представляют собой коллекции пакетов, предоставленные Anaconda или другими поставщиками. Чтобы установить запросы из канала conda-forge, вы можете запустить conda install -c conda-forge requests. Дополнительные сведения об управлении пакетами в conda см. В разделе Setting Up Python for Machine Learning on 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 и печатает результат. Затем он ждет, чтобы повторить все заново. Это примерно столько же, сколько предоставляет REPL Python по умолчанию, чего достаточно для значительной части типичной работы.

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 также поддерживает автозавершение Tab, более мощные функции справки и сильную интеграцию с другими инструментами, такими как matplotlib для построения графиков. IPython послужил основой для Jupyter, и оба они широко используются в сообществе специалистов по науке о данных из-за их интеграции с другими инструментами.

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

bpython

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

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

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

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

На этой арене так много вариантов на выбор, что я не буду пытаться подробно описывать ее здесь. Ознакомьтесь с Интегрированные среды разработки и редакторы кода для Python. Хорошая стратегия — найти простой небольшой текстовый редактор для быстрых изменений и полнофункциональную среду IDE для более сложной работы. Я предпочитаю редакторы Notepad++ и 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, я надеюсь, вы поделитесь снимками экрана, скринкастами или сообщениями в блогах о своей идеальной настройке.

An Effective Python Environment: Making Yourself at Home

Опубликовано Вадим В. Костерин

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль).

Оставьте комментарий

Ваш адрес email не будет опубликован.