Python версии: Выход стабильной версии Python 3.9.0 / Хабр

Содержание

Выход стабильной версии Python 3.9.0 / Хабр

Сегодня, 05.10.2020 ожидается выход стабильной версии Python 3.9.0. Новая версия будет получать обновления с исправлениями примерно каждые 2 месяца в течение примерно 18 месяцев. Через некоторое время после выпуска финальной версии 3.10.0 будет выпущено девятое и последнее обновление с исправлением ошибок 3.9.

«This is the first version of Python to default to the 64-bit installer on Windows. The installer now also actively disallows installation on Windows 7.»
«Это первая версия Python, по умолчанию использующая 64-разрядный установщик в Windows. Программа установки теперь также запрещает установку в Windows 7.»

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

UPD:

Переход на стабильные годовые циклы выпуска, см. PEP 602
alec_kalinin
«Каждая новая версия Python теперь будет выходить в октябре. Python 3.10 выйдет в октябре 2021, Python 3.11 в октябре 2022. А каждые два месяца будет выходить багфикс. Для меня это великолепная новость, теперь можно четко планировать upgrade python окружения.»

PEP 584

Этот PEP предлагает добавить операторы слияния ( | ) и обновления ( | = ) во встроенный класс dict.

Для слияния: |

>>> a = {'milk': 'prostokvashino', 'сheese': 'cheddar'} 
>>> b = {'milk': 1, 'сheese': 2, 'bread': 3} 
>> > а | b 
{'milk': 1, 'сheese': 2, 'bread': 3}
>>> b | a 
{'milk': 'prostokvashino', 'сheese': 'cheddar', 'bread': 3}

Для обновления: |=

>>> a | = b 
>>> a 
{'milk': 1, 'сheese': 2, 'bread': 3}

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

Безусловно, у многих питонистов возникнет вопрос, зачем это нужно, если уже есть привычный всем вариант

{**d1, **d2}

На этот вопрос был дан ответ в самом PEP:

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

Как сказал Гвидо:

Прошу прощения за PEP 448, но даже если вы знаете о ** d в более простом контексте, если бы вы спросили типичного пользователя Python, как объединить два dict в новый, я сомневаюсь, что многие люди подумают о {**d1, **d2}. Я знаю, что сам забыл об этом, когда началась эта ветка!

Также {**d1, **d2} не работает для подклассов dict, таких как defaultdict

PEP 585

Generics подсказки типов в стандартных коллекциях.

Generic — тип, который можно параметризовать, некий контейнер. Также известен как параметрический тип или универсальный тип.

В выпуске включена поддержка универсального синтаксиса во всех стандартных коллекциях, доступных в настоящее время в модуле «Typing». Мы можем использовать типы list или dict в качестве универсальных типов вместо использования typing.List или typing. Dict.

Было:

from typing import List

a: List[str] = list()

def read_files(files: List[str]) -> None:
    pass

Стало:

a: list[str] = list()

def read_files(files: list[str]) -> None:
    pass

Полный список типов

tuple

list

dict

set

frozenset

type

collections.deque

collections.defaultdict

collections.OrderedDict

collections.Counter

collections.ChainMap

collections.abc.Awaitable

collections.abc.Coroutine

collections.abc.AsyncIterable

collections.abc.AsyncIterator

collections.abc.AsyncGenerator

collections.abc.Iterable

collections.abc.Iterator

collections.abc.Generator

collections.abc.Reversible

collections.abc.Container

collections.abc.Collection

collections. abc.Callable

collections.abc.Set # typing.AbstractSet

collections.abc.MutableSet

collections.abc.Mapping

collections.abc.MutableMapping

collections.abc.Sequence

collections.abc.MutableSequence

collections.abc.ByteString

collections.abc.MappingView

collections.abc.KeysView

collections.abc.ItemsView

collections.abc.ValuesView

contextlib.AbstractContextManager # вместо typing.ContextManager

contextlib.AbstractAsyncContextManager # вместо typing.AsyncContextManager

re.Pattern # вместо typing.Pattern, typing.re.Pattern

re.Match # вместо typing.Match, typing.re.Match

PEP 615

Поддержка базы данных часовых поясов IANA в стандартной библиотеке.

IANA часовые пояса часто называют tz или zone info. Существует большое количество часовых поясов IANA с разными путями поиска для указания часового пояса IANA для объекта даты и времени. Например, мы можем передать имя пути поиска как Континент/Город datetime объекту, чтобы установить его tzinfo.

dt: datetime = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("Europe/London"))

Если мы передадим неверный ключ, будет вызвано исключение

zoneinfo.ZoneInfoNotFoundError

PEP 616

Новые строковые функции для удаления префикса и суффикса.

К str объекту добавлены две новые функции.

  • Первая функция удаляет префикс.
    str.removeprefix(prefix)
  • Вторая функция удаляет суффикс.
    str.removesuffix(suffix)
>>> 'hello_world'.removeprefix ('hello_') 
world
>>> 'hello_world'.removesuffix ('_world') 
hello

PEP 617

Версия Python 3.9 предлагает заменить текущий синтаксический анализатор Python на основе LL (1) новым синтаксическим анализатором на основе PEG, который является высокопроизводительным и стабильным.

Текущий парсер CPython основан на LL (1). Впоследствии грамматика основана на LL (1), что позволяет анализировать ее с помощью анализатора LL (1). Парсер LL (1) работает сверху вниз. Кроме того, он анализирует входные данные слева направо. Текущая грамматика является контекстно-свободной грамматикой, поэтому контекст токенов не принимается во внимание.

Версия Python 3.9 предлагает заменить его новым парсером на основе PEG, что означает, что он снимет текущие ограничения Python грамматики LL (1). Кроме того, в текущий синтаксический анализатор внесены исправления, в которые добавлен ряд хаков, которые будут удалены. В результате это снизит стоимость обслуживания в долгосрочной перспективе.

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

issue30966

Возможность отмены одновременных фьючерсов.

Новый параметр cancel_futures был добавлен в concurrent.futures.Executor.shutdown().

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

Новый параметр cancel_futures был добавлен в ThreadPoolExecutor и ProcessPoolExecutor. Он работает, когда значение параметра равно True, тогда все ожидающие фьючерсы будут отменены при вызове функции shutdown().

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

issue30966

В этом выпуске в библиотеку asyncio и multiprocessing был внесен ряд улучшений.

Например,

  1. reuse_address параметр asyncio.loop.create_datagram_endpoint() больше не поддерживаются из-за значительных проблем в области безопасности.
  2. Добавлены новые coroutines, shutdown_default_executor() и сопрограммы asyncio.to_thread(). Новый вызов asyncio.to_thread() используется для запуска функций, связанных с вводом-выводом, в отдельном потоке, чтобы избежать блокировки цикла событий.

Что касается улучшений библиотеки multiprocessing, в класс multiprocessing.SimpleQueue был добавлен новый метод close().

Этот метод явно закрывает очередь. Это гарантирует, что очередь будет закрыта и не останется дольше ожидаемого. Важно помнить, что методы get(), put(), empty() нельзя вызывать после закрытия очереди.

issue37444

Исправление ошибки импорта пакетов.

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

builtins.__import__() вызывал ValueError то время как importlib.__import__() вызывал ImportError.

Сейчас это исправлено, . __Import __ () теперь вызывает ImportError вместо ValueError.

issue40286

Генерация случайных байтов.

Еще одна функция, которая была добавлена ​​в версии 3.9, — это random.Random.randbytes(). Она может использоваться для генерации случайных байтов.

Мы можем генерировать случайные числа, но что, если нам нужно было генерировать случайные байты? До версии 3.9 разработчикам приходилось проявлять изобретательность, чтобы генерировать случайные байты. Хотя мы можем использовать, os.getrandom(), os.urandom() или secrets.token_bytes() но не можем генерировать псевдослучайные шаблоны.

Например, чтобы гарантировать, что случайные числа генерируются с ожидаемым поведением и процесс воспроизводится, мы обычно используем seed с модулем random.Random.

В результате был введен метод random.Random.randbytes(). Он генерирует случайные байты.

issue28029

Исправление функции замены строки.

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

Чтобы дополнительно объяснить проблему, до версии 3.9 функция replace имела несогласованное поведение:

Можно было бы ожидать увидеть blog

"" .replace ("", "blog", 1) 
>>> '' 

Можно было бы ожидать увидеть |

"" .replace ("", "|", 1) 
>>> '' 
"" .replace ("", "prefix") 
>>> 'prefix'
issue39648, issue39479, issue39288, issue39310

Изменения в модуле «math».

Возвращает наименьшее общее кратное целых аргументов:

>>> import  math 
>>> math.lcm(48,72,108) 
432

Возвращает наибольший общий делитель целочисленных аргументов. В более ранней версии поддерживалось только два аргумента. Добавлена ​​поддержка произвольного количества аргументов:

>>> import  math 
>>> math. gcd(9,12,21) 
3

Вычисляет ближайшее к «x» число с плавающей точкой, если двигаться в направлении «y«.

>>> math.nextafter(2, -1)
1.9999999999999998

Этот метод возвращает значение младшего бита числа с плавающей запятой x.

>>> 1 - math.ulp(1)
0.9999999999999998
>>> math.nextafter(1, -1) + math.ulp(1)
1.0
issue38870

В модуль ast добавили метод unparse.
Новый метод может использоваться для создания строки с кодом и его последующего выполнения.

>>> import ast
>>> parsed = ast.parse('from sys import platform; print(platform)')
>>> unparsed_str = ast.unparse(parsed)
>>> print(unparsed_str)
from sys import platform
print(platform)
>>> exec(unparsed_str)
win32
issue39507, issue39509

Добавление новых кодов в http.HTTPStatus.

«Сохранить 418!»

418 IM_A_TEAPOT
103 EARLY_HINTS
425 TOO_EARLY

UPD:

PEP 614

Ослабление грамматических ограничений для декораторов.

Было:

buttons = [QPushButton(f'Button {i}') for i in range(10)]

button_0 = buttons[0]

@button_0.clicked.connect
def spam():
    ...

button_1 = buttons[1]

@button_1.clicked.connect
def eggs():
    ...

То теперь можно убрать лишние присваивания и вызывать напрямую:

buttons = [QPushButton(f'Button {i}') for i in range(10)]

@buttons[0].clicked.connect
def spam():
    ...

@buttons[1].clicked.connect
def eggs():
    ...

«Кортеж должен быть заключен в круглые скобки»

Это основано на видении Гвидо в том же письме. Цитата:

Но запятых я не допущу. Я не могу согласиться с этим

@f, g
def pooh(): ...

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

issue17005

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

UPD: ifinik

>>> from graphlib import TopologicalSorter 
>>> graph = {'E': {'C', 'F'}, 'D': {'B', 'C'}, 'B': {'A'}, 'A': {'F'}} 
>>> ts = TopologicalSorter(graph) 
>>> tuple(ts.static_order()) 
('C', 'F', 'E', 'A', 'B', 'D')
>>> tuple(ts.static_order())
('F', 'C', 'A', 'E', 'B', 'D')

Граф можно передавать не сразу, а заполнять TopologicalSorter с помощью метода add. Кроме того класс адаптирован к параллельным вычислениям и может быть использован, например, для создания очереди задач.

issue37630, issue40479

Обновление библиотеки hashlib.
Теперь hashlib может использовать хэши SHA3 и SHAKE XOF из OpenSSL.
Встроенные хэш-модули теперь могут быть отключены или выборочно включены, например, для принудительного использования реализации на основе OpenSSL.

Оптимизация

Сводка улучшений производительности от Python 3. 4 до Python 3.9:

Python version                       3.4     3.5     3.6     3.7     3.8    3.9
--------------                       ---     ---     ---     ---     ---    ---

Variable and attribute read access:
    read_local                       7.1     7.1     5.4     5.1     3.9    4.0
    read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.8
    read_global                     15.5    19.0    14.3    13.6     7.6    7.7
    read_builtin                    21.1    21.6    18.5    19.0     7.5    7.7
    read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   18.6
    read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   20.1
    read_instancevar                32.4    33.1    28.0    26.3    25.4   27.7
    read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   24.5
    read_namedtuple                 73.8    57.5    45.0    46.8    18.4   23.2
    read_boundmethod                37.6    37.9    29.6    26. 9    27.7   45.9

Variable and attribute write access:
    write_local                      8.7     9.3     5.5     5.3     4.3    4.2
    write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.9
    write_global                    19.7    21.2    18.0    18.0    15.8   17.2
    write_classvar                  92.9    96.0   104.6   102.1    39.2   43.2
    write_instancevar               44.6    45.8    40.0    38.9    35.5   40.7
    write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   27.7

Data structure read access:
    read_list                       24.2    24.5    20.8    20.8    19.0   21.1
    read_deque                      24.7    25.5    20.2    20.6    19.8   21.6
    read_dict                       24.3    25.7    22.3    23.0    21.0   22.5
    read_strdict                    22.6    24.3    19.5    21.2    18.9   21.6

Data structure write access:
    write_list                      27.1    28.5    22.5    21.6    20.0   21.6
    write_deque                     28. 7    30.1    22.7    21.8    23.5   23.2
    write_dict                      31.4    33.3    29.3    29.2    24.7   27.8
    write_strdict                   28.4    29.9    27.5    25.2    23.1   29.8

Stack (or queue) operations:
    list_append_pop                 93.4   112.7    75.4    74.2    50.8   53.9
    deque_append_pop                43.5    57.0    49.4    49.2    42.5   45.5
    deque_append_popleft            43.7    57.3    49.7    49.7    42.8   45.5

Timing loop:
    loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3

Сценарий теста отображает время в наносекундах. Тесты были выполнены на процессоре Intel Core i7-4960HQ. Код теста можно найти в репозитории по адресу «Tools/scripts/var_access_benchmark.py».

Благодарю за внимание.

Ссылка на официальное руководство Python 3.9.

Отпишитесь в комментарии, если что-то было упущено.

История развития языка Python — Python: Основы

Python: Основы

Итак, мы учимся языку Python. Для начала стоит определиться с названием. Правильно говорить «Пайтон» с ударением на первом слоге — язык назван в честь известного комедийного шоу «Летающий Цирк Монти Пайтона», т.е. Пайтон — это фамилия, а фамилию человека принято произносить так, как это делает носитель фамилии!

Ещё пара сухих фактов:

  • Первый релиз интерпретатора языка Python был представлен в далёком 1991г,
  • Автор языка — Гвидо ван Россум.

Сам по себе язык — это не то же самое, что его интерпретаторы. Но основная реализация языка — CPython — настолько распространена, что почти всегда, когда мы слышим «Python», подразумевается именно она. Наши курсы тоже будут касаться именно CPython, и это следует иметь в виду.

Самое начало

Python появился, чтобы заменить собой язык ABC, в работе над которым принимал участие будущий автор пайтона Гвидо ван Россум. Представленный в 1991 году Python версии 0.9.0 вобрал в себя многие идеи из существовавших на тот момент языков: например, система модулей была взята из языка Modula-3. Элементы функционального программирования (их мы будем изучать в следующих курсах) — функции map, filter, reduce — появились в языке тоже довольно рано, в версии 1.0.

Стоит отметить, что Пайтон изначально позиционировался как «язык для каждого», поэтому большой упор делался на читаемость кода и лаконичность синтаксиса. В версии 2.0 появились знаменитые «списковые включения» («list comprehensions»), позаимствованные из языков SETL и Haskell. В этой же версии сборщик мусора (механизм автоматического управления памятью) научился работать с циклическими структурами. С ними мы также познакомимся в последующих курсах.

Py2 vs Py3

Python как язык непрерывно развивается с самого начала времени своего существования. На данный момент в основном используются версии языка, начинающиеся с «3».

Первый релиз «третьего пайтона» (python3, py3) вышел ещё в 2008 году, но переход на это семейство версий со «второго пайтона» (python2, py2) происходил (кое-где всё ещё происходит!) «со скрипом». Дело в том, что py3 не полностью обратно совместим с кодом, написанным для py2, т.е. мы не можем просто заменить интерпретатор — нам потребуется внести определённые изменения в код! На такой шаг можно пойти, если наш проект — живой. Но с проектами, находящимися в состоянии «только поддержка» (такие проекты ещё называют legacy), такой фокус не пройдёт — обычно просто некому заниматься адаптацией. А ведь legacy-проекты — это не всегда конечные приложения, в такой ситуации могут оказаться и библиотеки. Именно из-за невозможности отказаться от нужных, но существующих в состоянии legacy библиотек многие проекты долго оставались несовместимыми с py3.

К счастью, сейчас большая часть библиотек, достаточно популярных и полезных в повседневной жизни разработчика, успешно переведена на py3, и новые проекты нужно делать именно на какой-то из версий этого семейства (сейчас рекомендуемая версия — это Python 3.7.x). Более того, py2 скоро перестанет быть безопасным для широкого использования. Дело в том, что техническая поддержка py2 — т. е. устранение уязвимостей и критических ошибок — перестала осуществляться с 2020 года. А мы ведь не хотим подвергать угрозе свои детища!

