mac.md
1> **Источник:** https://python-all.ru/3.16/using/mac.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 5. Использование Python на macOS89Этот документ представляет обзор особенностей macOS, которые полезно знать, чтобы начать работу с Python на компьютерах Mac. Python на Mac под управлением macOS очень похож на Python на других Unix-подобных платформах, но есть некоторые различия в установке и некоторых возможностях.1011Существуют различные способы получения и установки Python для macOS. Предварительно собранные версии последних версий Python доступны у ряда дистрибьюторов. Большая часть этого документа описывает использование Python, предоставляемого командой CPython для загрузки с [веб-сайта python.org](https://python-all.ru/3.16/using/mac.html). См. [Альтернативные дистрибутивы](https://python-all.ru/3.16/using/mac.html#alternative-bundles) для других вариантов.1213## 5.1. Использование Python для macOS от `python.org`1415### 5.1.1. Шаги установки1617Для [текущих версий Python](https://python-all.ru/3.16/using/mac.html) (кроме тех, что в статусе `security`) команда выпуска создает установочный пакет **Python для macOS** для каждого нового релиза. Список доступных установщиков доступен [здесь](https://python-all.ru/3.16/using/mac.html). Рекомендуется по возможности использовать самую последнюю поддерживаемую версию Python. Текущие установщики предоставляют сборку [universal2 binary](https://python-all.ru/3.16/using/mac.html), которая работает нативно на всех Mac (Apple Silicon и Intel), поддерживаемых широким спектром версий macOS, в настоящее время, как правило, начиная с **macOS 10.15 Catalina**.1819Загруженный файл представляет собой стандартный установочный пакет macOS (`.pkg`). Информация о целостности файла (контрольная сумма, размер, подпись sigstore и т.д.) для каждого файла включена на странице загрузки релиза. Установочные пакеты и их содержимое подписаны и заверены с помощью сертификатов `Python Software Foundation` Apple Developer ID для соответствия [требованиям macOS Gatekeeper](https://python-all.ru/3.16/using/mac.html).2021Для установки по умолчанию дважды щелкните загруженный установочный пакет. Это должно запустить стандартное приложение macOS Installer и отобразить первое из нескольких окон установки.22232425Нажатие кнопки **Continue** открывает **Read Me** этого установщика. Помимо прочей важной информации, в **Read Me** указано, какая версия Python будет установлена и на каких версиях macOS она поддерживается. Возможно, потребуется прокрутить, чтобы прочитать весь файл. По умолчанию этот **Read Me** также будет установлен в `/Applications/Python 3.16/` и будет доступен для чтения в любое время.26272829Нажатие **Continue** приводит к отображению лицензии на Python и другое включенное программное обеспечение. Затем необходимо **Agree** с условиями лицензии, прежде чем перейти к следующему шагу. Этот файл лицензии также будет установлен и будет доступен для чтения позже.30313233После принятия условий лицензии следующим шагом отображается **Тип установки**. Для большинства случаев подходит стандартный набор операций установки.34353637Нажав кнопку **Customize**, можно выбрать или пропустить определенные компоненты пакета установщика. Щелкните на каждом имени пакета, чтобы увидеть описание того, что он устанавливает. Чтобы также установить поддержку опциональной функции свободной многопоточности, см. [Установка свободно-поточных двоичных файлов](https://python-all.ru/3.16/using/mac.html#install-freethreaded-macos).38394041В любом случае, нажатие **Install** начнет процесс установки, запросив разрешение на установку нового программного обеспечения. Требуется имя пользователя macOS с правами `Administrator`, так как установленный Python будет доступен всем пользователям Mac.4243Когда установка завершится, появится окно **Summary**.44454647Дважды щелкните на значок или файл **Install Certificates.command** в окне `/Applications/Python 3.16/`, чтобы завершить установку.48495051Это откроет временное окно оболочки **Terminal**, которое использует новый Python для загрузки и установки корневых сертификатов SSL для его работы.52535455Если в окне терминала появятся `Successfully installed certifi` и `update complete`, установка завершена. Закройте это окно терминала и окно установщика.5657Установка по умолчанию включает:5859- Папка `Python 3.16` в вашей папке `Applications`. В ней вы найдете **IDLE** – среду разработки, которая является стандартной частью официальных дистрибутивов Python; и **Python Launcher**, который обрабатывает двойные щелчки по скриптам Python из macOS [Finder](https://python-all.ru/3.16/using/mac.html).60- Фреймворк `/Library/Frameworks/Python.framework`, который включает исполняемый файл Python и библиотеки. Установщик добавляет этот путь в ваш shell path. Чтобы удалить Python, вы можете удалить эти три компонента. Символические ссылки на исполняемый файл Python помещаются в `/usr/local/bin/`.6162> **Примечание**63>64> Последние версии macOS включают команду **python3** в `/usr/bin/python3`, которая ссылается на обычно более старую и неполную версию Python, предоставленную и используемую инструментами разработки Apple, **Xcode** или **Command Line Tools for Xcode**. Никогда не изменяйте и не пытайтесь удалить эту установку, так как она контролируется Apple и используется программным обеспечением, предоставленным Apple или сторонними разработчиками. Если вы решите установить более новую версию Python из `python.org`, на вашем компьютере будут две разные, но рабочие установки Python, которые могут сосуществовать. Параметры установки по умолчанию должны гарантировать, что будет использоваться ее **python3** вместо системной **python3**.6566### 5.1.2. Как запустить скрипт Python6768Есть два способа запустить интерпретатор Python. Если вы знакомы с использованием оболочки Unix в окне терминала, вы можете вызвать `python3.16` или `python3`, дополнительно указав один или несколько параметров командной строки (описано в [Командная строка и окружение](https://python-all.ru/3.16/using/cmdline.html#using-on-general)). В руководстве по Python также есть полезный раздел о [интерактивном использовании Python из оболочки](https://python-all.ru/3.16/tutorial/appendix.html#tut-interac).6970Вы также можете запустить интерпретатор через интегрированную среду разработки. [IDLE – редактор и оболочка Python](https://python-all.ru/3.16/library/idle.html#idle) – это базовая среда редактирования и интерпретатор, входящие в стандартный дистрибутив Python. **IDLE** включает меню Help, которое позволяет получить доступ к документации Python. Если вы совсем новичок в Python, вы можете прочитать введение в руководство в этом документе.7172Доступно много других редакторов и IDE, см. [Редакторы и IDE](https://python-all.ru/3.16/using/editors.html#editors) для получения дополнительной информации.7374Чтобы запустить файл скрипта Python из окна терминала, вы можете вызвать интерпретатор с именем файла скрипта:7576> `python3.16` `myscript.py`7778Чтобы запустить скрипт из Finder, вы можете:7980- Перетащите его на **Python Launcher**.81- Выберите **Python Launcher** в качестве приложения по умолчанию для открытия своего скрипта (или любого скрипта `.py`) в окне информации Finder и дважды щёлкните по нему. В **Python Launcher** есть различные настройки, позволяющие управлять запуском скрипта. Option-перетаскивание позволяет изменить их для одного запуска или использовать меню `Preferences` для глобальных изменений.8283Имейте в виду, что запуск скрипта непосредственно из Finder macOS может давать иные результаты по сравнению с запуском из окна терминала, поскольку скрипт не будет выполняться в обычном окружении оболочки, включая настройки переменных окружения в профилях оболочки. И, как и с любым другим скриптом или программой, убедитесь, что запускаете то, что нужно.8485## 5.2. Альтернативные дистрибутивы8687Помимо стандартного `python.org` для установщика macOS, существуют сторонние дистрибутивы для macOS, которые могут включать дополнительную функциональность. Некоторые популярные дистрибутивы и их ключевые особенности:8889**[ActivePython](https://python-all.ru/3.16/using/mac.html)**9091Установщик с поддержкой нескольких платформ, документация9293**[Anaconda](https://python-all.ru/3.16/using/mac.html)**9495Популярные научные модули (такие как numpy, scipy и pandas) и менеджер пакетов `conda`.9697**[Homebrew](https://python-all.ru/3.16/using/mac.html)**9899Менеджер пакетов для macOS, включающий несколько версий Python и множество сторонних пакетов на Python (включая numpy, scipy и pandas).100101**[MacPorts](https://python-all.ru/3.16/using/mac.html)**102103Ещё один менеджер пакетов для macOS, включающий несколько версий Python и множество сторонних пакетов на Python. Может включать предварительно собранные версии Python и многие пакеты для старых версий macOS.104105Обратите внимание, что дистрибутивы могут не включать последние версии Python или других библиотек и не поддерживаются основной командой Python.106107## 5.3. Установка дополнительных пакетов Python108109Обратитесь к [Python Packaging User Guide](https://python-all.ru/3.16/using/mac.html) для получения дополнительной информации.110111## 5.4. Программирование графического интерфейса112113Существует несколько вариантов создания приложений с графическим интерфейсом на Mac с помощью Python.114115Стандартный набор инструментов для графического интерфейса Python – это [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter), основанный на кросс-платформенном наборе инструментов Tk ([https://www.tcl.tk](https://python-all.ru/3.16/using/mac.html)). В установщик включена собственная версия Tk для macOS.116117*PyObjC* – это привязка Python к фреймворку Objective-C/Cocoa от Apple. Информация о PyObjC доступна на [pyobjc](https://python-all.ru/3.16/using/mac.html).118119Доступен ряд альтернативных наборов инструментов для графического интерфейса macOS, включая:120121- [PySide](https://python-all.ru/3.16/using/mac.html): официальные привязки Python к [набору инструментов Qt](https://python-all.ru/3.16/using/mac.html).122- [PyQt](https://python-all.ru/3.16/using/mac.html): альтернативные привязки Python к Qt.123- [Kivy](https://python-all.ru/3.16/using/mac.html): кросс-платформенный набор инструментов для графического интерфейса, поддерживающий настольные и мобильные платформы.124- [Toga](https://python-all.ru/3.16/using/mac.html): часть [проекта BeeWare](https://python-all.ru/3.16/using/mac.html); поддерживает настольные, мобильные, веб- и консольные приложения.125- [wxPython](https://python-all.ru/3.16/using/mac.html): кросс-платформенный набор инструментов, который поддерживает настольные операционные системы.126127## 5.5. Продвинутые темы128129### 5.5.1. Установка свободно-поточных сборок130131Добавлено в версии 3.13.132133`python.org` [Python для macOS](https://python-all.ru/3.16/using/mac.html#getting-and-installing-macpython) установочный пакет может по желанию установить дополнительную сборку Python 3.16, поддерживающую [**PEP 703**](https://python-all.ru/3.16/using/mac.html), функцию свободной многопоточности (запуск с отключённой [глобальной блокировкой интерпретатора](https://python-all.ru/3.16/glossary.html#term-global-interpreter-lock)). За актуальной информацией обращайтесь на страницу релиза `python.org`.134135Режим свободной многопоточности работает и продолжает улучшаться, но есть некоторые дополнительные накладные расходы в однопоточных задачах по сравнению с обычной сборкой. Кроме того, сторонние пакеты, особенно с [модулем-расширением](https://python-all.ru/3.16/glossary.html#term-extension-module), могут быть не готовы к использованию в свободно-поточной сборке и будут повторно включать [GIL](https://python-all.ru/3.16/glossary.html#term-GIL). Поэтому поддержка свободной многопоточности не устанавливается по умолчанию. Она упакована как отдельный вариант установки, доступный при нажатии кнопки **Customize** на шаге **Тип установки** установщика, как описано выше.136137138139If the box next to the **Free-threaded Python** package name is checked, a separate `PythonT.framework` will also be installed alongside the normal `Python.framework` in `/Library/Frameworks`. This configuration allows a free-threaded Python 3.16 build to co-exist on your system with a traditional (GIL only) Python 3.16 build with minimal risk while installing or testing. This installation layout may change in future releases.140141Известные предупреждения и ограничения:142143- Пакет **UNIX command-line tools**, который выбран по умолчанию, установит ссылки в `/usr/local/bin` для `python3.16t`, свободнопоточного интерпретатора и `python3.16t-config`, утилиты конфигурации, которая может быть полезна для сборщиков пакетов. Поскольку `/usr/local/bin` обычно включён в вашу переменную окружения `PATH`, в большинстве случаев не требуется изменять переменные окружения `PATH` для использования `python3.16t`.144- В этом выпуске пакет **Shell profile updater** и `Update Shell Profile.command` в `/Applications/Python 3.16/` не поддерживают свободнопоточный пакет.145- Свободнопоточная сборка и традиционная сборка имеют отдельные пути поиска и отдельные каталоги `site-packages`, поэтому по умолчанию, если пакет нужен в обеих сборках, его, возможно, придётся установить в обе. Свободнопоточный пакет установит отдельный экземпляр **pip** для использования с `python3.16t`.146147 - Чтобы установить пакет с помощью **pip** без **venv**:148149 ```150 python3.16t -m pip install <package_name>151 ```152- При работе с несколькими окружениями Python обычно безопаснее и проще [создавать и использовать виртуальные окружения](https://python-all.ru/3.16/tutorial/venv.html#tut-venv). Это позволяет избежать возможных конфликтов имён команд и путаницы с тем, какой Python используется:153154 ```155 python3.16t -m venv <venv_name>156 ```157158 затем **активировать**.159- Для запуска свободнопоточной версии IDLE:160161 ```162 python3.16t -m idlelib163 ```164- Интерпретаторы в обеих сборках реагируют на одни и те же [переменные окружения PYTHON](https://python-all.ru/3.16/using/cmdline.html#using-on-envvars), что может привести к неожиданным результатам, например, если `PYTHONPATH` установлена в профиле оболочки. При необходимости существуют [параметры командной строки](https://python-all.ru/3.16/using/cmdline.html#using-on-interface-options), такие как `-E`, чтобы игнорировать эти переменные окружения.165- Свободнопоточная сборка связывается со сторонними разделяемыми библиотеками, такими как `OpenSSL` и `Tk`, установленными в традиционном фреймворке. Это означает, что обе сборки также используют один набор сертификатов доверия, установленный сценарием **Install Certificates.command**, поэтому его нужно запустить только один раз.166- Если вы не можете полагаться на то, что ссылка в `/usr/local/bin` указывает на `python.org` свободнопоточный `python3.16t` (например, если вы хотите установить туда свою версию или это делает другой дистрибутив), вы можете явно задать переменную окружения оболочки `PATH`, включив в неё каталог фреймворка `PythonT` `bin`:167168 ```169 export PATH="/Library/Frameworks/PythonT.framework/Versions/3.16/bin":"$PATH"170 ```171172 Традиционная установка фреймворка по умолчанию делает нечто подобное, за исключением `Python.framework`. Имейте в виду, что наличие каталогов `bin` обоих фреймворков в `PATH` может привести к путанице, если в обоих есть дублирующиеся имена, например `python3.16`; какой из них фактически используется, зависит от порядка их появления в `PATH`. Команды `which python3.x` или `which python3.xt` показывают, какой путь используется. Использование виртуальных окружений помогает избежать такой неоднозначности. Другой вариант – создать псевдоним оболочки **alias** для нужного интерпретатора, например:173174 ```175 alias py3.16="/Library/Frameworks/Python.framework/Versions/3.16/bin/python3.16"176 alias py3.16t="/Library/Frameworks/PythonT.framework/Versions/3.16/bin/python3.16t"177 ```178179### 5.5.2. Установка из командной строки180181Если вы хотите автоматизировать установку пакета `python.org` (а не использовать знакомое приложение **Installer** macOS с графическим интерфейсом), утилита командной строки macOS **installer** также позволяет выбирать нестандартные параметры. Если вы не знакомы с **installer**, он может показаться несколько загадочным (см. **man installer** для получения дополнительной информации). В качестве примера следующий фрагмент оболочки показывает один из способов, используя выпуск `3.16.0b2` и выбирая опцию свободнопоточного интерпретатора:182183```184RELEASE="python-3.160b2-macos11.pkg"185186# download installer pkg187curl -O https://www.python.org/ftp/python/3.16.0/${RELEASE}188189# create installer choicechanges to customize the install:190# enable the PythonTFramework-3.16 package191# while accepting the other defaults (install all other packages)192cat > ./choicechanges.plist <<EOF193<?xml version="1.0" encoding="UTF-8"?>194<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">195<plist version="1.0">196<array>197 <dict>198 <key>attributeSetting</key>199 <integer>1</integer>200 <key>choiceAttribute</key>201 <string>selected</string>202 <key>choiceIdentifier</key>203 <string>org.python.Python.PythonTFramework-3.16</string>204 </dict>205</array>206</plist>207EOF208209sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /210```211212Затем можно проверить, что обе установочные сборки теперь доступны, с помощью чего-то вроде:213214```215$ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled216$ /usr/local/bin/python3.16t -VV217Python 3.16.0b2 free-threading build (v3.16.0b2:3a83b172af, Jun 5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]218$ # and the traditional interpreter219$ /usr/local/bin/python3.16 -VV220Python 3.16.0b2 (v3.16.0b2:3a83b172af, Jun 5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]221$ # test that they are also available without the prefix if /usr/local/bin is on $PATH222$ python3.16t -VV223Python 3.16.0b2 free-threading build (v3.16.0b2:3a83b172af, Jun 5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]224$ python3.16 -VV225Python 3.16.0b2 (v3.16.0b2:3a83b172af, Jun 5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]226```227228> **Примечание**229>230> Текущие установщики `python.org` устанавливают только в фиксированные расположения, такие как `/Library/Frameworks/`, `/Applications` и `/usr/local/bin`. Нельзя использовать опцию **installer** `-domain` для установки в другие места.231232### 5.5.3. Распространение приложений Python233234Существует ряд инструментов для преобразования кода Python в автономное распространяемое приложение:235236- [py2app](https://python-all.ru/3.16/using/mac.html): Поддерживает создание пакетов macOS `.app` из проекта Python.237- [Briefcase](https://python-all.ru/3.16/using/mac.html): Часть проекта [BeeWare Project](https://python-all.ru/3.16/using/mac.html); кроссплатформенный инструмент упаковки, поддерживающий создание пакетов `.app` на macOS, а также управление подписыванием и нотариальным заверением.238- [PyInstaller](https://python-all.ru/3.16/using/mac.html): Кроссплатформенный инструмент упаковки, который создаёт один файл или папку в качестве распространяемого артефакта.239240### 5.5.4. Соответствие требованиям App Store241242Приложения, отправляемые на распространение через Mac App Store, должны пройти процесс проверки приложений Apple. Этот процесс включает набор автоматических правил валидации, которые проверяют отправленный пакет приложения на наличие проблемного кода.243244Стандартная библиотека Python содержит код, который, как известно, нарушает эти автоматические правила. Хотя эти нарушения являются ложными срабатываниями, правила проверки Apple оспорить нельзя. Поэтому необходимо изменить стандартную библиотеку Python, чтобы приложение прошло проверку App Store.245246Дерево исходных текстов Python содержит [файл патча](https://python-all.ru/src/main/Mac/Resources/app-store-compliance.patch), который удаляет весь код, вызывающий проблемы с процессом проверки App Store. Этот патч применяется автоматически, когда CPython сконфигурирован с опцией [`--with-app-store-compliance`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-app-store-compliance).247248Этот патч обычно не требуется для использования CPython на Mac; он также не требуется, если вы распространяете приложение *вне* Mac App Store. Он *только* требуется, если вы используете Mac App Store в качестве канала распространения.249250## 5.6. Другие ресурсы251252Страница справки [python.org](https://python-all.ru/3.16/using/mac.html) содержит ссылки на множество полезных ресурсов. Список рассылки [Pythonmac-SIG](https://python-all.ru/3.16/using/mac.html) является ещё одним ресурсом поддержки, предназначенным специально для пользователей и разработчиков Python на Mac.253