Python в 2021: расписание релизов и основные функции
На данный момент мы используем Python 3.8, а последняя стабильная версия 3.8.4 была выпущена совсем недавно. Python 3.9 уже находится на стадии бета-тестирования, а его первый стабильный релиз ожидается в октябре 2020 года. В мае 2020 года также началась разработка Python 3.10, а его первая бета-версия ожидается в мае 2021 года.
Фанатов Python, несомненно, ждут интересные времена. Просматривая расписание релизов трех версий (3.8, 3.9 и 3.10), я решил составить хронологию разработки Python с ключевыми датами.
Обычно в цикле разработки представлено 4–5 бета-версий, и новые функции не появляются уже после первой. Бета-1 для 3.8 была выпущена в июне 2019 года, а бета-1 для 3.9 — в мае 2020 года. И хотя работа над будущим Python 3.10 только началась, на официальном сайте уже появился краткий обзор некоторых из его основных особенностей.
Кратко рассмотрим основные функции будущей версии Python с официальными примерами. Обратите внимание, что в версии 3.10 может появиться еще больше новых функций.
Основные функции Python 3.10
1) Частотность 1 в двоичном представлении
В Python 3.10 будет представлен новый метод bit_count() , возвращающий число единиц в двоичном представлении целого числа. Результат будет независим от знака целого числа. Эта функциональность может пригодиться в теории информации для нахождения общего количества мест различий двух строк одинаковой длины. Эта разница называется расстоянием Хэмминга. Если вас интересует история этой функциональности в Python, ее можно почитать здесь (eng).
Внутри этого метода происходит вызов метода count типа str как str.count('1') . Следующий пример объясняет этот процесс:
2) «Более строгое» архивирование
В функцию zip будет добавлен новый опциональный именованный аргумент strict . При передаче strict=True итерируемые объекты в zip должны быть одинаковой длины, иначе возникнет ошибка ValueError . До версии Python 3.9 при архивировании двух списков разной длины вывод был равен длине меньшего списка.
Как видно из следующего примера, до Python 3.10 функция zip() игнорировала 'D' в первом списке, не имеющий совпадений во втором. А Python 3.10 в этом случае вызовет ошибку ValueError . Полезная функция, побуждающая пересмотреть вводные данные. Подробнее об этой теме можно почитать на PEP 618.
До Python 3.10:
В Python 3.10:
3) Представления для словарей с доступом только для чтения
Три ключевых метода словарей keys() , values() и items() возвращают подобные наборам объекты, которые соответствуют динамическому представлению ключей, значений и элементов словарей. Любые изменения в одном из этих представлений будут отражены в исходном словаре.
В Python 3.10 все возвращенные из этих трех методов представления будут иметь дополнительный атрибут mapping , возвращающий доступный только для чтения прокси отображения. Он будет оборачивать исходный словарь, на который ссылается представление. Следующий пример иллюстрирует этот процесс.
Определяем словарь и сохраняем его ключи и значения в разных переменных:
Удаляем два элемента из этого словаря с помощью оператора del . Теперь при запросе ключей и значений он возвращает только оставшиеся элементы. Изменения в исходном словаре отражаются в представлениях (в данном случае keys и values ).
Теперь с помощью mapping можно получить доступный только для чтения прокси исходного словаря!
4) Удаление некоторых обратных совместимостей
В Python 3.10 и версиях выше будет прекращена поддержка псевдонимов для абстрактных базовых классов (Abstract Base Classes — ABC) из модуля collections. Самое время обратить внимание на соответствующие предупреждения об устаревании и адаптировать свой код!
До Python 3.9.0b4 (выпущен 3 июля 2020 года):
При импорте любого из этих ABC напрямую из модуля collections будет появляться DeprecationWarning :
Вот и все! Вы также можете следить за расписаниями релизов для текущих и будущих версий здесь: 3.8, 3.9, 3.10.
Download the latest version of Python