Системный Python

Работая с Python, стоит иметь в виду, что он распространён не только в виде языка, на котором пишутся конечные проекты: этот язык часто используется для автоматизации различных задач, скажем, по системному администрированию (Ansible — один из примеров написанного на Python ПО, используемого при администрировании). Поэтому python часто уже присутствует в установленных операционных системах.

Особенно велика вероятность обнаружить в системе установленный Python, когда речь идёт об ОС семейства Linux — а именно, какая-то из версий Linux будет скорее всего установлена на машину, на которой вы захотите запустить сервер своего web-приложения или многопользовательской игры (да, такие тоже пишут на Python). Тут-то и кроется проблема: установленный вместе с операционной системой Python может быть тем самым «вторым пайтоном» — такое, увы, пока встречается. И заменить его будет нельзя, ведь замена может привести к выходу из строя всей ОС.

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


Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >

Нашли опечатку или неточность?

Выделите текст, нажмите
ctrl + enter
и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

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

86 287

просмотров

Python появился в мире программирования довольно давно, но с начала 2010 годов переживает бум — он уже обогнал по популярности C, C#, Java и JavaScript. До каких пор будет сохраняться тенденция роста, когда Python заменит какой-то другой язык и почему?

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

Что делает Python популярным прямо сейчас

Популярность языка программирования можно отследить по динамике количества тегов на самом востребованном у разработчиков ресурсе — Stack Overflow. Так, судя по графику, рост Python начался с 2010 года, а стремительным он стал в 2015 году. В то время как R в течение последних нескольких лет находится на плато, а многие другие языки находятся в упадке. У такой популярности Python есть причины.

Популярность языков программирования на Stack Overflow

Время существования

Python можно смело назвать довольно старым языком — он появился в 1991 году, то есть практически 30 лет назад. За это время он постепенно собрал вокруг себя большое сообщество.

Если у вас появится какая-то проблема с этим языком, то решить ее, скорее всего, получится примитивным поиском в Google — наверняка кто-то уже опубликовал мануал с алгоритмом и примером кода.

Простота

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

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

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

Код Python довольно просто читать. Просто сравните синтаксис Python и C++.

Универсальность

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

  • Для многомерных массивов и высокоуровневых матриц используйте NumPy.
  • Для расчетов в инженерном деле подойдет SciPy.
  • Для исследования, анализа и манипулирования данными попробуйте Pandas.
  • Для работы с искусственным интеллектом изучайте Scikit-Learn.

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

Недостатки Python, которые могут уничтожить этот язык

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

Скорость

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

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

Конечно, вы можете возразить — кого сейчас волнует эта скорость, ведь компьютеры и серверы стали такими мощными, что в итоге «медленно» означает выбор между загрузкой приложения за 0,01 секунды или 0,001 секунды. Действительно, конечному пользователю нет разницы.

Области видимости

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

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

Лямбда-функции

Несмотря на всю гибкость, использование лямбд в Python ограничено. Они могут быть только выражениями (expressions), но не инструкциями (statements). С другой стороны, объявления переменных и statements и есть инструкции. Проще говоря, добавление statements сделает лямбду многострочной, а синтаксис Python не позволяет так сделать.

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

Пробелы

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

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

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

Пробелы делают код более читаемым, но менее удобным в сопровождении

Irvan Smith на Unsplash

Мобильная разработка

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

В Python такая возможность как бы есть — пакет под название Kivy. Но нужно учитывать, что Python не был создан для мобильных устройств. Использовать его можно, результат будет даже приемлемым, но зачем, когда можно взять более подходящий язык, созданный для разработки мобильных приложений. Например, фреймворки для кроссплатформенной мобильной разработки: React Native, Flutter, Iconic и Cordova.

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

Ошибки во время выполнения (Runtime Errors)

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

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

Что может заменить Python в будущем

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

  • Rust — в нем так же, как и в Python, переменная не может быть случайно перезаписана. Но за счет концепции владения и заимствования в Rust решена проблема с производительностью. Кстати, именно Rust разработчики называют самым любимым языком.
  • Go стоит рассматривать начинающим разработчикам. Он довольно прост в освоении, поддерживать код тоже не трудно. Плюс разработчики на GO сейчас одни из самых высокооплачиваемых.
  • Julia подходит для крупномасштабных технических вычислений. Раньше для этого нужно было использовать Python или Matlab плюс библиотеки C++. После выхода Julia потребность в жонглировании языками отпала.

На рынке есть масса других полезных языков, но именно эти три закрывают слабые места Python. Rust, Go и Julia подходят для инновационных технологий, особенно для искусственного интеллекта. Сейчас их доля на рынке еще невелика, судя по тегам Stack Overflow, но тенденция роста уже есть.

Динамика роста на Stack Overflow

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

Какой из языков это будет — Rust, Go, Julia или новый язык будущего — пока трудно сказать Но учитывая проблемы с производительностью, которые являются основополагающими в архитектуре Python, каждый из новых языков найдет свое место.

Что еще почитать по теме:

Начиная с 3.9, Python будут обновлять раз в год, а не в полтора, как раньше

Организация Python Software Foundation выпустила четвертую бета-версию языка программирования Python 3.9; финальный релиз должен появиться в октябре. Отныне по предложению сообщества разработчиков очередные версии языка будут выходить каждый год, а не полтора, как до сих пор.

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

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

Что касается функциональности, в версии 3.9 появились более удобные функции удаления начала и окончания строк, а также операторы объединения словарей и добавления содержимого одного словаря в другой.

Расширены возможности указания типов переменных (type hinting). Python по-прежнему не планируется превращать в язык со статической типизацией — соответствующие средства в нем добавляют в основном для инструментов контроля качества кода и для удобства программистов.

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

Поделитесь материалом с коллегами и друзьями

Настройка приложений Python в Linux — Azure App Service



  • Чтение занимает 19 мин

В этой статье

В этой статье описывается, как Служба приложений Azure запускает приложения Python, как перенести существующие приложения в Azure, а также как настроить поведение Службы приложений при необходимости.This article describes how Azure App Service runs Python apps, how you can migrate existing apps to Azure, and how you can customize the behavior of App Service when needed. Приложения Python нужно развертывать со всеми необходимыми модулями pip.Python apps must be deployed with all the required pip modules.

Механизм развертывания Службы приложений автоматически активирует виртуальное окружение и запускает команду pip install -r requirements.txt при развертывании репозитория Git или ZIP-пакета.The App Service deployment engine automatically activates a virtual environment and runs pip install -r requirements.txt for you when you deploy a Git repository, or a zip package.

Это руководство содержит основные понятия и инструкции для разработчиков Python, которые используют встроенный контейнер Linux в Службе приложений.This guide provides key concepts and instructions for Python developers who use a built-in Linux container in App Service. Если вы раньше не использовали Службу приложений Azure, сначала ознакомьтесь с кратким руководством по Python и учебником по использованию Python с PostgreSQL.If you’ve never used Azure App Service, first follow the Python quickstart and Python with PostgreSQL tutorial.

Для настройки можно использовать портал Azure или Azure CLI.You can use either the Azure portal or the Azure CLI for configuration:

Настройка версии PythonConfigure Python version

  • Портал Azure. Воспользуйтесь вкладкой Общие параметры на странице Конфигурация, как описано в разделе Настройка общих параметров для контейнеров Linux.Azure portal: use the General settings tab on the Configuration page as described on Configure general settings for Linux containers.

  • Azure CLI.Azure CLI:

    • Отобразите текущую версию Python с помощью команды az webapp config show.Show the current Python version with az webapp config show:

      az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
      

      Замените <resource-group-name> и <app-name> именами, подходящими для вашего веб-приложения.Replace <resource-group-name> and <app-name> with the names appropriate for your web app.

    • Задайте версию Python с помощью команды az webapp config set.Set the Python version with az webapp config set

      az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PYTHON|3.7"
      
    • Отобразите все версии Python, поддерживаемые в Службе приложений Azure, с помощью команды az webapp list-runtimes.Show all Python versions that are supported in Azure App Service with az webapp list-runtimes:

      az webapp list-runtimes --linux | grep PYTHON
      

Вы можете запустить неподдерживаемую версию Python, выполнив сборку собственного образа контейнера.You can run an unsupported version of Python by building your own container image instead. Дополнительные сведения см. в статье об использовании пользовательского образа Docker.For more information, see use a custom Docker image.

Настройка автоматизации сборкиCustomize build automation

При развертывании приложения с помощью пакетов Git или ZIP система сборки Службы приложений, именуемая Oryx, выполняет следующие действия:App Service’s build system, called Oryx, performs the following steps when you deploy your app using Git or zip packages:

  1. Запускает пользовательский скрипт предварительной сборки, если он задан с помощью параметра PRE_BUILD_COMMAND.Run a custom pre-build script if specified by the PRE_BUILD_COMMAND setting. (Этот скрипт может вызывать другие скрипты Python и Node.js, команды pip и npm, а также YARN и прочие средства на основе Node, например yarn install и yarn build.)(The script can itself run other Python and Node.js scripts, pip and npm commands, and Node-based tools like yarn, for example, yarn install and yarn build.)

  2. Выполните pip install -r requirements.txt.Run pip install -r requirements.txt. В корневой папке проекта должен присутствовать файл requirements.txt.The requirements.txt file must be present in the project’s root folder. В противном случае в процессе сборки будет выведено сообщение об ошибке: Could not find setup.py or requirements.txt; Not running pip install (Не удалось найти setup.py или requirements.txt. Не запущена установка pip).Otherwise, the build process reports the error: «Could not find setup.py or requirements.txt; Not running pip install.»

  3. Если manage.py находится в корне репозитория (что характерно для приложения Django), запускает manage.py collectstatic.If manage.py is found in the root of the repository (indicating a Django app), run manage.py collectstatic. Однако если для параметра DISABLE_COLLECTSTATIC задано значение true, этот шаг пропускается.However, if the DISABLE_COLLECTSTATIC setting is true, this step is skipped.

  4. Запускает пользовательский скрипт последующей сборки, если он задан с помощью параметра POST_BUILD_COMMAND.Run custom post-build script if specified by the POST_BUILD_COMMAND setting. (Этот скрипт также может вызывать другие скрипты Python и Node.js, команды pip и npm и средства на основе Node.)(Again, the script can run other Python and Node.js scripts, pip and npm commands, and Node-based tools.)

По умолчанию параметры PRE_BUILD_COMMAND, POST_BUILD_COMMAND и DISABLE_COLLECTSTATIC пусты.By default, the PRE_BUILD_COMMAND, POST_BUILD_COMMAND, and DISABLE_COLLECTSTATIC settings are empty.

  • Чтобы отключить выполнение collectstatic при создании приложений Django, установите для параметра DISABLE_COLLECTSTATIC значение true.To disable running collectstatic when building Django apps, set the DISABLE_COLLECTSTATIC setting to true.

  • Чтобы выполнить команды перед сборкой, включите в параметр PRE_BUILD_COMMAND такую команду, как echo Pre-build command, или путь к файлу скрипта относительно корневого каталога проекта, например scripts/prebuild.sh.To run pre-build commands, set the PRE_BUILD_COMMAND setting to contain either a command, such as echo Pre-build command, or a path to a script file relative to your project root, such as scripts/prebuild.sh. Во всех командах должны использоваться относительные пути к корневой папке проекта.All commands must use relative paths to the project root folder.

  • Чтобы выполнить команды после сборки, включите в параметр POST_BUILD_COMMAND такую команду, как echo Post-build command, или путь к файлу скрипта относительно корневого каталога проекта, например scripts/postbuild.sh.To run post-build commands, set the POST_BUILD_COMMAND setting to contain either a command, such as echo Post-build command, or a path to a script file relative to your project root, such as scripts/postbuild.sh. Во всех командах должны использоваться относительные пути к корневой папке проекта.All commands must use relative paths to the project root folder.

Дополнительные параметры для настройки автоматизации сборки см. в статье Конфигурация Oryx.For additional settings that customize build automation, see Oryx configuration.

Доступ к журналам сборки и развертывания описан в разделе Доступ к журналам развертывания.To access the build and deployment logs, see Access deployment logs.

Дополнительные сведения о том, как Служба приложений выполняет и создает приложения Python в Linux, см. в статье о том, как Oryx выявляет и создает приложения Python.For more information on how App Service runs and builds Python apps in Linux, see How Oryx detects and builds Python apps.

Примечание

Параметры PRE_BUILD_SCRIPT_PATH и POST_BUILD_SCRIPT_PATH идентичны PRE_BUILD_COMMAND и POST_BUILD_COMMAND и поддерживаются из соображений совместимости с прежними версиями.The PRE_BUILD_SCRIPT_PATH and POST_BUILD_SCRIPT_PATH settings are identical to PRE_BUILD_COMMAND and POST_BUILD_COMMAND and are supported for legacy purposes.

Если параметр с именем SCM_DO_BUILD_DURING_DEPLOYMENT содержит значение true или 1, он запускает сборку в Oryx во время развертывания.A setting named SCM_DO_BUILD_DURING_DEPLOYMENT, if it contains true or 1, triggers an Oryx build happens during deployment. Этот параметр имеет значение true при развертывании с помощью Git, команды Azure CLI, az webapp up и Visual Studio Code.The setting is true when deploying using git, the Azure CLI command az webapp up, and Visual Studio Code.

Примечание

Во всех скриптах, выполняемых до и после сборки, следует всегда использовать относительные пути, поскольку контейнер сборки, в котором выполняется Oryx, отличается от контейнера среды выполнения, в котором выполняется приложение.Always use relative paths in all pre- and post-build scripts because the build container in which Oryx runs is different from the runtime container in which the app runs. Никогда не полагайтесь на точное размещение папки проекта приложения в контейнере (например, размещение в папке site/wwwroot).Never rely on the exact placement of your app project folder within the container (for example, that it’s placed under site/wwwroot).

Миграция существующих приложений в AzureMigrate existing applications to Azure

Существующие веб-приложения можно повторно развернуть в Azure следующим образом:Existing web applications can be redeployed to Azure as follows:

  1. Исходный репозиторий. Сохраните исходный код в подходящем репозитории, например GitHub. Позже при выполнении этого процесса это позволит настроить непрерывное развертывание.Source repository: Maintain your source code in a suitable repository like GitHub, which enables you to set up continuous deployment later in this process.

    1. Файл requirements.txt должен находиться в корне репозитория, чтобы Служба приложений автоматически устанавливала необходимые пакеты.Your requirements.txt file must be at the root of your repository for App Service to automatically install the necessary packages.
  2. База данных:  — Если приложение зависит от базы данных, подготовьте необходимые ресурсы в Azure.Database: If you app depends on a database, provision the necessary resources on Azure as well. См. Учебник. Развертывание веб-приложения Django с помощью PostgreSQL с примером в разделе о создании базы данных.See Tutorial: Deploy a Django web app with PostgreSQL — create a database for an example.

  3. Ресурсы Службы приложений. Создайте группу ресурсов, план и веб-приложение службы приложений для размещения приложения.App service resources: Create a resource group, App Service Plan, and App Service web app to host your application. Это можно сделать, выполнив начальное развертывание кода с помощью команды Azure CLI az webapp up, как показано в учебнике по развертыванию веб-приложения Django с помощью PostgreSQL в разделе «Развертывание кода в Службе приложений Azure».You can most easily do this by doing an initial deployment of your code through the Azure CLI command az webapp up, as shown on Tutorial: Deploy a Django web app with PostgreSQL — deploy the code. Замените имена группы ресурсов, плана службы приложений и веб-приложения подходящими именами для вашего приложения.Replace the names of the resource group, App Service Plan, and the web app to be more suitable for your application.

  4. Переменные среды. Если для приложения необходимы переменные среды, создайте эквивалентные параметры приложения Службы приложений.Environment variables: If your application requires any environment variables, create equivalent App Service application settings. Эти параметры Службы приложений отображаются в коде в виде переменных среды, как описано в разделе Доступ к параметрам приложения в виде переменных среды.These App Service settings appear to your code as environment variables, as described on Access environment variables.

  5. Запуск приложения. Ознакомьтесь с разделом Процесс запуска контейнера далее в этой статье, чтобы понять, как Служба приложений пытается запустить приложение.App startup: Review the section, Container startup process later in this article to understand how App Service attempts to run your app. По умолчанию Служба приложений использует веб-сервер Gunicorn, который должен найти объект приложения или папку wsgi.py.App Service uses the Gunicorn web server by default, which must be able to find your app object or wsgi.py folder. При необходимости можно настроить команду запуска.If needed, you can Customize the startup command.

  6. Непрерывное развертывание. Настройте непрерывное развертывание. Если вы используете развертывание Azure Pipelines или Kudu, ознакомьтесь со статьей Непрерывное развертывание в Службе приложений Azure. Если вы используете GitHub Actions, ознакомьтесь со статьей Развертывание в Службе приложений с помощью GitHub Actions.Continuous deployment: Set up continuous deployment, as described on Continuous deployment to Azure App Service if using Azure Pipelines or Kudu deployment, or Deploy to App Service using GitHub Actions if using GitHub actions.

  7. Настраиваемые действия. Для выполнения действий (например, перенос базы данных Django) в контейнере Службы приложений, в котором размещено приложение, подключитесь к контейнеру по протоколу SSH.Custom actions: To perform actions within the App Service container that hosts your app, such as Django database migrations, you can connect to the container through SSH. Пример выполнения переноса базы данных Django см. в учебнике по развертыванию веб-приложения Django с помощью PostgreSQL в разделе «Перенос базы данных».For an example of running Django database migrations, see Tutorial: Deploy a Django web app with PostgreSQL — run database migrations.

    • При использовании непрерывного развертывания эти действия можно выполнить с помощью команд после сборки, как описано выше в разделе Настройка автоматизации сборки.When using continuous deployment, you can perform those actions using post-build commands as described earlier under Customize build automation.

Выполнив действия, вы сможете зафиксировать изменения в исходном репозитории и автоматически развернуть эти обновления в Службе приложений.With these steps completed, you should be able to commit changes to your source repository and have those updates automatically deployed to App Service.

Параметры рабочей среды для приложений DjangoProduction settings for Django apps

В такой рабочей среде, как Служба приложений Azure, для приложений Django необходимо придерживаться контрольного списка развертывания (djangoproject.com).For a production environment like Azure App Service, Django apps should follow Django’s Deployment checklist (djangoproject.com).

В следующей таблице описаны параметры рабочей среды, относящиеся к Azure.The following table describes the production settings that are relevant to Azure. Эти параметры определяются в файле setting.py приложения.These settings are defined in the app’s setting.py file.

Настройка DjangoDjango settingИнструкции для AzureInstructions for Azure
SECRET_KEYСохраните значение в настройках Службы приложений, как описано в разделе Доступ к параметрам приложения в виде переменных среды.Store the value in an App Service setting as described on Access app settings as environment variables. Можно также сохранить значение в качестве секрета в Azure Key Vault.You can alternately store the value as a «secret» in Azure Key Vault.
DEBUGСоздайте параметр DEBUG в Службе приложений со значением 0 (false), а затем загрузите значение как переменную среды.Create a DEBUG setting on App Service with the value 0 (false), then load the value as an environment variable. В среде разработки создайте переменную среды DEBUG со значением 1 (true).In your development environment, create a DEBUG environment variable with the value 1 (true).
ALLOWED_HOSTSВ рабочей среде для Django требуется включить URL-адрес приложения в массив ALLOWED_HOSTS в settings.py.In production, Django requires that you include app’s URL in the ALLOWED_HOSTS array of settings.py. Этот URL-адрес можно получить во время выполнения с помощью кода os.environ['WEBSITE_HOSTNAME'].You can retrieve this URL at runtime with the code, os.environ['WEBSITE_HOSTNAME']. Служба приложений автоматически задает в качестве значения переменной среды WEBSITE_HOSTNAME URL-адрес приложения.App Service automatically sets the WEBSITE_HOSTNAME environment variable to the app’s URL.
DATABASESОпределите параметры в Службе приложений для подключения к базе данных и загрузите их в виде переменных среды, чтобы заполнить словарь DATABASES.Define settings in App Service for the database connection and load them as environment variables to populate the DATABASES dictionary. Можно также сохранить значения (особенно имя пользователя и пароль) в виде секретов Azure Key Vault.You can alternately store the values (especially the username and password) as Azure Key Vault secrets.

Выдача статических файлов для приложений DjangoServe static files for Django apps

Если веб-приложение Django содержит статические файлы для интерфейса, сначала выполните инструкции из раздела об управлении статическими файлами в документации по Django.If your Django web app includes static front-end files, first follow the instructions on Managing static files in the Django documentation.

Для Службы приложений нужно внести следующие изменения:For App Service, you then make the following modifications:

  1. Рекомендуем применить переменные среды (при локальной разработке) и параметры приложения (при развертывании в облаке) для динамической передачи значений STATIC_URL и STATIC_ROOT в Django.Consider using environment variables (for local development) and App Settings (when deploying to the cloud) to dynamically set the Django STATIC_URL and STATIC_ROOT variables. Пример:For example:

    STATIC_URL = os.environ.get("DJANGO_STATIC_URL", "/static/")
    STATIC_ROOT = os.environ.get("DJANGO_STATIC_ROOT", "./static/")    
    

    DJANGO_STATIC_URL и DJANGO_STATIC_ROOT можно изменять по мере необходимости для локальных и облачных сред.DJANGO_STATIC_URL and DJANGO_STATIC_ROOT can be changed as necessary for your local and cloud environments. Например, если в процессе сборки статических файлов они помещаются в папку с именем django-static, вы можете задать для DJANGO_STATIC_URL значение /django-static/ вместо значения по умолчанию.For example, if the build process for your static files places them in a folder named django-static, then you can set DJANGO_STATIC_URL to /django-static/ to avoid using the default.

  2. Если у вас есть выполняемый перед сборкой скрипт, с помощью которого создаются статические файлы в другой папке, включите эту папку в переменную Django STATICFILES_DIRS, чтобы процесс collectstatic в Django смог их найти.If you have a pre-build script that generates static files in a different folder, include that folder in the Django STATICFILES_DIRS variable so that Django’s collectstatic process finds them. Например, если yarn build выполняется в папке для внешнего интерфейса, а YARN создает папку build/static со статическими файлами, включите эту папку следующим образом:For example, if you run yarn build in your front-end folder, and yarn generates a build/static folder containing static files, then include that folder as follows:

    FRONTEND_DIR = "path-to-frontend-folder" 
    STATICFILES_DIRS = [os.path.join(FRONTEND_DIR, 'build', 'static')]    
    

    Здесь FRONTEND_DIR применяется, чтобы создать путь к месту запуска средства сборки (в нашем примере это YARN).Here, FRONTEND_DIR, to build a path to where a build tool like yarn is run. Как обычно, вы можете использовать переменную среды и параметр приложения на свое усмотрение.You can again use an environment variable and App Setting as desired.

  3. Добавьте whitenoise в файл requirements.txt.Add whitenoise to your requirements.txt file. Пакет Python Whitenoise (whitenoise.evans.io) упрощает обработку собственных статических файлов рабочего приложения Django.Whitenoise (whitenoise.evans.io) is a Python package that makes it simple for a production Django app to serve it’s own static files. Whitenoise обслуживает файлы в той папке, имя которой указано в переменной Django STATIC_ROOT.Whitenoise specifically serves those files that are found in the folder specified by the Django STATIC_ROOT variable.

  4. В файле settings.py добавьте для Whitenoise следующую строку:In your settings.py file, add the following line for Whitenoise:

    STATICFILES_STORAGE = ('whitenoise.storage.CompressedManifestStaticFilesStorage')
    
  5. Также включите Whitenoise в списки MIDDLEWARE и INSTALLED_APPS:Also modify the MIDDLEWARE and INSTALLED_APPS lists to include Whitenoise:

    MIDDLEWARE = [                                                                   
        'django.middleware.security.SecurityMiddleware',
        # Add whitenoise middleware after the security middleware                             
        'whitenoise.middleware.WhiteNoiseMiddleware',
        # Other values follow
    ]
    
    INSTALLED_APPS = [
        "whitenoise.runserver_nostatic",
        # Other values follow
    ]
    

Характеристики контейнераContainer characteristics

При развертывании в Службе приложений приложения Python выполняются в контейнере Linux Docker, который определен в этом репозитории GitHub.When deployed to App Service, Python apps run within a Linux Docker container that’s defined in the App Service Python GitHub repository. Конфигурации образов можно найти в каталогах для конкретных версий.You can find the image configurations inside the version-specific directories.

Этот контейнер отличается следующими характеристиками.This container has the following characteristics:

  • Приложения запускаются с помощью HTTP-сервера Gunicorn WSGI, используя дополнительные аргументы --bind=0.0.0.0 --timeout 600.Apps are run using the Gunicorn WSGI HTTP Server, using the additional arguments --bind=0.0.0.0 --timeout 600.

  • По умолчанию базовый образ контейнера включает в себя только веб-платформу Flask, но контейнер также поддерживает другие платформы, совместимые с WSGI и Python 3.6 и более новых версий, например Django.By default, the base container image includes only the Flask web framework, but the container supports other frameworks that are WSGI-compliant and compatible with Python 3.6+, such as Django.

  • Чтобы установить дополнительные пакеты, такие как Django, создайте файл requirements.txt в корневой папке проекта, в котором будут заданы прямые зависимости.To install additional packages, such as Django, create a requirements.txt file in the root of your project that specifies your direct dependencies. Тогда Служба приложений автоматически установит эти зависимости при развертывании проекта.App Service then installs those dependencies automatically when you deploy your project.

    Для установки зависимостей файл requirements.txt должен находиться в корневой папке проекта.The requirements.txt file must be in the project root for dependencies to be installed. В противном случае в процессе сборки будет выведено сообщение об ошибке: Could not find setup.py or requirements.txt; Not running pip install (Не удалось найти setup.py или requirements.txt. Не запущена установка pip).Otherwise, the build process reports the error: «Could not find setup.py or requirements.txt; Not running pip install.» В случае этой ошибки проверьте расположение файла требований.If you encounter this error, check the location of your requirements file.

  • Служба приложений автоматически определяет переменную среды с именем WEBSITE_HOSTNAME, используя URL-адрес веб-приложения, например msdocs-hello-world.azurewebsites.net.App Service automatically defines an environment variable named WEBSITE_HOSTNAME with the web app’s URL, such as msdocs-hello-world.azurewebsites.net. Она также определяет WEBSITE_SITE_NAME, используя имя приложения, например msdocs-hello-world.It also defines WEBSITE_SITE_NAME with the name of your app, such as msdocs-hello-world.

  • npm и Node.js устанавливаются в контейнере, что позволяет запускать YARN и другие средства сборки на основе Node.npm and Node.js are installed in the container so you can run Node-based build tools, such as yarn.

Процесс запуска контейнераContainer startup process

Во время запуска служба приложений под управлением контейнера Linux выполнит следующие действия.During startup, the App Service on Linux container runs the following steps:

  1. Используйте пользовательскую команду запуска, если предоставлена такая возможность.Use a custom startup command, if provided.
  2. Проверьте наличие приложения Django и запустите для него сервер Gunicorn, если он обнаружен.Check for the existence of a Django app, and launch Gunicorn for it if detected.
  3. Проверьте наличие приложения Flask и запустите для него сервер Gunicorn, если он обнаружено.Check for the existence of a Flask app, and launch Gunicorn for it if detected.
  4. Если другие приложения не найдены, запускается приложение по умолчанию, встроенное в контейнер.If no other app is found, start a default app that’s built into the container.

В следующих разделах приведены дополнительные сведения о каждом параметре.The following sections provide additional details for each option.

Приложение DjangoDjango app

Для приложений Django служба приложений выполняет поиск файла с именем wsgi.py в вашем коде приложения, а затем запускает Gunicorn, используя следующую команду:For Django apps, App Service looks for a file named wsgi.py within your app code, and then runs Gunicorn using the following command:

# <module> is the name of the folder that contains wsgi.py
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi

Если необходим более точный контроль над командой запуска, используйте пользовательские команды запуска, замените <module> именем папки, содержащей wsgi.py, и добавьте аргумент --chdir, если этот модуль расположен не в корневой папке проекта.If you want more specific control over the startup command, use a custom startup command, replace <module> with the name of folder that contains wsgi.py, and add a --chdir argument if that module is not in the project root. Например, если wsgi.py находится во вложенной папке knboard/backend/config корневой папки проекта, используйте аргументы --chdir knboard/backend config.wsgi.For example, if your wsgi.py is located under knboard/backend/config from your project root, use the arguments --chdir knboard/backend config.wsgi.

Чтобы включить ведение журнала в рабочей среде, добавьте параметры --access-logfile и --error-logfile, как показано в примерах пользовательских команд запуска.To enable production logging, add the --access-logfile and --error-logfile parameters as shown in the examples for custom startup commands.

Приложение FlaskFlask app

Для Flask Служба приложений выполняет поиск файла с именем application.py или app.py и запускает Gunicorn следующим образом:For Flask, App Service looks for a file named application.py or app.py and starts Gunicorn as follows:

# If application.py
gunicorn --bind=0.0.0.0 --timeout 600 application:app

# If app.py
gunicorn --bind=0.0.0.0 --timeout 600 app:app

Если модуль основного приложения содержится в другом файле, используйте другое имя для объекта приложения или, если вы хотите указать дополнительные аргументы для Gunicorn, используйте пользовательские команды запуска.If your main app module is contained in a different file, use a different name for the app object, or you want to provide additional arguments to Gunicorn, use a custom startup command.

Поведение по умолчаниюDefault behavior

Если в Службе приложений не найдена пользовательская команда, приложение Django или Flask, тогда она запускает приложение по умолчанию с разрешением только для чтения, расположенное в папке opt/defaultsite (как показано на следующем изображении).If the App Service doesn’t find a custom command, a Django app, or a Flask app, then it runs a default read-only app, located in the opt/defaultsite folder and shown in the following image.

Если вы уже развернули код, но по-прежнему видите приложение по умолчанию, перейдите к разделу устранения неполадок (Приложение не отображается).If you deployed code and still see the default app, see Troubleshooting — App doesn’t appear.

Если вы ожидаете, что вместо приложения по умолчанию должно отображаться развернутое приложение, перейдите к разделу устранения неполадок (Приложение не отображается).Again, if you expect to see a deployed app instead of the default app, see Troubleshooting — App doesn’t appear.

Настройка команды запускаCustomize startup command

Как упоминалось ранее в этой статье, вы можете задать параметры конфигурации для Gunicorn с помощью файла gunicorn.conf.py в корневом каталоге проекта, как описано в обзоре конфигурации Gunicorn.As noted earlier in this article, you can provide configuration settings for Gunicorn through a gunicorn.conf.py file in the project root, as described on Gunicorn configuration overview.

Если такой конфигурации недостаточно, для управления поведением при запуске контейнера можно указать в файле команд запуска пользовательскую команду запуска или несколько команд.If such configuration is not sufficient, you can control the container’s startup behavior by providing either a custom startup command or multiple commands in a startup command file. Для файла команд запуска можно использовать любое выбранное имя, например startup.sh, startup.cmd, startup.txt и т. д.A startup command file can use whatever name you choose, such as startup.sh, startup.cmd, startup.txt, and so on.

Во всех командах должны использоваться относительные пути к корневой папке проекта.All commands must use relative paths to the project root folder.

Чтобы указать команду или файл команд запуска, выполните следующие действия.To specify a startup command or command file:

  • Портал Azure. Перейдите на страницу Конфигурация приложения, а затем выберите Общие параметры.Azure portal: select the app’s Configuration page, then select General settings. В поле Команда запуска вставьте полный текст команды запуска либо укажите имя файла команд запуска.In the Startup Command field, place either the full text of your startup command or the name of your startup command file. Затем нажмите кнопку Сохранить, чтобы применить изменения.Then select Save to apply the changes. Сведения о контейнерах Linux см. в разделе Настройка общих параметров.See Configure general settings for Linux containers.

  • Azure CLI. Используйте команду az webapp config set с параметром --startup-file, чтобы задать команду или файл запуска.Azure CLI: use the az webapp config set command with the --startup-file parameter to set the startup command or file:

    az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
    

    Замените <custom-command> полным текстом команды запуска или именем файла команд запуска.Replace <custom-command> with either the full text of your startup command or the name of your startup command file.

Служба приложений игнорирует все ошибки, происходящие при обработке пользовательской команды или файла запуска, и продолжает процесс запуска путем поиска приложений Django и Flask.App Service ignores any errors that occur when processing a custom startup command or file, then continues its startup process by looking for Django and Flask apps. Если поведение отличается от ожидаемого, проверьте, нет ли ошибок в команде или файле запуска, и убедитесь, что файл команд запуска развернут в Службе приложений вместе с кодом вашего приложения.If you don’t see the behavior you expect, check that your startup command or file is error-free and that a startup command file is deployed to App Service along with your app code. Дополнительные сведения можно также почерпнуть из журналов диагностики.You can also check the Diagnostic logs for additional information. Просмотрите также страницу Диагностика и решение проблем на портале Azure.Also check the app’s Diagnose and solve problems page on the Azure portal.