All Python releases are Open Source. Historically, most, but not all, Python releases have also been GPL-compatible. The Licenses page details GPL-compatibility and Terms and Conditions.
Sources
For most Unix systems, you must download and compile the source code. The same source code archive can also be used to build the Windows and Mac versions, and is the starting point for ports to all other platforms.
Download the latest Python 3 source.
Alternative Implementations
This site hosts the «traditional» implementation of Python (nicknamed CPython). A number of alternative implementations are available as well.
History
Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum in the Netherlands as a successor of a language called ABC. Guido remains Python’s principal author, although it includes many contributions from others.
Release Schedules
See Status of Python Versions for all an overview of all versions, including unsupported.
Information about specific ports, and developer info
OpenPGP Public Keys
Source and binary executables are signed by the release manager or binary builder using their OpenPGP key. Release files for currently supported releases are signed by the following:
- Thomas Wouters (3.12.x and 3.13.x source files and tags) (key id: A821E680E5FA6305) (key id: 64E628F8D684696D) (key id: FC62 4643 4870 34E5) (key id: B269 95E3 1025 0568) (key ids: 2D34 7EA6 AA65 421D, FB99 2128 6F5E 1540, and Apple Developer ID DJ3H93M7VJ)
- Larry Hastings (3.5.x source files and tags) (key id: 3A5C A953 F73C 700D) (key id: 04C3 67C2 18AD D4FF and A4135B38)
Release files for older releases which have now reached end-of-life may have been signed by one of the following:
- Anthony Baxter (key id: 0EDD C5F2 6A45 C816)
- Georg Brandl (key id: 0A5B 1018 3658 0288)
- Martin v. Löwis (key id: 6AF0 53F0 7D9D C8D2)
- Ronald Oussoren (key id: C9BE 28DE E6DF 025C) (key ids: 126E B563 A74B 06BF, D986 6941 EA5B BD71, and ED9D77D5)
You can import a person’s public keys from a public keyserver network server you trust by running a command like:
or, in many cases, public keys can also be found at keybase.io. On the version-specific download pages, you should see a link to both the downloadable file and a detached signature file. To verify the authenticity of the download, grab both files and then run this command:
Note that you must use the name of the signature file, and you should use the one that’s appropriate to the download you’re verifying.
- (These instructions are geared to GnuPG and Unix command-line users.)
Other Useful Items
- Looking for 3rd party Python modules? The Package Index has many of them.
- You can view the standard documentation online, or you can download it in HTML, PostScript, PDF and other formats. See the main Documentation page.
- Information on tools for unpacking archive files provided on python.org is available.
- Tip: even if you download a ready-made binary for your platform, it makes sense to also download the source. This lets you browse the standard library (the subdirectory Lib) and the standard collections of demos (Demo) and tools (Tools) that come with it. There’s a lot you can learn from the source!
- There is also a collection of Emacs packages that the Emacsing Pythoneer might find useful. This includes major modes for editing Python, C, C++, Java, etc., Python debugger interfaces and more. Most packages are compatible with Emacs and XEmacs.
Want to contribute?
Want to contribute? See the Python Developer’s Guide to learn about how Python development is managed.
Выход стабильной версии 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.
Для слияния: |
Для обновления: |=
Ключевое правило, которое следует запомнить, заключается в том, что если есть какие-либо конфликты ключей, то самое правое значение будет сохранено.
Безусловно, у многих питонистов возникнет вопрос, зачем это нужно, если уже есть привычный всем вариант
На этот вопрос был дан ответ в самом PEP:
PEP 585
Generics подсказки типов в стандартных коллекциях.
Generic — тип, который можно параметризовать, некий контейнер. Также известен как параметрический тип или универсальный тип.
В выпуске включена поддержка универсального синтаксиса во всех стандартных коллекциях, доступных в настоящее время в модуле «Typing». Мы можем использовать типы list или dict в качестве универсальных типов вместо использования typing.List или typing.Dict.
PEP 615
Поддержка базы данных часовых поясов IANA в стандартной библиотеке.
IANA часовые пояса часто называют tz или zone info. Существует большое количество часовых поясов IANA с разными путями поиска для указания часового пояса IANA для объекта даты и времени. Например, мы можем передать имя пути поиска как Континент/Город datetime объекту, чтобы установить его tzinfo.
Если мы передадим неверный ключ, будет вызвано исключение
PEP 616
Новые строковые функции для удаления префикса и суффикса.
К str объекту добавлены две новые функции.
- Первая функция удаляет префикс.
- Вторая функция удаляет суффикс.
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
- reuse_address параметр asyncio.loop.create_datagram_endpoint() больше не поддерживаются из-за значительных проблем в области безопасности.
- Добавлены новые coroutines, shutdown_default_executor() и сопрограммы asyncio.to_thread(). Новый вызов asyncio.to_thread() используется для запуска функций, связанных с вводом-выводом, в отдельном потоке, чтобы избежать блокировки цикла событий.
Этот метод явно закрывает очередь. Это гарантирует, что очередь будет закрыта и не останется дольше ожидаемого. Важно помнить, что методы 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
Можно было бы ожидать увидеть |
issue39648, issue39479, issue39288, issue39310
Изменения в модуле «math».
Возвращает наименьшее общее кратное целых аргументов:
Возвращает наибольший общий делитель целочисленных аргументов. В более ранней версии поддерживалось только два аргумента. Добавлена поддержка произвольного количества аргументов:
Вычисляет ближайшее к «x» число с плавающей точкой, если двигаться в направлении «y«.
Этот метод возвращает значение младшего бита числа с плавающей запятой x.
issue38870
В модуль ast добавили метод unparse.
Новый метод может использоваться для создания строки с кодом и его последующего выполнения.
issue39507, issue39509
Добавление новых кодов в http.HTTPStatus.
PEP 614
Ослабление грамматических ограничений для декораторов.
То теперь можно убрать лишние присваивания и вызывать напрямую:
«Кортеж должен быть заключен в круглые скобки»
Это основано на видении Гвидо в том же письме. Цитата:
Но запятых я не допущу. Я не могу согласиться с этим
issue17005
Новый модуль graphlib предоставляет функциональные возможности для топологической сортировки графа хешируемых узлов.
Подробнее можно ознакомиться в документации.
UPD: ifinik 
Граф можно передавать не сразу, а заполнять TopologicalSorter с помощью метода add. Кроме того класс адаптирован к параллельным вычислениям и может быть использован, например, для создания очереди задач.
issue37630, issue40479
Обновление библиотеки hashlib.
Теперь hashlib может использовать хэши SHA3 и SHAKE XOF из OpenSSL.
Встроенные хэш-модули теперь могут быть отключены или выборочно включены, например, для принудительного использования реализации на основе OpenSSL.
Оптимизация
Сводка улучшений производительности от Python 3.4 до Python 3.9:
Сценарий теста отображает время в наносекундах. Тесты были выполнены на процессоре Intel Core i7-4960HQ. Код теста можно найти в репозитории по адресу «Tools/scripts/var_access_benchmark.py».
Благодарю за внимание.
Ссылка на официальное руководство Python 3.9.
Отпишитесь в комментарии, если что-то было упущено.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.rst
This is Python version 3.12.0 alpha 6
Copyright © 2001-2023 Python Software Foundation. All rights reserved.
See the end of this file for further copyright and license information.
- Website: https://www.python.org
- Source code: https://github.com/python/cpython
- Issue tracker: https://github.com/python/cpython/issues
- Documentation: https://docs.python.org
- Developer’s Guide: https://devguide.python.org/
For more complete instructions on contributing to CPython development, see the Developer Guide.
Installable Python kits, and information about using Python, are available at python.org.
On Unix, Linux, BSD, macOS, and Cygwin:
This will install Python as python3 .
You can pass many options to the configure script; run ./configure —help to find out more. On macOS case-insensitive file systems and on Cygwin, the executable is called python.exe ; elsewhere it’s just python .
Building a complete Python installation requires the use of various additional third-party libraries, depending on your build platform and configure options. Not all standard library modules are buildable or useable on all platforms. Refer to the Install dependencies section of the Developer Guide for current detailed information on dependencies for various Linux distributions and macOS.
On macOS, there are additional configure and build options related to macOS framework and universal builds. Refer to Mac/README.rst.
If you wish, you can create a subdirectory and invoke configure from there. For example:
(This will fail if you also built at the top-level directory. You should do a make clean at the top-level first.)
To get an optimized build of Python, configure —enable-optimizations before you run make . This sets the default make targets up to enable Profile Guided Optimization (PGO) and may be used to auto-enable Link Time Optimization (LTO) on some platforms. For more details, see the sections below.
PGO takes advantage of recent versions of the GCC or Clang compilers. If used, either via configure —enable-optimizations or by manually running make profile-opt regardless of configure flags, the optimized build process will perform the following steps:
The entire Python directory is cleaned of temporary files that may have resulted from a previous compilation.
An instrumented version of the interpreter is built, using suitable compiler flags for each flavor. Note that this is just an intermediary step. The binary resulting from this step is not good for real-life workloads as it has profiling instructions embedded inside.
After the instrumented interpreter is built, the Makefile will run a training workload. This is necessary in order to profile the interpreter’s execution. Note also that any output, both stdout and stderr, that may appear at this step is suppressed.
The final step is to build the actual interpreter, using the information collected from the instrumented one. The end result will be a Python binary that is optimized; suitable for distribution or production installation.
Enabled via configure’s —with-lto flag. LTO takes advantage of the ability of recent compiler toolchains to optimize across the otherwise arbitrary .o file boundary when building final executables or shared libraries for additional performance gains.
We have a comprehensive overview of the changes in the What’s New in Python 3.12 document. For a more detailed change log, read Misc/NEWS, but a full accounting of changes can only be gleaned from the commit history.
If you want to install multiple versions of Python, see the section below entitled «Installing multiple versions».
It can also be downloaded in many formats for faster access. The documentation is downloadable in HTML, PDF, and reStructuredText formats; the latter version is primarily for documentation authors, translators, and people with special formatting requirements.
For information about building Python’s documentation, refer to Doc/README.rst.
Significant backward incompatible changes were made for the release of Python 3.0, which may cause programs written for Python 2 to fail when run with Python 3. For more information about porting your code from Python 2 to Python 3, see the Porting HOWTO.
To test the interpreter, type make test in the top-level directory. The test set produces some output. You can generally ignore the messages about skipped tests due to optional features which can’t be imported. If a message is printed about a failed test or a traceback or core dump is produced, something is wrong.
By default, tests are prevented from overusing resources like disk space and memory. To enable these tests, run make testall .
If any tests fail, you can re-run the failing test(s) in verbose mode. For example, if test_os and test_gdb failed, you can run:
If the failure persists and appears to be a problem with Python rather than your environment, you can file a bug report and include relevant output from that command to show the issue.
See Running & Writing Tests for more on running tests.
On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix ( —prefix argument to the configure script) you must take care that your primary python executable is not overwritten by the installation of a different version. All files and directories installed using make altinstall contain the major and minor version and can thus live side-by-side. make install also creates $
For example, if you want to install Python 2.7, 3.6, and 3.12 with 3.12 being the primary version, you would execute make install in your 3.12 build directory and make altinstall in the others.
Bug reports are welcome! You can use Github to report bugs, and/or submit pull requests.
You can also follow development discussion on the python-dev mailing list.
If you have a proposal to change Python, you may want to send an email to the comp.lang.python or python-ideas mailing lists for initial feedback. A Python Enhancement Proposal (PEP) may be submitted if your idea gains ground. All current PEPs, as well as guidelines for submitting a new PEP, are listed at peps.python.org.
See PEP 693 for Python 3.12 release details.
Copyright © 2001-2023 Python Software Foundation. All rights reserved.
Copyright © 2000 BeOpen.com. All rights reserved.
Copyright © 1995-2001 Corporation for National Research Initiatives. All rights reserved.
Copyright © 1991-1995 Stichting Mathematisch Centrum. All rights reserved.
See the LICENSE for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES.
This Python distribution contains no GNU General Public License (GPL) code, so it may be used in proprietary projects. There are interfaces to some GNU code but these are entirely optional.
All trademarks referenced herein are property of their respective holders.