Примеры команд запускаExample startup commands

  • Добавление аргументов Gunicorn. В следующем примере в командную строку Gunicorn для запуска приложения Django добавляется --workers=4.Added Gunicorn arguments: The following example adds the --workers=4 to a Gunicorn command line for starting a Django app:

    # <module-path> is the relative path to the folder that contains the module
    # that contains wsgi.py; <module> is the name of the folder containing wsgi.py.
    gunicorn --bind=0.0.0.0 --timeout 600 --workers=4 --chdir <module_path> <module>.wsgi
    

    Дополнительные сведения см. в статье Running Gunicorn (Запуск Gunicorn) (docs.gunicorn.org).For more information, see Running Gunicorn (docs.gunicorn.org).

  • Включение ведения журнала для Django в рабочей среде. Добавьте в командную строку аргументы --access-logfile '-' и --error-logfile '-'.Enable production logging for Django: Add the --access-logfile '-' and --error-logfile '-' arguments to the command line:

    # '-' for the log files means stdout for --access-logfile and stderr for --error-logfile.
    gunicorn --bind=0.0.0.0 --timeout 600 --workers=4 --chdir <module_path> <module>.wsgi --access-logfile '-' --error-logfile '-'
    

    Эти журналы будут отображаться в потоке журналов Службы приложений.These logs will appear in the App Service log stream.

    Дополнительные сведения см. в разделе о ведении журналов Gunicorn (docs.gunicorn.org).For more information, see Gunicorn logging (docs.gunicorn.org).

  • Настраиваемый основной модуль Flask. По умолчанию Служба приложений предполагает, что основным модулем приложения Flask является application.py или app.py.Custom Flask main module: by default, App Service assumes that a Flask app’s main module is application.py or app.py. Если у основного модуля другое имя, необходимо настроить команду запуска.If your main module uses a different name, then you must customize the startup command. Например, если вы используете приложение Flask, основным модулем которого является hello.py, а объект приложения Flask в этом файле имеет имя myapp, команда будет выглядеть следующим образом:For example, yf you have a Flask app whose main module is hello.py and the Flask app object in that file is named myapp, then the command is as follows:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    

    Если главный модуль находится в подпапке, например website, укажите эту подпапку с помощью аргумента --chdir:If your main module is in a subfolder, such as website, specify that folder with the --chdir argument:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir website hello:myapp
    
  • Использование сервера, отличного от Gunicorn. Чтобы использовать другой веб-сервер, например aiohttp, используйте соответствующую команду в качестве команды запуска или в файле команд запуска.Use a non-Gunicorn server: To use a different web server, such as aiohttp, use the appropriate command as the startup command or in the startup command file:

    python3.7 -m aiohttp.web -H localhost -P 8080 package.module:init_func
    

Доступ к параметрам приложения в виде переменных средыAccess app settings as environment variables

Параметры приложения — это значения, хранящиеся в облаке специально для вашего приложения, как описано в разделе Настройка параметров приложения.App settings are values stored in the cloud specifically for your app as described on Configure app settings. Эти параметры доступны для кода приложения в виде переменных среды и вызываются с помощью стандартного шаблона os.environ.These settings are available to your app code as environment variables and accessed using the standard os.environ pattern.

Например, если вы создали параметр приложения с именем DATABASE_SERVER, следующий код извлечет значение этого параметра.For example, if you’ve created app setting called DATABASE_SERVER, the following code retrieves that setting’s value:

db_server = os.environ['DATABASE_SERVER']

Обнаружение сеанса HTTPSDetect HTTPS session

В Службе приложений завершение SSL-запросов (wikipedia.org) происходит в подсистеме балансировки нагрузки сети, поэтому все HTTPS-запросы достигают вашего приложения в виде незашифрованных HTTP-запросов.In App Service, SSL termination (wikipedia.org) happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. Если логика вашего приложения проверяет, зашифрованы ли пользовательские запросы, проверяйте заголовок X-Forwarded-Proto.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

if 'X-Forwarded-Proto' in request.headers and request.headers['X-Forwarded-Proto'] == 'https':
# Do something when HTTPS is used

Популярные веб-платформы позволяют получить доступ к информации X-Forwarded-* в стандартном шаблоне приложения.Popular web frameworks let you access the X-Forwarded-* information in your standard app pattern. В CodeIgniter функция is_https() по умолчанию проверяет значение X_FORWARDED_PROTO.In CodeIgniter, the is_https() checks the value of X_FORWARDED_PROTO by default.

Доступ к журналам диагностикиAccess diagnostic logs

Можно получить доступ к журналам консоли, которые были созданы в контейнере.You can access the console logs generated from inside the container.

Сначала включите ведение журнала контейнера, выполнив следующую команду:First, turn on container logging by running the following command:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Замените <app-name> и <resource-group-name> именами, подходящими для вашего веб-приложения.Replace <app-name> and <resource-group-name> with the names appropriate for your web app.

После включения ведения журнала контейнера, выполните следующую команду, чтобы просмотреть поток данных журнала.Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.If you don’t see console logs immediately, check again in 30 seconds.

Чтобы остановить потоковую передачу журналов, нажмите клавиши CTRL+C.To stop log streaming at any time, type Ctrl+C.

Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files in a browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Чтобы получить доступ к журналам с помощью портала Azure, в приложении в меню слева выберите Мониторинг > Поток журналов.To access logs through the Azure portal, select Monitoring > Log stream on the left side menu for your app.

Доступ к журналам развертыванияAccess deployment logs

При развертывании кода Служба приложений выполняет процесс сборки, описанный ранее в разделе Настройка автоматизации сборки.When you deploy your code, App Service performs the build process described earlier in the section Customize build automation. Так как сборка выполняется в собственном контейнере, журналы сборки хранятся отдельно от журналов диагностики приложения.Because the build runs in its own container, build logs are stored separately from the app’s diagnostic logs.

Чтобы открыть журналы развертывания, выполните указанные ниже действия:Use the following steps to access the deployment logs:

  1. На портале Azure для веб-приложения выберите элементы Развертывание > Центр развертывания (предварительная версия) в меню слева.On the Azure portal for your web app, select Deployment > Deployment Center (Preview) on the left menu.
  2. На вкладке Журналы выберите Идентификатор фиксации для последней фиксации.On the Logs tab, select the Commit ID for the most recent commit.
  3. На появившейся странице Подробные сведения журнала выберите ссылку Показать журналы… , которая отображается рядом с пунктом «Выполнение сборки oryx…».On the Log details page that appears, select the Show Logs… link that appears next to «Running oryx build…».

В этих журналах отображаются проблемы со сборкой, такие как неверные зависимости в файле requirements.txt или ошибки в скриптах, выполняемых до или после сборки.Build issues such as incorrect dependencies in requirements.txt and errors in pre- or post-build scripts will appear in these logs. Также здесь появятся ошибки, если имя файла требований отличается от requirements.txt или он размещен не в корневой папке проекта.Errors also appear if your requirements file is not exactly named requirements.txt or does not appear in the root folder of your project.

Открытие сеанса SSH в браузереOpen SSH session in browser

Чтобы открыть прямой сеанс SSH с контейнером, необходимо запустить приложение.To make open a direct SSH session with your container, your app should be running.

Вставьте следующий URL-адрес в браузер и замените <app-name> именем вашего приложения:Paste the following URL into your browser and replace <app-name> with your app name:

https://<app-name>.scm.azurewebsites.net/webssh/host

Если вы не прошли аутентификацию, это потребуется сделать, подключившись с помощью подписки Azure.If you’re not yet authenticated, you’re required to authenticate with your Azure subscription to connect. После выполнения проверки подлинности отобразится оболочка в браузере. Здесь можно запускать команды внутри контейнера.Once authenticated, you see an in-browser shell, where you can run commands inside your container.

Примечание

Любые изменения, внесенные не в каталоге /home, сохраняются в самом контейнере и не применяются до перезапуска приложения.Any changes you make outside the /home directory are stored in the container itself and don’t persist beyond an app restart.

Чтобы открыть удаленный сеанс SSH на локальном компьютере см. инструкцию в разделе Открытие сеанса SSH из удаленной оболочки.To open a remote SSH session from your local machine, see Open SSH session from remote shell.

После успешного подключения к сеансу SSH в нижней части окна должно отобразиться сообщение SSH CONNECTION ESTABLISHED (SSH-соединение установлено).When you’re successfully connected to the SSH session, you should see the message «SSH CONNECTION ESTABLISHED» at the bottom of the window. Если вы видите ошибку SSH_CONNECTION_CLOSED или сообщение о перезапуске контейнера, возможно наличие ошибки, которая мешает запуску контейнера приложения.If you see errors such as «SSH_CONNECTION_CLOSED» or a message that the container is restarting, an error may be preventing the app container from starting. Действия по исследованию возможных проблем см. в разделе Устранение неполадок.See Troubleshooting for steps to investigate possible issues.

Устранение неполадокTroubleshooting

Как правило, при устранении неполадок прежде всего нужно проверить данные диагностики Службы приложений:In general, the first step in troubleshooting is to use App Service Diagnostics:

  1. На портале Azure для веб-приложения выберите в меню слева пункт Диагностика и решение проблем.On the Azure portal for your web app, select Diagnose and solve problems from the left menu.
  2. Теперь выберите Доступность и производительность.Select Availability and performance.
  3. Изучите сведения в разделах Журналы приложений, Сбой контейнера и Проблемы с контейнером, где обычно отображаются распространенные проблемы.Examine the information in the Application Logs, Container crash, and Container Issues options, where the most common issues will appear.

Затем изучите журналы развертывания и журналы приложения на предмет сообщений об ошибках.Next, examine both the deployment logs and the app logs for any error messages. Эти журналы часто указывают на конкретные проблемы, которые могут препятствовать развертыванию или запуску приложения.These logs often identify specific issues that can prevent app deployment or app startup. Например, сборка может завершаться ошибкой, если файл requirements.txt имеет неправильное имя или находится не в корневой папке проекта.For example, the build can fail if your requirements.txt file has the wrong filename or isn’t present in your project root folder.

В следующих разделах приводятся дополнительные рекомендации по конкретным проблемам.The following sections provide additional guidance for specific issues.

Приложение не отображаетсяApp doesn’t appear
  • После развертывания кода приложения отображается приложение по умолчанию.You see the default app after deploying your own app code. Приложение по умолчанию отображается потому, что код приложения не развернут в Службе приложений либо она не смогла найти ваш код приложения и применила приложение по умолчанию.The default app appears because you either haven’t deployed your app code to App Service, or App Service failed to find your app code and ran the default app instead.

    • Перезапустите службу приложений, подождите 15–20 секунд и снова проверьте приложение.Restart the App Service, wait 15-20 seconds, and check the app again.

    • Убедитесь, что вы используете службу приложений для Linux, а не экземпляр для Windows.Be sure you’re using App Service for Linux rather than a Windows-based instance. В Azure CLI выполните команду az webapp show --resource-group <resource-group-name> --name <app-name> --query kind, заменив <resource-group-name> и <app-name> соответствующими значениями.From the Azure CLI, run the command az webapp show --resource-group <resource-group-name> --name <app-name> --query kind, replacing <resource-group-name> and <app-name> accordingly. Команда должна вывести строку app,linux. Если этого не произошло, заново создайте службу приложений и выберите Linux.You should see app,linux as output; otherwise, recreate the App Service and choose Linux.

    • Используйте SSH для подключения непосредственно к контейнеру Службы приложений и убедитесь, что нужные файлы находятся в каталоге site/wwwroot.Use SSH to connect directly to the App Service container and verify that your files exist under site/wwwroot. Если файлов здесь нет, выполните следующие действия:If your files don’t exist, use the following steps:

      1. Создайте параметр приложения с именем SCM_DO_BUILD_DURING_DEPLOYMENT и значением 1, повторно разверните код, подождите несколько минут и снова попробуйте открыть его.Create an app setting named SCM_DO_BUILD_DURING_DEPLOYMENT with the value of 1, redeploy your code, wait a few minutes, then try to access the app again. Дополнительные сведения о создании параметров приложений см. в статье Настройка приложения Службы приложений на портале Azure.For more information on creating app settings, see Configure an App Service app in the Azure portal.
      2. Проверьте процесс развертывания, затем проверьте журналы развертывания, исправьте все ошибки и повторно разверните приложение.Review your deployment process, check the deployment logs, correct any errors, and redeploy the app.
    • Если файлы имеются, значит службе приложений не удалось определить конкретный загрузочный файл.If your files exist, then App Service wasn’t able to identify your specific startup file. Убедитесь, что ваше приложение структурировано, так как служба приложений ожидает Djangо или Flask или использует пользовательскую команду запуска.Check that your app is structured as App Service expects for Django or Flask, or use a custom startup command.

  • В браузере появилось сообщение «Служба недоступна».You see the message «Service Unavailable» in the browser. Истекло время ожидания браузером ответа от Службы приложений, что указывает на то, что она успешно запустила сервер Gunicorn, но не смогла запустить приложение.The browser has timed out waiting for a response from App Service, which indicates that App Service started the Gunicorn server, but the app itself did not start. Это может означать, что аргументы Gunicorn неверны или в коде приложения есть ошибка.This condition could indicate that the Gunicorn arguments are incorrect, or that there’s an error in the app code.

    • Обновите браузер, особенно если вы используете самую низкую ценовую категорию в плане службы приложений.Refresh the browser, especially if you’re using the lowest pricing tiers in your App Service Plan. Приложению может потребоваться больше времени для запуска, например при использовании бесплатных уровней, и оно начнет отвечать после обновления браузера.The app may take longer to start up when using free tiers, for example, and becomes responsive after you refresh the browser.

    • Убедитесь, что ваше приложение структурировано, так как служба приложений ожидает Djangо или Flask или использует пользовательскую команду запуска.Check that your app is structured as App Service expects for Django or Flask, or use a custom startup command.

    • Проверьте, нет ли в потоке журналов приложения сообщений об ошибках.Examine the app log stream for any error messages. В этих журналах отобразятся любые ошибки в коде приложения.The logs will show any errors in the app code.

Не удалось найти setup.py или requirements.txtCould not find setup.py or requirements.txt
  • В потоке журналов отображается сообщение Could not find setup.py or requirements.txt; Not running pip install (Не удалось найти setup.py или requirements.txt. Не запущена установка pip) . Процессу сборки Oryx не удалось найти файл requirements.txt.The log stream shows «Could not find setup.py or requirements.txt; Not running pip install.»: The Oryx build process failed to find your requirements.txt file.

    • Подключитесь к контейнеру веб-приложения через SSH и убедитесь, что файл requirements.txt имеет правильное имя и размещен в папке site/wwwroot.Connect to the web app’s container via SSH and verify that requirements.txt is named correctly and exists directly under site/wwwroot. Если он там отсутствует, убедитесь, что он существует в репозитории и включен в развертывание.If it doesn’t exist, make site the file exists in your repository and is included in your deployment. Если он находится в отдельной папке, переместите его в корневую папку.If it exists in a separate folder, move it to the root.
Ошибка ModuleNotFoundError при запуске приложенияModuleNotFoundError when app starts

Если отображается ошибка ModuleNotFoundError: No module named 'example', это означает, что Python не удалось найти один или несколько модулей при запуске приложения.If you see an error like ModuleNotFoundError: No module named 'example', this means that Python could not find one or more of your modules when the application started. Чаще всего это происходит при развертывании виртуальной среды с помощью кода.This most often occurs if you deploy your virtual environment with your code. Виртуальные среды не являются переносимыми, поэтому их не следует развертывать с помощью кода приложения.Virtual environments are not portable, so a virtual environment should not be deployed with your application code. Вместо этого позвольте Oryx создать виртуальную среду и установить пакеты в веб-приложение, создав параметр приложения SCM_DO_BUILD_DURING_DEPLOYMENT и задав для него значение 1.Instead, let Oryx create a virtual environment and install your packages on the web app by creating an app setting, SCM_DO_BUILD_DURING_DEPLOYMENT, and setting it to 1. Тогда Oryx будет устанавливать ваши пакеты при каждом развертывании в Службе приложений.This will force Oryx to install your packages whenever you deploy to App Service. Дополнительные сведения см. в этой статье о переносимости виртуальных сред.For more information, please see this article on virtual environment portability.

База данных заблокированаDatabase is locked

При попытке выполнить перенос базы данных с помощью приложения Django может поступить сообщение «sqlite3.When attempting to run database migrations with a Django app, you may see «sqlite3. OperationalError: database is locked» (sqlite3.OperationalError: база данных заблокирована).OperationalError: database is locked.» Это сообщение об ошибке означает, что приложение использует базу данных SQLite, для которой приложение Django настроено по умолчанию, вместо облачной базы данных, такой как PostgreSQL для Azure.The error indicates that your application is using a SQLite database for which Django is configured by default, rather than using a cloud database such as PostgreSQL for Azure.

Проверьте переменную DATABASES в файле приложения settings.py, чтобы убедиться, что приложение использует облачную базу данных вместо SQLite.Check the DATABASES variable in the app’s settings.py file to ensure that your app is using a cloud database instead of SQLite.

Если эта ошибка возникла при работе с руководством по развертыванию веб-приложения Django с помощью PostgreSQL, проверьте, выполнены ли действия, описанные в разделе Настройка переменных среды для подключения к базе данных.If you’re encountering this error with the sample in Tutorial: Deploy a Django web app with PostgreSQL, check that you completed the steps in Configure environment variables to connect the database.

Другие проблемыOther issues
  • Пароли не отображаются при вводе в сеансе SSH. По соображениям безопасности сеанс SSH оставляет пароль скрытым при вводе.Passwords don’t appear in the SSH session when typed: For security reasons, the SSH session keeps your password hidden as you type. Но все символы успешно записываются, поэтому введите пароль как обычно и нажмите клавишу ВВОД после завершения.The characters are being recorded, however, so type your password as usual and press Enter when done.

  • Команды в сеансе SSH выглядят обрезанными. Возможно, редактор не выполняет для команд перенос по строкам, но они все равно должны работать правильно.Commands in the SSH session appear to be cut off: The editor may not be word-wrapping commands, but they should still run correctly.

  • Статические ресурсы не отображаются в приложении Django. Убедитесь, что вы включили модуль whitenoiseStatic assets don’t appear in a Django app: Ensure that you have enabled the whitenoise module

  • Появляется сообщение «Fatal SSL Connection is Required» (Неустранимая ошибка, требуется SSL-подключение). Проверьте имена пользователей и пароли, используемые в приложении для доступа к ресурсам (например, к базам данных).You see the message, «Fatal SSL Connection is Required»: Check any usernames and passwords used to access resources (such as databases) from within the app.

Дальнейшие действияNext steps



Python впервые в истории стал популярнее Java


, Текст: Эльяс Касми


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

Один из самых востребованных языков

Язык программирования Python сумел обогнать по популярности Java и впервые за свою историю занять второе место в рейтинге TIOBE. Сам рейтинг существует с 2003 г.

В рейтинге TIOBE за ноябрь 2019 г. Java был на первом месте, а Python довольствовался третьим. Популярность Java за год упала на 4,57%, а спрос на Python возрос на 2,27%. Но пока эти языки «спорили» за «серебро», победу в актуальном рейтинге TIOBE одержал язык C.

Как пишет портал ZDnet, всплеск популярности Python может быть связан с наращиванием темпов развития тех областей, где он применяется чаще всего. В качестве примеры были приведены data mining, численные вычисления и машинное обучение. Генеральный директор TIOBE Пол Янсен (Paul Jansen) полагает, что интерес к Python основан еще и на том, что если раньше программированием занимались, в основном, инженеры, то теперь этот навык «требуется почти повсюду, а хороших разработчиков ПО не хватает». «Недавний всплеск популярности Python вызван тем, что он достаточно прост для использования непрограммистами, а не является языком только для продвинутых программистов», – отметил Пол Янсен.

До первого места осталось совсем немного

«Не так давно на моей машине спустило колесо, и мне пришлось вызвать дорожный патруль. Приехавший специалист спросил меня о роде моей деятельности, и когда я рассказал про программирование, он сообщил, что увлекается программированием на Python. Тогда я понял, что Python будет использоваться повсеместно», – добавил глава TIOBE.

Составители TIOBE уверены, что популярность Python продолжит расти. CNews писал, что еще в июне 2019 г. они опубликовали прогноз, согласно которому в ближайшие три-четыре года Python займет первую строчку в их рейтинге. На тот момент он находился на третьей позиции, уступая все тем же Java и С.

Особенности рейтинга

TIOBE отслеживает популярность языков программирования путем подсчета результатов поисковых запросов, связанных с программированием. Например, он отслеживает наличие в нем сочетания слов programming и language.

В рейтинге учитываются 50 языков программирования

Рейтинг составляется ежемесячной, данные берутся с самых популярных, по рейтингу Alexa, веб-сайтов. Среди них есть поисковики Google и Bing, а также порталы YouTube, Blogger, Amazon и стриминговый сервис YouTube. В то же время рейтинг не проводит сравнение языков по количеству написанного на нем кода.

Ежегодно TIOBE присваивает звание «Язык года». С 2003 г. Python трижды побеждал в этой номинации – в 2007, 2010 и 2018 гг., однако в 2019 г. он уступил его С, равно как в 2017 и 2008 г. Для сравнения, Java удерживал этот титул лишь дважды – в 2005 и 2015 гг.

Немного о Python

Язык Python зародился в конце 80-х годов XX века. Его создатель – нидерландский разработчик Гвидо ван Россум (Guido van Rossum), и он задумывал его как потомка языка ABC.

Гвидо ван Россум

Первая публикация кода Python состоялась в феврале 1991 г., на тот момент язык имел версию 0.9.0. Путь до версии 1.0 оказался довольно длинным – она была опубликована лишь в январе 1994 г. До 2.0 язык обновился в октябре 2000 г., до 3.0 – в декабре 2008 г. На момент публикации материала самая актуальная стабильная версия Python носила индекс 3.9.0 – ее выпуск состоялся 5 октября 2020 г.

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

В июле 2018 г., как сообщал CNews, Гвидо ван Россум, спустя почти 20 лет с момента первого релиза Python, сложил с себя полномочия главы проекта. О своем уходе Гвидо сообщил сам в письме на сайте Python.

Так менялась популярность Python

Свое решение он объяснил тем, что ему надоело сталкиваться с трудностями в процессе утверждения предложений по улучшению Python (Python Enhancement Proposal, PEP). «Теперь, когда PEP 572 готовы, я больше никогда не хочу так тяжело бороться за PEP и обнаруживать потом, что так много людей презирают мои решения», – сказал он, добавив также, что ему довольно много лет (на момент ухода ему было 62 года), и что он испытывает определенные проблемы со здоровьем.

Самый популярный язык в мире

Если в рейтинге TIOBE на ноябрь 2020 г. Python занимал лишь вторую строчку, то, по версии сотрудников Института инженеров электротехники и электроники (Institute of Electrical and Electronics Engineers, IEEE), равных ему нет. В июле 2020 г. они опубликовали собственный рейтинг популярности языков программирования, где первая тройка состоит из тех же участников, что и в перечне TIOBE, вот только расположены они совершенно иначе.

CIO и СTO: как меняется влияние ИТ-руководителей в компаниях?

Новое в СХД

Рейтинг популярности языков программирования

Место в рейтингеНазвание языкаКоличество баллов
1Python100,0
2Java95,3
3C94,6
4C++87,0
5JavaScript79,5
6R78,6
7Arduino73,2
8Go73,1
9Swift70,5
10Matlab68,4

В рейтинге IEEE Python удерживает первое место, а Java находится на втором. Языку С приходится довольствоваться «бронзой».

Все может измениться

В июле 2020 г. Python проявил себя и в рейтинге языков RedMonk, оказавшись в нем на втором месте после JavaScript. Составитель рейтинга Стивен О’Грейди (Stephen O’Grady) не согласен с мнением Пола Янсена из TIOBE о том, что популярность Python будет расти и дальше.

По его словам, все может измениться, и в качестве примера он привел Perl, популярность которого тоже росла столь же быстро. Однако сейчас Perl находится на 12 месте в рейтинге TIOBE, и нет никакой гарантии, что то же самое никогда не случится с Python.

Переключение интерпретатора Python, используемого по умолчанию, с версии 2.7 на 3.6 в Ubuntu 18.04

В текущий момент язык Python находится в процессе транзита с версии 2.x на 3.x, что влияет на корректность исполнения приложений, которые рассчитывают на ту или иную версию интерпретатора. Обычно, проблемы нет, если используется среда VirtualEnv, когда вы можете выбрать требуемое окружение при его создании, но приложения, которые выполняются вне VirtualEnv могут рассчитывать на ту или иную версию Python. В данной заметке мы рассмотрим простые шаги, как изменить версию Python, используемую по умолчанию, в Ubuntu Linux 18.04.

Для начала выясните какая версия используется в настоящий момент:

$ python -V
Python 2.7.15+

Мы видим, что в настоящее время в системе используется интерпретатор Python версии 2.7. Предположим, что вам требуется python 3.6. Проверьте, что он доступен:

$ whereis python3
python3: /usr/bin/python3.6m /usr/bin/python3.6m-config /usr/bin/python3.6-config /usr/bin/python3.6 /usr/bin/python3 /usr/lib/python3.7 /usr/lib/python3.6 /usr/lib/python3 /etc/python3.6 /etc/python3 /usr/local/lib/python3.6 /usr/include/python3.6m /usr/include/python3.6 /usr/share/python3 /usr/share/man/man1/python3.1.gz

Если в процессе выполнения вышеуказанной команды интерпретатор не найден, используйте apt для его установки:

sudo apt update && sudo apt install python3

Теперь вы можете переключить версию интерпретатора, выполнив команду ln:

sudo ln -sfn /usr/bin/python3.6 /usr/bin/python

Запросите версию python повторно:

$ python -V
Python 3.6.8

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

Документация по Python

по версиям | Python.org

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

Информацию о неизданной (находящейся в разработке) документации см.
В версиях для разработки.

  • Python 3.9.5, документация выпущена 3 мая 2021 г.
  • Python 3.9.4, документация выпущена 4 апреля 2021 г.
  • Python 3.9.3, документация выпущена 2 апреля 2021 г.
  • Python 3.9.2, документация выпущена 19 февраля 2021 г.
  • Python 3.9.1, документация выпущена 8 декабря 2020 г.
  • Python 3.9.0, документация выпущена 5 октября 2020 г.
  • Python 3.8.10, документация выпущена 3 мая 2021 г.
  • Python 3.8.9, документация выпущена 2 апреля 2021 г.
  • Python 3.8.8, документация выпущена 19 февраля 2021 г.
  • Python 3.8.7, документация выпущена 21 декабря 2020 г.
  • Python 3.8.6, документация выпущена 23 сентября 2020 г.
  • Python 3.8.5, документация выпущена 20 июля 2020 г.
  • Python 3.8.4, документация выпущена 13 июля 2020 г.
  • Python 3.8.3, документация выпущена 13 мая 2020 г.
  • Python 3.8.2, документация выпущена 24 февраля 2020 г.
  • Python 3.8.1, документация выпущена 18 декабря 2019 г.
  • Python 3.8.0, документация выпущена 14 октября 2019 г.
  • Python 3.7.10, документация выпущена 15 февраля 2021 г.
  • Python 3.7.9, документация выпущена 17 августа 2020 г.
  • Python 3.7.8, документация выпущена 27 июня 2020 г.
  • Python 3.7.7, документация выпущена 10 марта 2020 г.
  • Python 3.7.6, документация выпущена 18 декабря 2019 г.
  • Python 3.7.5, документация выпущена 15 октября 2019 г.
  • Python 3.7.4, документация выпущена 8 июля 2019 г.
  • Python 3.7.3, документация выпущена 25 марта 2019 г.
  • Python 3.7.2, документация выпущена 24 декабря 2018 г.
  • Python 3.7.1, документация выпущена 20 октября 2018 г.
  • Python 3.7.0, документация выпущена 27 июня 2018 г.
  • Python 3.6.13, документация выпущена 15 февраля 2021 г.
  • Python 3.6.12, документация выпущена 17 августа 2020 г.
  • Python 3.6.11, документация выпущена 27 июня 2020 г.
  • Python 3.6.10, документация выпущена 18 декабря 2019 г.
  • Python 3.6.9, документация выпущена 2 июля 2019 г.
  • Python 3.6.8, документация выпущена 24 декабря 2018 г.
  • Python 3.6.7, документация выпущена 20 октября 2018 г.
  • Python 3.6.6, документация выпущена 27 июня 2018 г.
  • Python 3.6.5, документация выпущена 28 марта 2018 г.
  • Python 3.6.4, документация выпущена 19 декабря 2017 г.
  • Python 3.6.3, документация выпущена 3 октября 2017 г.
  • Python 3.6.2, документация выпущена 17 июля 2017 г.
  • Python 3.6.1, документация выпущена 21 марта 2017 г.
  • Python 3.6.0, документация выпущена 23 декабря 2016 г.
  • Python 3.5.10, документация выпущена 5 сентября 2020 г.
  • Python 3.5.8, документация выпущена 1 ноября 2019 г.
  • Python 3.5.7, документация выпущена 18 марта 2019 г.
  • Python 3.5.6, документация выпущена 8 августа 2018 г.
  • Python 3.5.5, документация выпущена 4 февраля 2018 г.
  • Python 3.5.4, документация выпущена 25 июля 2017 г.
  • Python 3.5.3, документация выпущена 17 января 2017 года.
  • Python 3.5.2, документация выпущена 27 июня 2016 г.
  • Python 3.5.1, документация выпущена 7 декабря 2015 г.
  • Python 3.5.0, документация выпущена 13 сентября 2015 г.
  • Python 3.4.10, документация выпущена 18 марта 2019 г.
  • Python 3.4.9, документация выпущена 8 августа 2018 г.
  • Python 3.4.8, документация выпущена 4 февраля 2018 г.
  • Python 3.4.7, документация выпущена 25 июля 2017 г.
  • Python 3.4.6, документация выпущена 17 января 2017 г.
  • Python 3.4.5, документация выпущена 26 июня 2016 г.
  • Python 3.4.4, документация выпущена 6 декабря 2015 г.
  • Python 3.4.3, документация выпущена 25 февраля 2015 г.
  • Python 3.4.2, документация выпущена 4 октября 2014 г.
  • Python 3.4.1, документация выпущена 18 мая 2014 г.
  • Python 3.4.0, документация выпущена 16 марта 2014 г.
  • Python 3.3.7, документация выпущена 19 сентября 2017 года.
  • Python 3.3.6, документация выпущена 12 октября 2014 г.
  • Python 3.3.5, документация выпущена 9 марта 2014 г.
  • Python 3.3.4, документация выпущена 9 февраля 2014 г.
  • Python 3.3.3, документация выпущена 17 ноября 2013 г.
  • Python 3.3.2, документация выпущена 15 мая 2013 г.
  • Python 3.3.1, документация выпущена 7 апреля 2013 г.
  • Python 3.3.0, документация выпущена 29 сентября 2012 г.
  • Python 3.2.6, документация выпущена 11 октября 2014 г.
  • Python 3.2.5, документация выпущена 15 мая 2013 г.
  • Python 3.2.4, документация выпущена 7 апреля 2013 г.
  • Python 3.2.3, документация выпущена 10 апреля 2012 г.
  • Python 3.2.2, документация выпущена 4 сентября 2011 г.
  • Python 3.2.1, документация выпущена 10 июля 2011 г.
  • Python 3.2, документация выпущена 20 февраля 2011 г.
  • Python 3.1.5, документация выпущена 9 апреля 2012 г.
  • Python 3.1.4, документация выпущена 11 июня 2011 г.
  • Python 3.1.3, документация выпущена 27 ноября 2010 г.
  • Python 3.1.2, документация выпущена 21 марта 2010 г.
  • Python 3.1.1, документация выпущена 17 августа 2009 г.
  • Python 3.1, документация выпущена 27 июня 2009 г.
  • Python 3.0.1, документация выпущена 13 февраля 2009 г.
  • Python 3.0, документация выпущена 3 декабря 2008 г.
  • Python 2.7.18, документация выпущена 20 апреля 2020 г.
  • Python 2.7.17, документация выпущена 19 октября 2019 г.
  • Python 2.7.16, документация выпущена 2 марта 2019 г.
  • Python 2.7.15, документация выпущена 30 апреля 2018 г.
  • Python 2.7.14, документация выпущена 16 сентября 2017 г.
  • Python 2.7.13, документация выпущена 17 декабря 2016 г.
  • Python 2.7.12, документация выпущена 26 июня 2016 г.
  • Python 2.7.11, документация выпущена 5 декабря 2015 года.
  • Python 2.7.10, документация выпущена 23 мая 2015 г.
  • Python 2.7.9, документация выпущена 10 декабря 2014 г.
  • Python 2.7.8, документация выпущена 1 июля 2014 г.
  • Python 2.7.7, документация выпущена 31 мая 2014 г.
  • Python 2.7.6, документация выпущена 10 ноября 2013 г.
  • Python 2.7.5, документация выпущена 15 мая 2013 г.
  • Python 2.7.4, документация выпущена 6 апреля 2013 г.
  • Python 2.7.3, документация выпущена 9 апреля 2012 г.
  • Python 2.7.2, документация выпущена 11 июня 2011 г.
  • Python 2.7.1, документация выпущена 27 ноября 2010 г.
  • Python 2.7, документация выпущена 4 июля 2010 г.
  • Python 2.6.9, документация выпущена 29 октября 2013 г.
  • Python 2.6.8, документация выпущена 10 апреля 2012 г.
  • Python 2.6.7, документация выпущена 3 июня 2011 г.
  • Python 2.6.6, документация выпущена 24 августа 2010 г.
  • Python 2.6.5, документация выпущена 19 марта 2010 г.
  • Python 2.6.4, документация выпущена 25 октября 2009 г.
  • Python 2.6.3, документация выпущена 2 октября 2009 г.
  • Python 2.6.2, документация выпущена 14 апреля 2009 г.
  • Python 2.6.1, документация выпущена 4 декабря 2008 г.
  • Python 2.6, документация выпущена 1 октября 2008 г.
  • Python 2.5.4, документация выпущена 23 декабря 2008 г.
  • Python 2.5.3, документация выпущена 19 декабря 2008 г.
  • Python 2.5.2, документация выпущена 21 февраля 2008 г.
  • Python 2.5.1, документация выпущена 18 апреля 2007 г.
  • Python 2.5, документация выпущена 19 сентября 2006 г.
  • Python 2.4.4, документация выпущена 18 октября 2006 г.
  • Python 2.4.3, документация выпущена 29 марта 2006 г.
  • Python 2.4.2, документация выпущена 28 сентября 2005 г.
  • Python 2.4.1, документация выпущена 30 марта 2005 г.
  • Python 2.4, документация выпущена 30 ноября 2004 г.
  • Python 2.3.5, документация выпущена 8 февраля 2005 г.
  • Python 2.3.4, документация выпущена 27 мая 2004 г.
  • Python 2.3.3, документация выпущена 19 декабря 2003 г.
  • Python 2.3.2, документация выпущена на
    3 октября 2003 г.
  • Python 2.3.1, документация выпущена на
    23 сентября 2003г.
  • Python 2.3, документация выпущена на
    29 июля 2003 г.
  • Python 2.2.3, документация выпущена на
    30 мая 2003г.
  • Python 2.2.2, документация выпущена на
    14 октября 2002 г.
  • Python 2.2.1, документация выпущена на
    10 апреля 2002 г.
  • Python 2.2p1, документация выпущена на
    29 марта 2002 г.
  • Python 2.2, документация выпущена на
    21 декабря 2001г.
  • Python 2.1.3, документация выпущена на
    8 апреля 2002г.
  • Python 2.1.2, документация выпущена на
    16 января 2002г.
  • Python 2.1.1, документация выпущена
    20 июля 2001г.
  • Python 2.1, документация выпущена
    15 апреля 2001г.
  • Python 2.0.1, документация выпущена на
    22 июня 2001г.
  • Python 2.0, документация выпущена
    16 октября 2000г.
  • Python 1.6, документация выпущена на
    5 сентября 2000г.
  • Python 1.5.2p2, документация выпущена
    22 марта 2000г.
  • Python 1.5.2p1, документация выпущена на
    6 июля 1999 г.
  • Python 1.5.2, документация выпущена на
    30 апреля 1999 г.
  • Python 1.5.1p1, документация выпущена на
    6 августа 1998г.
  • Python 1.5.1, документация выпущена на
    14 апреля 1998г.
  • Python 1.5, документация выпущена на
    17 февраля 1998г.
  • Python 1.4, документация выпущена на
    25 октября 1996 г.

Последняя и неизданная документация для версий Python, все еще находящихся в разработке:

Загрузить Python | Python.org

Информация о конкретных портах и ​​информация для разработчиков

Открытые ключи OpenPGP

Исходные и двоичные исполняемые файлы подписываются диспетчером выпуска или сборщиком двоичных файлов с использованием своих
Ключ OpenPGP.Файлы выпуска для поддерживаемых в настоящее время выпусков подписаны следующими лицами:

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

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

gpg --recv-keys [идентификатор ключа]
 

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

gpg --verify Python-3.6.2.tgz.asc
 

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

  • (Эти инструкции предназначены для
    Пользователи командной строки GnuPG и Unix.)

Прочие полезные предметы

  • Ищете сторонние модули Python ? В
    В Package Index их много.
  • Вы можете просмотреть стандартную документацию
    онлайн, или вы можете скачать его
    в HTML, PostScript, PDF и других форматах. Посмотреть основные
    Страница документации.
  • Информация об инструментах для распаковки архивных файлов.
    предоставляется на python.org.
  • Совет : даже если вы загрузите готовый двоичный файл для своего
    платформу, имеет смысл также скачать исходный код.Это позволяет вам просматривать стандартную библиотеку (подкаталог Lib )
    и стандартные сборники демок ( Demo ) и инструментов
    ( Tools ), которые идут в комплекте. Вы можете многому научиться у
    источник!
  • Существует также коллекция пакетов Emacs
    что Emacsing Pythoneer может оказаться полезным. Это включает в себя основные
    режимы редактирования Python, C, C ++, Java и др., отладчик Python
    интерфейсы и многое другое. Большинство пакетов совместимы с Emacs и
    XEmacs.

Хотите внести свой вклад?

Хотите внести свой вклад? См. Руководство разработчика Python
чтобы узнать, как управляется разработка на Python.

Выпусков Python

для Windows | Python.org

  • Python 3.9.5 — 3 мая 2021 г.

    Обратите внимание, что Python 3.9.5 не может использоваться в Windows 7 или более ранних версиях.

  • Python 3.8.10 — 3 мая 2021 г.

    Обратите внимание, что Python 3.8.10 не может использоваться в Windows XP или более ранней версии.

  • Python 3.9.4 — 4 апреля 2021 г.

    Обратите внимание, что Python 3.9.4 не может использоваться в Windows 7 или более ранних версиях.

  • Python 3.9.3 — 2 апреля 2021 г.

    Обратите внимание, что Python 3.9.3 не может использоваться в Windows 7 или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.8.9 — 2 апреля 2021 г.

    Обратите внимание, что Python 3.8.9 не может использоваться в Windows XP или более ранней версии.

  • Python 3.9.2 — 19 февраля 2021 г.

    Обратите внимание, что Python 3.9.2 не может использоваться в Windows 7 или более ранних версиях.

  • Python 3.8.8 — 19 февраля 2021 г.

    Обратите внимание, что Python 3.8.8 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.6.13 — 15 февраля 2021 г.

    Обратите внимание, что Python 3.6.13 не может использоваться в Windows XP или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.7.10 — 15 февраля 2021 г.

    Обратите внимание, что Python 3.7.10 не может использоваться в Windows XP или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.8.7 — 21 декабря 2020 г.

    Обратите внимание, что Python 3.8.7 не может использоваться в Windows XP или более ранней версии.

  • Python 3.9.1 — 7 декабря 2020 г.

    Обратите внимание, что Python 3.9.1 не может использоваться в Windows 7 или более ранних версиях.

  • Python 3.9.0 — 5 октября 2020 г.

    Обратите внимание, что Python 3.9.0 не может использоваться в Windows 7 или более ранних версиях.

  • Python 3.8.6 — 24 сентября 2020 г.

    Обратите внимание, что Python 3.8.6 не может использоваться в Windows XP или более ранней версии.

  • Python 3.8.6rc1 — 8 сентября 2020 г.

    Обратите внимание, что Python 3.8.6rc1 не может использоваться в Windows XP или более ранней версии.

  • Python 3.5.10 — 5 сентября 2020 г.

    Обратите внимание, что Python 3.5.10 не может использоваться в Windows XP или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.7.9 — 17 августа 2020 г.

    Обратите внимание, что Python 3.7.9 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.6.12 — 17 августа 2020 г.

    Обратите внимание, что Python 3.6.12 не может использоваться в Windows XP или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.8.5 — 20 июля 2020 г.

    Обратите внимание, что Python 3.8.5 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.8.4 — 13 июля 2020 г.

    Обратите внимание, что Python 3.8.4 не может использоваться в Windows XP или более ранней версии.

  • Python 3.8.4rc1 — 30 июня 2020 г.

    Обратите внимание, что Python 3.8.4rc1 не может использоваться в Windows XP или более ранней версии.

  • Python 3.7.8 — 27 июня 2020 г.

    Обратите внимание, что Python 3.7.8 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.6.11 — 27 июня 2020 г.

    Обратите внимание, что Python 3.6.11 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 3.8.3 — 13 мая 2020 г.

    Обратите внимание, что Python 3.8.3 не может использоваться в Windows XP или более ранней версии.

  • Python 3.8.3rc1 — 29 апреля 2020 г.

    Обратите внимание, что Python 3.8.3rc1 не может использоваться в Windows XP или более ранней версии.

  • Python 2.7.18 — 20 апреля 2020 г.

  • Python 3.7.7 — 10 марта 2020 г.

    Обратите внимание, что Python 3.7.7 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.8.2 — 24 февраля 2020 г.

    Обратите внимание, что Python 3.8.2 не может использоваться в Windows XP или более ранней версии.

  • Python 3.8.1 — 18 декабря 2019 г.

    Обратите внимание, что Python 3.8.1 не может использоваться в Windows XP или более ранней версии.

  • Python 3.7.6 — 18 декабря 2019 г.

    Обратите внимание, что Python 3.7.6 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.6.10 — 18 декабря 2019 г.

    Обратите внимание, что Python 3.6.10 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 3.5.9 — 2 ноября 2019 г.

    Обратите внимание, что Python 3.5.9 не может использоваться в Windows XP или более ранних версиях.

    • Нет файлов для этого выпуска.
  • Python 3.5.8 — 29 октября 2019 г.

    Обратите внимание, что Python 3.5.8 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 2.7.17 — 19 октября 2019 г.

  • Python 3.7.5 — 15 октября 2019 г.

    Обратите внимание, что Python 3.7.5 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.8.0 — 14 октября 2019 г.

    Обратите внимание, что Python 3.8.0 не может использоваться в Windows XP или более ранней версии.

  • Python 3.7.4 — 8 июля 2019

    Обратите внимание, что Python 3.7.4 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.6.9 — 2 июля 2019 г.

    Обратите внимание, что Python 3.6.9 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 3.7.3 — 25 марта 2019 г.

    Обратите внимание, что Python 3.7.3 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.4.10 — 18 марта 2019 г.

    • Нет файлов для этого выпуска.
  • Python 3.5.7 — 18 марта 2019 г.

    Обратите внимание, что Python 3.5.7 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 2.7.16 — 4 марта 2019 г.

  • Python 3.7.2 — 24 декабря 2018 г.

    Обратите внимание, что Python 3.7.2 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.6.8 — 24 декабря 2018 г.

    Обратите внимание, что Python 3.6.8 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.7.1 — 20 октября 2018 г.

    Обратите внимание, что Python 3.7.1 не может использоваться в Windows XP или более ранней версии.

  • Python 3.6.7 — 20 октября 2018 г.

    Обратите внимание, что Python 3.6.7 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.5.6 — 2 августа 2018 г.

    Обратите внимание, что Python 3.5.6 нельзя использовать в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 3.4.9 — 2 августа 2018 г.

    • Нет файлов для этого выпуска.
  • Python 3.7.0 — 27 июня 2018 г.

    Обратите внимание, что Python 3.7.0 не может использоваться в Windows XP или более ранней версии.

  • Python 3.6.6 — 27 июня 2018 г.

    Обратите внимание, что Python 3.6.6 не может использоваться в Windows XP или более ранних версиях.

  • Python 2.7.15 — 1 мая 2018 г.

  • Python 3.6.5 — 28 марта 2018 г.

    Обратите внимание, что Python 3.6.5 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.4.8 — 5 февраля 2018 г.

    • Нет файлов для этого выпуска.
  • Python 3.5.5 — 5 февраля 2018 г.

    Обратите внимание, что Python 3.5.5 не может использоваться в Windows XP или более ранней версии.

    • Нет файлов для этого выпуска.
  • Python 3.6.4 — 19 декабря 2017 г.

    Обратите внимание, что Python 3.6.4 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.6.3 — 3 октября 2017 г.

    Обратите внимание, что Python 3.6.3 не может использоваться в Windows XP или более ранней версии.

  • Python 3.3.7 — 19 сентября 2017 г.

    • Нет файлов для этого выпуска.
  • Python 2.7.14 — 16 сентября 2017 г.

  • Python 3.4.7 — 9 августа 2017 г.

    • Нет файлов для этого выпуска.
  • Python 3.5.4 — 8 августа 2017 г.

    Обратите внимание, что Python 3.5.4 не может использоваться в Windows XP или более ранней версии.

  • Python 3.6.2 — 17 июля 2017 г.

    Обратите внимание, что Python 3.6.2 нельзя использовать в Windows XP или более ранней версии.

  • Python 3.6.1 — 21 марта 2017 г.

    Обратите внимание, что Python 3.6.1 не может использоваться в Windows XP или более ранних версиях.

  • Python 3.4.6 — 17 января 2017 г.

    • Нет файлов для этого выпуска.
  • Python 3.5.3 — 17 января 2017 г.

    Обратите внимание, что Python 3.5.3 не может использоваться в Windows XP или более ранней версии.

  • Python 3.6.0 — 23 декабря 2016 г.

    Обратите внимание, что Python 3.6.0 не может использоваться в Windows XP или более ранней версии.

  • Python 2.7.13 — 17 декабря 2016 г.

  • Python 3.4.5 — 27 июня 2016 г.

    • Нет файлов для этого выпуска.
  • Python 3.5.2 — 27 июня 2016 г.

    Обратите внимание, что Python 3.5.2 не может использоваться в Windows XP или более ранней версии.

  • Python 2.7.12 — 25 июня 2016 г.

  • Python 3.4.4 — 21 декабря 2015 г.

  • Python 3.5.1 — 7 декабря 2015 г.

    Обратите внимание, что Python 3.5.1 не может использоваться в Windows XP или более ранней версии.

  • Python 2.7.11 — 5 декабря 2015 г.

  • Python 3.5.0 — 13 сентября 2015 г.

    Обратите внимание, что Python 3.5.0 не может использоваться в Windows XP или более ранней версии.

  • Python 2.7.10 — 23 мая 2015 г.

  • Python 3.4.3 — 25 февраля 2015 г.

  • Python 2.7.9 — 10 декабря 2014 г.

  • Python 3.4.2 — 13 октября 2014 г.

  • Python 3.3.6 — 12 октября 2014 г.

    • Нет файлов для этого выпуска.
  • Python 3.2.6 — 12 октября 2014 г.

    • Нет файлов для этого выпуска.
  • Python 2.7.8 — 2 июля 2014 г.

  • Python 2.7.7 — 1 июня 2014 г.

  • Python 3.4.1 — 19 мая 2014 г.

  • Python 3.4.0 — 17 марта 2014 г.

  • Python 3.3.5 — 9 марта 2014 г.

  • Python 3.3.4 — 9 февраля 2014 г.

  • Python 3.3.3 — 17 ноября 2013 г.

  • Python 2.7.6 — 10 ноября 2013 г.

  • Python 2.6.9 — 29 октября 2013 г.

    • Нет файлов для этого выпуска.
  • Python 3.2.5 — 15 мая 2013 г.

  • Python 3.3.2 — 15 мая 2013 г.

  • Python 2.7.5 — 12 мая 2013 г.

  • Python 3.3.1 — 6 апреля 2013 г.

  • Python 2.7.4 — 6 апреля 2013 г.

  • Python 3.2.4 — 6 апреля 2013 г.

  • Python 3.3.0 — 29 сентября 2012 г.

  • Python 2.6.8 — 10 апреля 2012 г.

    • Нет файлов для этого выпуска.
  • Python 3.2.3 — 10 апреля 2012 г.

  • Python 2.7.3 — 9 апреля 2012 г.

  • Python 3.1.5 — 9 апреля 2012 г.

    • Нет файлов для этого выпуска.
  • Python 3.2.2 — 3 сентября 2011 г.

  • Python 3.2.1 — 9 июля 2011 г.

  • Python 3.1.4 — 11 июня 2011 г.

  • Python 2.7.2 — 11 июня 2011 г.

  • Python 2.6.7 — 3 июня 2011 г.

    • Нет файлов для этого выпуска.
  • Python 2.5.6 — 26 мая 2011 г.

    • Нет файлов для этого выпуска.
  • Python 3.2.0 — 20 февраля 2011 г.

  • Python 2.7.1 — 27 ноября 2010 г.

  • Python 3.1.3 — 27 ноября 2010 г.

  • Python 2.6.6 — 24 августа 2010 г.

  • Python 2.7.0 — 3 июля 2010 г.

  • Python 3.1.2 — 20 марта 2010 г.

  • Python 2.6.5 — 18 марта 2010 г.

  • Python 2.5.5 — 31 января 2010 г.

    • Нет файлов для этого выпуска.
  • Python 2.6.4 — 26 октября 2009 г.

  • Python 2.6.3 — 2 октября 2009 г.

  • Python 3.1.1 — 17 августа 2009 г.

  • Python 3.1.0 — 26 июня 2009 г.

  • Python 2.6.2 — 14 апреля 2009 г.

  • Python 3.0.1 — 13 февраля 2009 г.

  • Python 2.5.4 — 23 декабря 2008 г.

  • Python 2.5.3 — 19 декабря 2008 г.

  • Python 2.4.6 — 19 декабря 2008 г.

    • Нет файлов для этого выпуска.
  • Python 2.6.1 — 4 декабря 2008 г.

  • Python 3.0.0 — 3 декабря 2008 г.

  • Python 2.6.0 — 2 октября 2008 г.

  • Python 2.3.7 — 11 марта 2008 г.

    • Нет файлов для этого выпуска.
  • Python 2.4.5 — 11 марта 2008 г.

    • Нет файлов для этого выпуска.
  • Python 2.5.2 — 21 февраля 2008 г.

  • Python 2.5.1 — 19 апреля 2007 г.

  • Python 2.3.6 — 1 ноября 2006 г.

    • Нет файлов для этого выпуска.
  • Python 2.4.4 — 18 октября 2006 г.

  • Python 2.5.0 — 19 сентября 2006 г.

  • Python 2.4.3 — 15 апреля 2006 г.

  • Python 2.4.2 — 27 сентября 2005 г.

  • Python 2.4.1 — 30 марта 2005 г.

  • Python 2.3.5 — 8 февраля 2005 г.

  • Python 2.4.0 — 30 ноября 2004 г.

  • Python 2.3.4 — 27 мая 2004 г.

  • Python 2.3.3 — 19 декабря 2003 г.

  • Python 2.3.2 — 3 октября 2003 г.

  • Python 2.3.1 — 23 сентября 2003 г.

  • Python 2.3.0 — 29 июля 2003 г.

  • Python 2.2.3 — 30 мая 2003 г.

  • Python 2.2.2 — 14 октября 2002 г.

  • Python 2.2.1 — 10 апреля 2002 г.

  • Python 2.1.3 — 9 апреля 2002 г.

  • Python 2.2.0 — 21 декабря 2001 г.

  • Python 2.0.1 — 22 июня 2001 г.

  • Python, выпуск Python 3.7.0 | Python.org

    Дата выпуска: 27 июня 2018 г.

    Python 3.7.0 был первым выпуском функции для Python 3.7.

    Сейчас существует новых выпусков с исправлениями ошибок Python 3.7, которые заменяют 3.7.0, и Python 3.8 теперь является последней функциональной версией Python 3.Загрузите последние выпуски 3.7.x и 3.8.x здесь. Мы планируем и дальше выпускать выпуски с исправлениями ошибок
    для 3.7.x до середины 2020 года и исправлений безопасности, до середины 2023 года.

    Среди основных новых функций Python 3.7:

    • PEP 539, новый C API для локального хранилища потоков
    • PEP 545, переводы документации Python
    • Новые переводы документации: японский,
      Французский и
      Корейский.
    • PEP 552, детерминированные файлы pyc
    • PEP 553, встроенная точка останова ()
    • PEP 557, классы данных
    • PEP 560, Основная поддержка модуля ввода и универсальных типов
    • PEP 562, Настройка доступа к атрибутам модуля
    • PEP 563, отложенная оценка аннотаций
    • PEP 564, Временные функции с наносекундным разрешением
    • PEP 565, Улучшенная обработка предупреждений об устаревании
    • PEP 567, переменные контекста
    • Отказ от использования ASCII в качестве кодировки текста по умолчанию (PEP 538, устаревшее принуждение локали C
      и PEP 540, принудительный режим выполнения UTF-8)
    • Сохранение порядка вставки объектов dict теперь является официальной частью спецификации языка Python.
    • Заметные улучшения производительности во многих областях.

    Дополнительные сведения см. В разделе «Что нового в Python 3.7».

    • Двоичные файлы для AMD64 также будут работать на процессорах, реализующих архитектуру Intel 64. (Также известна как архитектура «x64», ранее известная как «EM64T» и «x86-64».)
    • Теперь существуют «веб-установщики» для платформ Windows; установщик загрузит необходимые программные компоненты во время установки.
    • Существуют распространяемые zip-файлы, содержащие сборки Windows, что упрощает распространение Python как части другого программного пакета. Дополнительную информацию см. В документации по встроенному распространению.
    • Для версии 3.7.0 мы предоставляем для загрузки два варианта двоичного установщика. Вариант по умолчанию — только 64-разрядный и работает в macOS 10.9 (Mavericks) и более поздних версиях. Мы также продолжаем предоставлять 64-битный / 32-битный вариант, который работает во всех версиях macOS, начиная с 10.6 (Снежный барс) в. Оба варианта теперь поставляются с версиями Tcl / Tk 8.6 с батарейками для пользователей IDLE и других приложений с графическим интерфейсом на основе tkinter; сторонние и системные версии Tcl / Tk больше не используются. Рассмотрите возможность использования нового варианта установки только для 64-разрядной версии 10.9, если вы не создаете приложения Python, которые также должны работать в более старых системах macOS.
    • Оба варианта установщика python.org включают частные копии OpenSSL 1.1.0. Пожалуйста, внимательно прочтите важную информацию, отображаемую во время установки, для получения информации о проверке сертификатов SSL / TLS и установочных сертификатах.команда.

    Полный список изменений

    Как проверить версию Python в Windows / Linux / MacOS

    Введение

    Какую версию Python я установил?

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

    Из этого руководства вы узнаете, как проверить версию Python в системах Windows, Linux или macOS.

    Предварительные требования

    Доступ к командной строке / окно терминала :

    • Linux: Ctrl-Alt-T, Ctrl-Alt-F2
    • Windows: Win + R> введите powershell > Enter / OK
    • MacOS: Finder> Applications> Utilities> Terminal

    Существуют разные версии Python, но два самых популярных из них — Python 2.7.x и Python 3.7.x. x обозначает уровень ревизии и может измениться по мере выхода новых выпусков.

    Если смотреть на номер версии, обычно нужно читать три цифры:

    1. основная версия
    2. вспомогательная версия
    3. micro версия

    Хотя основные выпуски не полностью совместимы, второстепенные выпуски, как правило, совместимы. Версия 3.6.1 должна быть совместима, например, с 3.7.1.Последняя цифра означает последние исправления и обновления.

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

    Python 2 перестанет публиковать обновления безопасности и исправления после 2020 года. Они продлили крайний срок из-за большого количества разработчиков, использующих Python 2.7. Python 3 включает утилиту от 2 до 3 , которая помогает переводить код Python 2 в Python 3.

    Как проверить версию Python в Linux

    Большинство современных дистрибутивов Linux поставляются с предустановленным Python.

    Чтобы проверить установленную версию, откройте окно терминала и введите следующее:

      python –– версия  

    Как проверить версию Python в Windows

    В большинстве стандартных установок Windows не предустановлен Python. Однако всегда полезно проверить.

    Откройте Windows Powershell и введите следующее:

      python –– версия  

    Если у вас установлен Python, он сообщит номер версии.

    Или используйте функцию поиска Windows, чтобы узнать, какая у вас версия Python:

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

      Python 3.7 (32-разрядная версия)
    
    приложение  

    Или,

      Python 2.7 (32-разрядная версия)
    
    приложение  

    Определяет, какую основную и вспомогательную ревизии (3.x или 2.x) вы используете.

    Как проверить версию Python в MacOS

    При использовании MacOS проверьте версию Python, введя в терминал следующую команду:

      python - версия  

    Система сообщит версию.


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


    Проверка системы с помощью нескольких версий Python

    Python2 и Python3 — разные программы. Многие программы обновляются со старой версии до новой. Однако установки Python 2.7.x можно запускать отдельно от версии Python 3.7.x в той же системе.

    Python 3 не полностью обратно совместим.

    Чтобы проверить Python 2.7.x :

      python –– версия  

    Чтобы проверить версию программного обеспечения Python 3 :

      python3 –– версия  

    Большинство систем различают Python 2 как python и Python 3 как python3 .Если у вас нет Python 2, ваша система может использовать команду python вместо python3 .

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

    Как проверить версию Python в скрипте

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

    Используйте следующий фрагмент кода, чтобы проверить правильность версии Python:

      импорт sys  
     , если не sys.version_info.major == 3 и sys.version_info.minor> = 6:
    
        print («Требуется Python 3.6 или выше.»)
    
        print ("Вы используете Python {}. {}.". формат (sys.version_info.major, sys.version_info.minor))
    
        sys.exit (1)  

    Когда этот сценарий запускается, он проверяет, установлен ли в системе Python 3.6. Если нет, он отправит уведомление и отобразит текущую версию Python.

    Заключение

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

    История версий Python

    Python Software Foundation (PSF) используется для поддержки двух основных версий: Python 2.x и Python 3.x.
    PSF поддерживал Python 2, потому что большой объем существующего кода нельзя было напрямую перенести на Python 3.Итак, они поддерживали Python 2 до января 2020 года, но теперь они перестали его поддерживать.

    Python 3.0 был выпущен 3 декабря 2008 года. Он был разработан для исправления некоторых недостатков в более ранней версии. Эта версия не полностью обратно совместима с предыдущими версиями. Однако с тех пор многие из его основных функций были перенесены в серию версий Python 2.6.x и 2.7.x. Релизы Python 3 включают утилиты для облегчения автоматизации перевода кода Python 2 в Python 3.

    В следующей таблице перечислены все важные версии Python:

    Версия

    Дата выпуска

    Важные особенности

    Python 0.9.0

    Февраль 1991 г.

    • Классы с обработкой исключений наследования
    • Функции
    • Модули
    Python 1.0

    Январь 1994

    • Инструменты функционального программирования (лямбда, отображение, фильтрация и сокращение).
    • Поддержка комплексных чисел.
    • Функции с аргументами ключевого слова
    Python 2.0 Октябрь 2000 г.
    • Понимание списка.
    • Сборщик мусора с обнаружением цикла.
    • Поддержка Unicode. Унификация типов данных и классов
    Python 2.7.0 — EOL — январь 2020 г.

    Июль 2010 г.

    Python 3

    Декабрь 2008 г.

    • Обратная несовместимость.
    • ключевое слово print изменено на функцию print ()
    • Функция raw_input () устарела
    • Унифицированные типы str / Unicode.
    • Утилиты для автоматического преобразования кода Python 2.x
    Python 3.6

    Декабрь 2016 г.

    Python 3.6.5

    Март 2018 г.
    Python 3.7.0

    Май 2018 г.
    • Новый C API для локального хранилища потоков
    • Встроенная точка останова ()
    • Классы данных
    • Переменные контекста
    • Подробнее..
    Python 3.8 Октябрь 2019
    • Выражение присваивания
    • Только позиционные параметры
    • Кэш параллельной файловой системы для скомпилированных файлов байт-кода
    • Подробнее..
    Python 3.9 — Текущая версия Октябрь 2020
    • Операторы слияния и обновления словарей
    • Новые строковые методы removeprefix () и removeuffix ()
    • Встроенные универсальные типы
    • Подробнее..

    Управление несколькими версиями Python с помощью pyenv — Настоящий Python

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

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

    Из этой статьи вы узнаете, как:

    1. Установить несколько версий Python
    2. Установите последнюю разрабатываемую версию Python
    3. Переключение между установленными версиями
    4. Используйте виртуальные среды с pyenv
    5. Автоматическая активация различных версий Python и виртуальных сред

    Зачем использовать

    pyenv ?

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

    Почему бы не использовать системный Python?

    «Системный Python» — это Python, который устанавливается в вашей операционной системе. Если вы работаете на Mac или Linux, то по умолчанию, когда вы набираете python в своем терминале, вы получаете хороший Python REPL.

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

      $ какой питон
    / usr / bin / питон
      

    Здесь python доступен всем пользователям, о чем свидетельствует его расположение / usr / bin / python . Скорее всего, это не та версия Python, которая вам нужна:

      $ python -V
    Pyhton 2.7.12
      

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

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

    Даже если ваша версия Python установлена ​​в / usr / local / bin / python3 , вы все равно в опасности. Вы столкнетесь с теми же проблемами с разрешениями и гибкостью, которые описаны выше.

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

    Наконец, некоторые операционные системы фактически используют для работы упакованный Python. Возьмем, к примеру, yum , который интенсивно использует Python для выполнения своей работы. Если вы установите новую версию Python и не будете осторожны с ее установкой в ​​свое пользовательское пространство, вы можете серьезно повредить свою способность использовать свою ОС.

    Как насчет диспетчера пакетов?

    Следующее логичное место для поиска — менеджеры пакетов. Типичными следующими вариантами являются такие программы, как apt , yum , brew или port .В конце концов, именно так вы устанавливаете в свою систему большинство пакетов. К сожалению, вы столкнетесь с некоторыми из тех же проблем при использовании диспетчера пакетов.

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

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

    Даже если вы устанавливаете Python из диспетчера пакетов, подумайте, что произойдет, если вы пишете пакет и хотите поддерживать и тестировать Python 3.4–3.7.

    Что произойдет в вашей системе, если вы наберете python3 ? Как бы вы быстро переключились между разными версиями? Вы, конечно, можете это сделать, но это утомительно и подвержено ошибкам. Не обращайте внимания на тот факт, что если вы хотите PyPy, Jython или Miniconda, то вам, вероятно, просто не повезло с вашим менеджером пакетов.

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

    1. Установите Python в свое пользовательское пространство
    2. Установить несколько версий Python
    3. Укажите точную версию Python, которую вы хотите
    4. Переключение между установленными версиями

    pyenv позволяет делать все это и многое другое.

    Установка

    pyenv

    Перед установкой самого pyenv вам потребуются некоторые зависимости от ОС.Эти зависимости в основном представляют собой утилиты разработки, написанные на C, и они необходимы, потому что pyenv устанавливает Python путем сборки из исходного кода. Для более подробной разбивки и объяснения зависимостей сборки вы можете ознакомиться с официальной документацией. В этом руководстве вы увидите наиболее распространенные способы установки этих зависимостей.

    Примечание. pyenv изначально не поддерживал Windows. Однако, похоже, есть некоторая базовая поддержка проекта pyenv-win, который недавно стал активным.Если вы используете Windows, не стесняйтесь проверить это.

    Зависимости сборки

    pyenv собирает Python из исходного кода, что означает, что для фактического использования pyenv вам потребуются зависимости сборки. Зависимости сборки зависят от платформы. Если вы используете Ubuntu / Debian и хотите установить зависимости сборки, вы можете использовать следующее:

      $ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
    libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
      

    Использует Apt для установки всех зависимостей сборки.Позвольте этому поработать, и вы будете готовы перейти на системы Debian.

    Если вы используете Fedora / CentOS / RHEL , вы можете использовать yum для установки зависимостей сборки:

      $ sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite \
    sqlite-devel openssl-devel xz xz-devel libffi-devel
      

    Эта команда установит все зависимости сборки для Python с использованием yum .

    Пользователи macOS могут использовать следующую команду:

      $ brew установить openssl readline sqlite3 xz zlib
      

    Эта команда использует Homebrew и устанавливает несколько зависимостей для пользователей macOS.

    Совет: При использовании Mojave или более поздней версии (10.14+) вам также потребуется установить дополнительные заголовки SDK:

      $ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
      

    Спасибо Rodrigo Viera за обновление.

    Если вместо этого вы используете openSUSE , вы должны запустить следующее:

      $ zypper в zlib-devel bzip2 libbz2-devel libffi-devel \
    libopenssl-devel, readline-devel, sqlite3, sqlite3-devel, xz, xz-devel
      

    Еще раз, эта команда устанавливает все зависимости сборки Python для вашей системы.

    Наконец, для пользователей Alpine вы можете использовать это:

      $ apk добавить libffi-dev ncurses-dev openssl-dev readline-dev \
    tk-dev xz-dev zlib-dev
      

    Эта команда использует apk в качестве диспетчера пакетов и устанавливает все зависимости сборки для Python на Alpine.

    Использование программы установки pyenv

    После того, как вы установили зависимости сборки, вы готовы к установке самого pyenv . Рекомендую использовать проект pyenv-installer:

      $ curl https: // pyenv.запустить | трепать
      

    Это установит pyenv вместе с несколькими полезными плагинами:

    1. pyenv : фактическое приложение pyenv
    2. pyenv-virtualenv : Плагин для pyenv и виртуальных сред
    3. pyenv-update : Плагин для обновления pyenv
    4. pyenv-doctor : Плагин для проверки того, что pyenv и зависимости сборки установлены
    5. pyenv-which-ext : Плагин для автоматического поиска системных команд

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

    В конце прогона вы должны увидеть что-то вроде этого:

      ВНИМАНИЕ: кажется, вы все еще не добавили pyenv в путь загрузки.
    
    Загрузите pyenv автоматически, добавив
    следующее в ~ / .bashrc:
    
    экспорт PATH = "$ HOME / .pyenv / bin: $ PATH"
    eval "$ (pyenv init -)"
    eval "$ (pyenv virtualenv-init -)"
      

    Вывод будет основан на вашей оболочке.Но вы должны следовать инструкциям, чтобы добавить pyenv к своему пути и инициализировать автоматическое завершение pyenv / pyenv-virtualenv . Как только вы это сделаете, вам нужно перезагрузить оболочку:

      $ exec "$ SHELL" # Или просто перезапустите терминал
      

    Вот и все. Теперь у вас установлено pyenv и четыре полезных плагина.

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

    pyenv для установки Python

    Теперь, когда у вас установлено pyenv , следующим шагом будет установка Python.У вас есть множество версий Python на выбор. Если вы хотите увидеть все доступные CPython от 3.6 до 3.8, вы можете сделать это:

      $ pyenv install --list | grep "3 \. [678]"
      3.6.0
      3.6-разработчик
      3.6.1
      3.6.2
      3.6.3
      3.6.4
      3.6.5
      3.6.6
      3.6.7
      3.6.8
      3.7.0
      3.7-разработчик
      3.7.1
      3.7.2
      3.8-dev
      

    Выше показаны все версии Python, о которых знает pyenv , которые соответствуют регулярному выражению. В данном случае это все доступные версии CPython 3.С 6 по 3.8. Точно так же, если вы хотите увидеть все версии Jython, вы можете сделать это:

      $ pyenv install --list | grep "jython"
      jython-dev
      jython-2.5.0
      jython-2.5-dev
      jython-2.5.1
      jython-2.5.2
      jython-2.5.3
      jython-2.5.4-rc1
      jython-2.7.0
      jython-2.7.1
      

    Опять же, вы можете увидеть все версии Jython, которые предлагает pyenv . Если вы хотите увидеть все версии, вы можете сделать следующее:

      $ pyenv install --list
    ...
    # Много
      

    Как только вы найдете нужную версию, вы можете установить ее с помощью одной команды:

      $ pyenv install -v 3.7.2
    /tmp/python-build.201022403.30568 ~
    Скачивание Python-3.7.2.tar.xz ...
    -> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
    Установка Python-3.7.2 ...
    /tmp/python-build.201022403.30568/Python-3.7.2 /tmp/python-build.201022403.30568 ~
    [...]
    Установка собранных пакетов: setuptools, pip
    Успешно установлен пип-18.1 setuptools-40.6.2
    Установлен Python-3.7.2 в /home/realpython/.pyenv/versions/3.7.2
      

    Это займет некоторое время, потому что pyenv создает Python из исходных текстов, но как только это будет сделано, на вашем локальном компьютере будет доступен Python 3.7.2. Если вы не хотите видеть весь вывод, просто удалите флаг -v . Могут быть установлены даже разрабатываемые версии CPython:

    Pro Совет: Если вы какое-то время использовали pyenv и не видите нужную версию, вам может потребоваться запустить pyenv update , чтобы обновить инструмент и убедиться, что у вас есть доступ до последних версий.

    В оставшейся части руководства в примерах предполагается, что вы установили 3.6.8 и 2.7.15 , но вы можете заменить эти значения на фактически установленные вами версии Python. Также обратите внимание, что системная версия Python в примерах — 2.7.12 .

    Место установки

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

      $ ls ~ /.pyenv / версии /
    2.7.15 3.6.8 3.8-дев
      

    Здесь будут находиться все ваши версии. Это удобно, потому что удалить эти версии тривиально:

      $ rm -rf ~ / .pyenv / versions / 2.7.15
      

    Конечно, pyenv также предоставляет команду для удаления определенной версии Python:

    Использование вашего нового Python

    Теперь, когда вы установили несколько разных версий Python, давайте посмотрим, как их использовать. Сначала проверьте, какие версии Python у вас доступны:

      $ версии pyenv
    * system (устанавливается / home / realpython /.pyenv / версия)
      2.7.15
      3.6.8
      3.8-dev
      

    * указывает, что в настоящее время активна версия Python системы . Вы также заметите, что это устанавливается файлом в корневом каталоге pyenv . Это означает, что по умолчанию вы все еще используете свою систему Python:

    .

      $ python -V
    Python 2.7.12
      

    Если вы попытаетесь подтвердить это с помощью , а не , вы увидите следующее:

      $ какой питон
    / главная / realpython /.pyenv / прокладки / питон
      

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

      $ pyenv какой питон
    / usr / bin / питон
      

    Если, например, вы хотите использовать версию 2.7.15, вы можете использовать команду global :

      $ pyenv global 2.7,15
    $ python -V
    Python 2.7.15
    
    версии $ pyenv
      система
    * 2.7.15 (установлено /home/realpython/.pyenv/version)
      3.6.8
      3.8-dev
      

    Pro Tip: Отличный способ убедиться в том, что только что установленная версия Python работает правильно, — это запустить встроенный набор тестов:

      $ pyenv global 3.8-dev
    $ python -m тест
      

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

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

      $ глобальная система pyenv
    $ python -V
    Python 2.7.12
      

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

    Изучение

    команд pyenv

    pyenv предлагает множество команд. Вы можете увидеть полный список всех доступных команд:

      $ pyenv команды
    активировать
    команды
    завершение
    деактивировать
    ...
    virtualenvs
    откуда
    который
      

    Выводит все имена команд. У каждой команды есть флаг --help , который предоставит вам более подробную информацию. Например, если вы хотите получить дополнительную информацию о команде shims , вы можете запустить следующее:

      $ шайбы pyenv --help
    Использование: прокладки pyenv [--short]
    
    Перечислить существующие прокладки pyenv
      

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

    установить

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

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

    Флаг Описание
    -л / - список Перечисляет все доступные версии Python для установки
    -g / - отладка Строит отладочную версию Python
    -v / - подробный Подробный режим: вывод состояния компиляции на стандартный вывод

    версии

    Команда versions отображает все установленные на данный момент версии Python:

      $ версии pyenv
    * system (устанавливается / home / realpython /.pyenv / версия)
      2.7.15
      3.6.8
      3.8-dev
      

    Этот вывод показывает не только то, что установлены 2.7.15 , 3.6.8 , 3.8-dev и ваша система Python, но также показывает, что система Python активна. Если вас интересует только текущая активная версия, вы можете использовать следующую команду:

      $ версия pyenv
    система (устанавливается /home/realpython/.pyenv/version)
      

    Эта команда аналогична команде версии , но показывает только текущую активную версию Python.

    , из которых

    Команда which помогает определить полный путь к исполняемому файлу системы. Поскольку pyenv работает с использованием прокладок, эта команда позволяет увидеть полный путь к исполняемому файлу pyenv . Например, если вы хотите увидеть, где установлен pip , вы можете запустить это:

      $ pyenv который пип
    /home/realpython/.pyenv/versions/3.6.8/bin/pip
      

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

    глобальный

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

    Эта команда устанавливает ~ / .pyenv / version на 3.6.8 . Для получения дополнительной информации см. Раздел, посвященный указанию вашей версии Python.

    местный

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

    Эта команда создает файл .python-version в вашем текущем каталоге. Если в вашей среде активен pyenv , этот файл автоматически активирует эту версию для вас.

    оболочка

    Команда оболочки используется для установки версии Python для конкретной оболочки.Например, если вы хотите протестировать версию Python 3.8-dev , вы можете сделать это:

    Эта команда активирует версию, указанную путем установки переменной среды PYENV_VERSION . Эта команда перезаписывает любые приложения или глобальные настройки, которые у вас могут быть. Если вы хотите деактивировать версию, вы можете использовать флаг --unset .

    Указание версии Python

    Одна из наиболее запутанных частей pyenv — это то, как именно разрешается команда python и какие команды можно использовать для ее изменения.Как упоминалось в командах, есть 3 способа изменить используемую версию python . Так как же все эти команды взаимодействуют друг с другом? Порядок разрешения выглядит примерно так:

    Эту пирамиду нужно читать сверху вниз. Первый из этих параметров, который может найти pyenv , — это вариант, который он будет использовать. Давайте посмотрим на быстрый пример:

      $ версии pyenv
    * система (устанавливается /home/realpython/.pyenv/version)
      2.7.15
      3.6,8
      3.8-dev
      

    Здесь используется ваша система Python, как обозначено * . Чтобы применить следующую по глобальному значению настройку, вы используете global :

      $ pyenv global 3.6.8
    версии $ pyenv
      система
      2.7.15
    * 3.6.8 (устанавливается /home/realpython/.pyenv/version)
      3.8-dev
      

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

      $ cat ~ / .pyenv / version
    3.6.8
      

    Теперь давайте создадим файл .python-version с local :

      $ pyenv местный 2.7.15
    версии $ pyenv
      система
    * 2.7.15 (устанавливается /home/realpython/.python-version)
      3.6.8
      3.8-dev
    $ ls -a
    . .. .python-версия
    $ cat .python-версия
    2.7.15
      

    Здесь снова pyenv указывает, как он разрешит нашу команду python .На этот раз он исходит от ~ / .python-version . Обратите внимание, что поиск .python-version является рекурсивным:

      подкаталог $ mkdir
    подкаталог $ cd
    $ ls -la # Уведомление об отсутствии файла .python-version
    . ..
    версии $ pyenv
      система
    * 2.7.15 (устанавливается /home/realpython/.python-version)
      3.6.8
      3.8-dev
      

    Несмотря на то, что в подкаталоге нет .python-version , для версии по-прежнему установлено значение 2.7.15 , потому что .python-version существует в родительском каталоге.

    Наконец, вы можете установить версию Python с оболочкой :

      $ оболочка pyenv 3.8-dev
    версии $ pyenv
      система
      2.7.15
      3.6.8
    * 3.8-dev (устанавливается переменной окружения PYENV_VERSION)
      

    Все, что это было сделано, это установка переменной окружения $ PYENV_VERSION :

      $ echo $ PYENV_VERSION
    3.8-dev
      

    Если вас ошеломили варианты, в разделе о работе с несколькими средами будет рассмотрен самоуверенный процесс управления этими файлами, в основном с использованием local .

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

    pyenv

    Виртуальные среды являются важной частью управления установками и приложениями Python. Если вы раньше не слышали о виртуальных средах, вы можете ознакомиться с Python Virtual Environments: A Primer.

    Виртуальные среды и pyenv — это союз, заключенный на небесах. pyenv имеет замечательный плагин под названием pyenv-virtualenv , который упрощает работу с несколькими виртуальными средами версии Python и .Если вам интересно, в чем разница между pyenv , pyenv-virtualenv и такими инструментами, как virtualenv или venv , тогда не беспокойтесь. Ты не одинок.

    Вот что вам нужно знать:

    • pyenv управляет несколькими версиями самого Python.
    • virtualenv / venv управляет виртуальными средами для определенной версии Python.
    • pyenv-virtualenv управляет виртуальными средами для разных версий Python.

    Если вы упорный пользователь virtualenv или venv , не волнуйтесь: pyenv отлично работает с любым из них. Фактически, вы можете сохранить тот же рабочий процесс, который у вас был, если хотите, хотя я думаю, что pyenv-virtualenv упрощает работу при переключении между несколькими средами, требующими разных версий Python.

    Хорошая новость заключается в том, что, поскольку вы использовали сценарий pyenv-installer для установки pyenv , у вас уже установлен и готов к работе pyenv-virtualenv .

    Создание виртуальных сред

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

      $ pyenv virtualenv  
      

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

    — это просто название, которое поможет вам разделить ваши среды.Хорошая практика — давать своим средам то же имя, что и ваш проект. Например, если вы работали над myproject и хотели разработать против Python 3.6.8, вы должны запустить это:

      $ pyenv virtualenv 3.6.8 myproject
      

    Вывод включает сообщения, которые показывают установку пары дополнительных пакетов Python, а именно wheel , pip и setuptools . Это сделано исключительно для удобства и просто настраивает более полнофункциональную среду для каждой из ваших виртуальных сред.

    Активация ваших версий

    Теперь, когда вы создали виртуальную среду, следующий шаг — ее использование. Обычно вы должны активировать свои среды, запустив следующее:

    Вы уже видели команду pyenv local ранее, но на этот раз вместо указания версии Python вы указываете среду. Это создает файл .python-version в вашем текущем рабочем каталоге, и поскольку вы запустили eval "$ (pyenv virtualenv-init -)" в своей среде, среда будет автоматически активирована.

    Вы можете проверить это, запустив следующее:

      $ pyenv какой питон
    /home/realpython/.pyenv/versions/myproject/bin/python
      

    Вы можете видеть, что была создана новая версия под названием myproject , и исполняемый файл python указывает на эту версию. Если вы посмотрите на любой исполняемый файл, который предоставляет эта среда, вы увидите то же самое. Возьмем, например, пипс :

      $ pyenv который пип
    / главная / realpython /.pyenv / версии / мойпроект / бен / пип
      

    Если вы не настроили eval "$ (pyenv virtualenv-init -)" для запуска в вашей оболочке, вы можете вручную активировать / деактивировать свои версии Python с помощью этого:

      $ pyenv activate 
    $ pyenv деактивировать
      

    Вышеупомянутое — это то, что делает pyenv-virtualenv , когда он входит или выходит из каталога с файлом .python-version в нем.

    Работа с несколькими средами

    Объединив все, чему вы научились, вы можете эффективно работать в нескольких средах.Предположим, у вас установлены следующие версии:

      $ версии pyenv
    * система (устанавливается /home/realpython/.pyenv/version)
      2.7.15
      3.6.8
      3.8-dev
      

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

    1. project1 поддерживает Python 2.7 и 3.6.
    2. project2 поддерживает Python 3.6 и экспериментирует с 3.8-dev.

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

      $ cd project1 /
    $ pyenv какой питон
    / usr / bin / питон
    $ pyenv virtualenv 3.6.8 проект1
    ...
    $ pyenv локальный проект1
    $ python -V
    /home/realpython/.pyenv/versions/project1/bin/python
      

    Наконец, обратите внимание, что когда вы cd выходите из каталога, вы по умолчанию возвращаетесь к системе Python:

      $ cd $ ГЛАВНАЯ
    $ pyenv какой питон
    / usr / bin / питон
      

    Вы можете выполнить описанные выше шаги и создать виртуальную среду для project2:

      $ cd project2 /
    $ pyenv какой питон
    / usr / bin / питон
    $ pyenv virtualenv 3.8 разработчиков проект2
    ...
    $ pyenv local 3.8-dev
    $ pyenv какой питон
    /home/realpython/.pyenv/versions/3.8-dev/bin/python
      

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

      $ cd project2 /
    $ python -V
    Python 3.8.0a0
    $ cd ../project1
    $ python -V
    Python 3.6.8
      

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

    Одновременная активация нескольких версий

    Как описано в примере выше, project2 использует экспериментальные функции версии 3.8. Предположим, вы хотите убедиться, что ваш код по-прежнему работает на Python 3.6. Если вы попробуете запустить python3.6 , вы получите следующее:

      $ cd project2 /
    $ python3.6 -V
    pyenv: python3.6: команда не найдена
    
    Команда `python3.6 'существует в следующих версиях Python:
      3.6.8
      3.6.8 / envs / project1
      проект1
      

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

      $ pyenv локальный проект2 3.6.8
      

    Это указывает для pyenv , что вы хотели бы использовать виртуальную среду project2 в качестве первого варианта. Поэтому, если команда, например python , может быть разрешена в обеих средах, она выберет project2 перед 3.6,8 . Посмотрим, что произойдет, если вы запустите это:

      $ python3.6 -V
    Python 3.6.8
      

    Здесь pyenv пытается найти команду python3.6 и, поскольку он находит ее в активной среде, разрешает выполнение команды. Это чрезвычайно полезно для таких инструментов, как tox, для выполнения которых на вашем PATH должны быть доступны несколько версий Python.

    Pro Совет: Если вы используете tox и pyenv , вам следует проверить пакет tox-pyenv.

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

      $ pyenv virtualenv 3.6.8 project2-tmp
    $ pyenv локальный проект2-tmp
      

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

      $ pyenv локальный проект2 3.6,8
      

    Заключение

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

    Вы видели, как pyenv может вам помочь:

    • Установить несколько версий Python
    • Переключение между установленными версиями
    • Используйте виртуальные среды с pyenv
    • Автоматическая активация различных версий Python и виртуальных сред

    Если у вас все еще есть вопросы, не стесняйтесь обращаться в раздел комментариев или в Twitter.Кроме того, документация pyenv — отличный ресурс.

    Бонус: отображение имени вашей среды в командной строке

    Если вы похожи на меня и постоянно переключаетесь между различными виртуальными средами и версиями Python, легко запутаться, какая версия активна в данный момент. Я использую oh-my-zsh и тему agnoster, что по умолчанию заставляет мою подсказку выглядеть так:

    На первый взгляд, я не знаю, какая версия Python активна. Чтобы понять это, мне пришлось бы запустить python -V или pyenv версии .Чтобы сократить время, затрачиваемое на выяснение моей активной среды Python, я добавляю используемую виртуальную среду pyenv в свою подсказку:

    Моя версия Python в данном случае — project1-venv и отображается сразу в начале приглашения. Это позволяет мне сразу увидеть, какую версию Python я использую. Если вы тоже хотите использовать это, вы можете использовать мою тему agnoster-pyenv.

    .

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *