Использование Python в Windows
В этом документе представлен обзор особенностей поведения Windows, о которых следует знать при использовании Python в Microsoft Windows.
В отличие от большинства систем и служб Unix, Windows не включает поддерживаемую системой установку Python. Чтобы сделать Python доступным, команда CPython уже много лет выпускает установщики Windows для каждого выпуска. Эти установщики предназначены прежде всего для установки Python для отдельного пользователя: основной интерпретатор и библиотека используются одним пользователем. Установщик также позволяет установить Python для всех пользователей одного компьютера, а для распространения приложений в локальной среде доступен отдельный ZIP-файл.
Как указано в PEP 11, выпуск Python поддерживает платформу Windows только до тех пор, пока Microsoft обеспечивает для неё расширенную поддержку. Это означает, что Python 3.12 поддерживает Windows 8.1 и более поздние версии. Если вам нужна поддержка Windows 7, установите Python 3.8.
Для Windows доступны различные установщики, каждый со своими преимуществами и недостатками.
Полный установщик содержит все компоненты и является лучшим вариантом для разработчиков, использующих Python для проектов любого типа.
Пакет из Microsoft Store — это простой способ установки Python, подходящий для запуска скриптов и пакетов, а также для использования IDLE и других сред разработки. Для него требуется Windows 10 или более поздняя версия, но его можно безопасно установить, не повреждая другие программы. Кроме того, он предоставляет множество удобных команд для запуска Python и его инструментов.
Пакеты nuget.org — это облегчённые установки, предназначенные для систем непрерывной интеграции. Их можно использовать для сборки пакетов Python или запуска скриптов, но их нельзя обновлять, и в них нет инструментов с пользовательским интерфейсом.
Встраиваемый пакет — это минимальный пакет Python, подходящий для встраивания в более крупное приложение.
4.1. Полный установщик
4.1.1. Этапы установки
Для загрузки доступны четыре установщика Python 3.12 — по два для 32-разрядной и 64-разрядной версий интерпретатора. Веб-установщик — это небольшой начальный файл загрузки, который при необходимости автоматически загрузит требуемые компоненты. Автономный установщик включает компоненты, необходимые для установки по умолчанию, и требует подключения к Интернету только для дополнительных возможностей. Другие способы избежать загрузки во время установки описаны в разделе Установка без загрузки.
После запуска установщика можно выбрать один из двух вариантов:
Если выбрать «Установить сейчас»:
- Вам не понадобятся права администратора (если только не требуется обновление системной библиотеки C Runtime или вы не устанавливаете средство запуска Python для Windows для всех пользователей)
- Python будет установлен в ваш каталог пользователя
- Средство запуска Python для Windows будет установлено в соответствии с параметром внизу первой страницы
- Будут установлены стандартная библиотека, набор тестов, средство запуска и pip
- Если этот параметр выбран, каталог установки будет добавлен в ваш
PATH - Ярлыки будут видны только текущему пользователю
Выбор варианта «Настроить установку» позволяет выбрать устанавливаемые компоненты, расположение установки, другие параметры и действия после установки. Для установки отладочных символов или двоичных файлов необходимо использовать этот вариант.
Чтобы установить Python для всех пользователей, выберите «Настроить установку». В этом случае:
- Возможно, потребуется указать учётные данные администратора или получить его разрешение
- Python будет установлен в каталог Program Files
- Средство запуска Python для Windows будет установлено в каталог Windows
- Во время установки можно выбрать дополнительные компоненты
- Стандартную библиотеку можно предварительно скомпилировать в байт-код
- Если этот параметр выбран, каталог установки будет добавлен в системный
PATH - Ярлыки будут доступны всем пользователям
4.1.2. Снятие ограничения MAX_PATH
Исторически Windows ограничивала длину путей 260 символами. Это означало, что более длинные пути не разрешались, что приводило к ошибкам.
В последних версиях Windows это ограничение можно увеличить примерно до 32 000 символов. Администратору потребуется активировать групповую политику «Включить длинные пути Win32» либо задать LongPathsEnabled значение 1 в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.
Это позволяет функции open(), модулю os и большинству других функций для работы с путями принимать и возвращать пути длиной более 260 символов.
После изменения указанного параметра дополнительная настройка не требуется.
Изменено в версии 3.6: В Python включена поддержка длинных путей.
4.1.3. Установка без пользовательского интерфейса
Все параметры, доступные в интерфейсе установщика, можно также указать в командной строке. Это позволяет с помощью скриптов устанавливать Python на множестве компьютеров без участия пользователя. Эти параметры можно задать и без отключения интерфейса, чтобы изменить некоторые значения по умолчанию.
Установщику можно передать следующие параметры (их можно найти, запустив установщик с /?):
Название | Описание |
|---|---|
/passive | отображать ход выполнения без участия пользователя |
/quiet | устанавливать/удалять без отображения пользовательского интерфейса |
/simple | запретить настройку пользователем |
/uninstall | удалить Python (без подтверждения) |
/layout [directory] | предварительно загрузить все компоненты |
/log [filename] | указать расположение файлов журнала |
Все остальные параметры передаются как name=value, где значение обычно равно 0 для отключения компонента, 1 для его включения или представляет собой путь. Полный список доступных параметров приведён ниже.
Название | Описание | По умолчанию |
|---|---|---|
InstallAllUsers | Выполнить установку для всей системы. | 0 |
TargetDir | Каталог установки | Выбирается в зависимости от InstallAllUsers |
DefaultAllUsersTargetDir | Каталог установки по умолчанию для установки для всех пользователей |
|
DefaultJustForMeTargetDir | Каталог установки по умолчанию для установки только для текущего пользователя |
|
DefaultCustomTargetDir | Каталог установки по умолчанию для пользовательской установки, отображаемый в интерфейсе | (пусто) |
AssociateFiles | Создать ассоциации файлов, если также установлено средство запуска. | 1 |
CompileAll | Скомпилировать все файлы | 0 |
PrependPath | Добавить каталоги установки и Scripts в начало | 0 |
AppendPath | Добавить каталоги установки и Scripts в конец | 0 |
Shortcuts | Создать ярлыки для интерпретатора, документации и IDLE, если он установлен. | 1 |
Include_doc | Установить руководство по Python | 1 |
Include_debug | Установить отладочные двоичные файлы | 0 |
Include_dev | Установить заголовочные файлы и библиотеки для разработчиков. Их отсутствие может привести к непригодности установки. | 1 |
Include_exe | Установить | 1 |
Include_launcher | Установить средство запуска Python для Windows. | 1 |
InstallLauncherAllUsers | Установить средство запуска для всех пользователей. Также требуется задать для | 1 |
Include_lib | Установить стандартную библиотеку и модули расширения. Их отсутствие может привести к непригодности установки. | 1 |
Include_pip | Установить входящие в комплект pip и setuptools | 1 |
Include_symbols | Установить отладочные символы ( | 0 |
Include_tcltk | Установить поддержку Tcl/Tk и IDLE | 1 |
Include_test | Установить набор тестов стандартной библиотеки | 1 |
Include_tools | Установить вспомогательные скрипты | 1 |
LauncherOnly | Установить только средство запуска. Этот параметр переопределяет большинство остальных параметров. | 0 |
SimpleInstall | Отключить большую часть интерфейса установки | 0 |
SimpleInstallDescription | Пользовательское сообщение, отображаемое при использовании упрощённого интерфейса установки. | (пусто) |
Например, чтобы выполнить тихую установку Python для всей системы с параметрами по умолчанию, можно использовать следующую команду (из командной строки с повышенными правами):
python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
Чтобы пользователи могли легко установить личную копию Python без набора тестов, можно создать ярлык со следующей командой. При этом будет показана упрощённая начальная страница, а настройка будет запрещена:
python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
(Обратите внимание: исключение средства запуска также исключает ассоциации файлов. Это рекомендуется только для установки для отдельного пользователя, если в системе уже есть установка для всех пользователей, включающая средство запуска.)
Перечисленные выше параметры также можно поместить в файл с именем unattend.xml рядом с исполняемым файлом. В этом файле указываются список параметров и их значения. Если значение задано как атрибут, оно будет преобразовано в число, если это возможно. Значения, заданные как текст элемента, всегда остаются строками. В этом примере файла заданы те же параметры, что и в предыдущем примере:
<Options>
<Option Name="InstallAllUsers" Value="no" />
<Option Name="Include_launcher" Value="0" />
<Option Name="Include_test" Value="no" />
<Option Name="SimpleInstall" Value="yes" />
<Option Name="SimpleInstallDescription">Just for me, no test suite</Option>
</Options>
4.1.4. Установка без загрузки
Некоторые компоненты Python не входят в первоначально загружаемый установщик, поэтому для их выбора может потребоваться подключение к Интернету. Чтобы избежать этого, все возможные компоненты можно загрузить по запросу и создать полный комплект файлов, для которого подключение к Интернету больше не понадобится независимо от выбранных компонентов. Обратите внимание, что такой комплект может оказаться больше необходимого, но при выполнении большого количества установок очень удобно иметь локальную кэшированную копию.
Выполните следующую команду в командной строке, чтобы загрузить все возможные необходимые файлы. Не забудьте заменить python-3.9.0.exe фактическим именем установщика и создать комплекты в отдельных каталогах, чтобы избежать конфликтов между файлами с одинаковыми именами.
python-3.9.0.exe /layout [optional target directory]
Можно также указать параметр /quiet, чтобы скрыть отображение хода выполнения.
4.1.5. Изменение установленной версии
После установки Python можно добавлять или удалять компоненты с помощью средства «Программы и компоненты», входящего в состав Windows. Выберите запись Python и нажмите «Удалить/Изменить», чтобы открыть установщик в режиме обслуживания.
Пункт «Изменить» позволяет добавлять или удалять компоненты, изменяя флажки: флажки, состояние которых не изменилось, не приведут к установке или удалению компонентов. Некоторые параметры в этом режиме изменить нельзя, например каталог установки. Чтобы изменить их, необходимо полностью удалить Python, а затем установить его заново.
Пункт «Восстановить» проверит все файлы, которые должны быть установлены с текущими параметрами, и заменит удалённые или изменённые файлы.
Пункт «Удалить» полностью удалит Python, за исключением средства запуска Python для Windows, которое отображается отдельной записью в разделе «Программы и компоненты».
4.2. Пакет из Microsoft Store
Добавлено в версии 3.7.2.
Пакет из Microsoft Store — это простой в установке интерпретатор Python, предназначенный главным образом для интерактивного использования, например учащимися.
Чтобы установить пакет, убедитесь, что у вас установлены последние обновления Windows 10, и найдите «Python 3.12» в приложении Microsoft Store. Убедитесь, что выбранное приложение опубликовано Python Software Foundation, и установите его.
Предупреждение
Python всегда доступен в Microsoft Store бесплатно. Если вас просят заплатить за него, значит, выбран неправильный пакет.
После установки Python можно запустить, найдя его в меню «Пуск». Кроме того, он будет доступен из любого сеанса командной строки или PowerShell при вводе python. Также pip и IDLE можно запускать командами pip или idle. IDLE также можно найти в меню «Пуск».
Все три команды доступны и с суффиксами, указывающими номер версии, например python3.exe и python3.x.exe, а также python.exe (где 3.x — конкретная версия для запуска, например 3.12). Найдите в меню «Пуск» пункт «Управление псевдонимами выполнения приложений», чтобы выбрать версию Python, связанную с каждой командой. Рекомендуется убедиться, что pip и idle соответствуют выбранной версии python.
Виртуальные окружения можно создавать с помощью python -m venv, а затем активировать и использовать обычным образом.
Если вы установили другую версию Python и добавили её в переменную PATH, она будет доступна как python.exe вместо версии из Microsoft Store. Для доступа к новой установке используйте python3.exe или python3.x.exe.
Средство запуска py.exe обнаружит эту установку Python, но будет отдавать предпочтение версиям, установленным с помощью традиционного установщика.
Чтобы удалить Python, откройте «Параметры» и воспользуйтесь разделом «Приложения и возможности» либо найдите Python в меню «Пуск», щёлкните по нему правой кнопкой мыши и выберите «Удалить». Удаление приведёт к удалению всех пакетов, установленных непосредственно в эту версию Python, но не удалит виртуальные окружения
4.2.1. Известные проблемы
4.2.1.1. Перенаправление локальных данных, реестра и временных путей
Из-за ограничений приложений Microsoft Store скрипты Python могут не иметь полного доступа на запись к общим расположениям, например TEMP, и к реестру. Вместо этого запись будет выполняться в личную копию. Если скриптам необходимо изменять общие расположения, установите полный пакет.
Во время выполнения Python использует личную копию известных папок Windows и реестра. Например, если переменная среды %APPDATA% имеет значение c:\Users\<user>\AppData\, то при записи в C:\Users\<user>\AppData\Local запись будет выполняться в C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local\.
При чтении файлов Windows вернёт файл из личной папки или, если его там нет, из настоящего каталога Windows. Например, при чтении C:\Windows\System32 возвращается содержимое C:\Windows\System32 вместе с содержимым C:\Program Files\WindowsApps\package_name\VFS\SystemX86.
Узнать настоящий путь к любому существующему файлу можно с помощью os.path.realpath():
>>> import os >>> test_file = 'C:\\Users\\example\\AppData\\Local\\test.txt' >>> os.path.realpath(test_file) 'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'
При записи в реестр Windows действуют следующие правила:
- Чтение из
HKLM\\Softwareразрешено, а результаты объединяются с файломregistry.datиз пакета. - Запись в
HKLM\\Softwareзапрещена, если соответствующий ключ/значение уже существует, то есть изменить существующие ключи нельзя. - Запись в
HKLM\\Softwareразрешена, если соответствующий ключ/значение отсутствует в пакете и у пользователя есть необходимые права доступа.
Дополнительную информацию о технических причинах этих ограничений см. в документации Microsoft о полнофункциональных приложениях в пакетах, доступной по адресу docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes
4.3. Пакеты nuget.org
Добавлено в версии 3.5.2.
Пакет nuget.org — это облегчённая среда Python, предназначенная для систем непрерывной интеграции и сборки, на которых Python не установлен для всей системы. Хотя nuget — это «диспетчер пакетов для .NET», он отлично подходит и для пакетов, содержащих инструменты, используемые во время сборки.
Актуальную информацию об использовании nuget можно найти на сайте nuget.org. Ниже приведено краткое описание, достаточное для разработчиков Python.
Инструмент командной строки nuget.exe можно загрузить напрямую с сайта https://aka.ms/nugetclidl, например, с помощью curl или PowerShell. С его помощью устанавливается последняя версия Python для 64-разрядных или 32-разрядных компьютеров:
nuget.exe install python -ExcludeVersion -OutputDirectory . nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .
Чтобы выбрать определённую версию, добавьте -Version 3.x.y. Каталог вывода можно изменить с помощью ., а пакет будет установлен во вложенный каталог. По умолчанию вложенный каталог называется так же, как пакет, а без параметра -ExcludeVersion в его имени будет указана конкретная установленная версия. Во вложенном каталоге находится каталог tools, содержащий установку Python:
# Without -ExcludeVersion > .\python.3.5.2\tools\python.exe -V Python 3.5.2 # With -ExcludeVersion > .\python\tools\python.exe -V Python 3.5.2
Как правило, пакеты nuget нельзя обновлять: новые версии следует устанавливать рядом с существующими и указывать к ним полный путь. В качестве альтернативы можно вручную удалить каталог пакета и установить его снова. Многие системы непрерывной интеграции сделают это автоматически, если не сохраняют файлы между сборками.
Рядом с каталогом tools находится каталог build\native. В нём содержится файл свойств MSBuild python.props, который можно использовать в проекте C++, чтобы сослаться на установку Python. Подключение этих параметров автоматически добавит заголовочные файлы и библиотеки импорта в сборку.
Страницы с информацией о пакетах на nuget.org: www.nuget.org/packages/python для 64-разрядной версии и www.nuget.org/packages/pythonx86 для 32-разрядной версии.
4.4. Встраиваемый пакет
Добавлено в версии 3.5.
Встраиваемый дистрибутив представляет собой ZIP-файл с минимальной средой Python. Он предназначен для использования в качестве части другого приложения, а не для непосредственного доступа конечных пользователей.
После распаковки встраиваемый дистрибутив практически полностью изолирован от системы пользователя, включая переменные среды, системные параметры реестра и установленные пакеты. Стандартная библиотека включена в ZIP-файл в виде предварительно скомпилированных и оптимизированных файлов .pyc, а также предоставляются python3.dll, python37.dll, python.exe и pythonw.exe. Tcl/tk (включая все зависимые компоненты, например Idle), pip и документация Python не включены.
Примечание
Встраиваемый дистрибутив не включает Microsoft C Runtime; её предоставление является обязанностью установщика приложения. Среда выполнения могла быть ранее установлена в системе пользователя или установлена автоматически через Windows Update. Её наличие можно проверить, найдя ucrtbase.dll в системном каталоге.
Сторонние пакеты следует устанавливать с помощью установщика приложения рядом со встраиваемым дистрибутивом. Управление зависимостями с помощью pip, как при обычной установке Python, в этом дистрибутиве не поддерживается, хотя при определённых условиях можно включить pip и использовать его для автоматических обновлений. Как правило, сторонние пакеты следует считать частью приложения («включать в состав приложения»), чтобы разработчик мог проверить их совместимость с новыми версиями до выпуска обновлений для пользователей.
Ниже описаны два рекомендуемых варианта использования этого дистрибутива.
4.4.1. Приложение на Python
Пользователям не обязательно знать, что приложение написано на Python. В этом случае встраиваемый дистрибутив можно использовать для включения частной версии Python в установочный пакет. В зависимости от того, насколько незаметным должно быть это решение (или, наоборот, насколько профессионально оно должно выглядеть), можно выбрать один из двух вариантов.
Использование специализированного исполняемого файла в качестве средства запуска требует некоторого программирования, но обеспечивает наиболее незаметную для пользователей работу. При использовании настраиваемого средства запуска ничто явно не указывает на то, что программа работает на Python: можно настроить значки, указать сведения о компании и версии, а ассоциации файлов будут работать должным образом. В большинстве случаев пользовательскому средству запуска достаточно вызывать Py_Main с заранее заданной командной строкой.
Более простой подход — предоставить пакетный файл или созданный ярлык, напрямую вызывающий python.exe или pythonw.exe с необходимыми аргументами командной строки. В этом случае приложение будет выглядеть как Python, а не как приложение под своим настоящим именем, и пользователям может быть сложно отличить его от других работающих процессов Python или ассоциаций файлов.
При использовании последнего подхода пакеты следует устанавливать в каталоги рядом с исполняемым файлом Python, чтобы они были доступны по пути поиска. При использовании специализированного средства запуска пакеты можно разместить в других местах, поскольку перед запуском приложения можно указать путь поиска.
4.4.2. Встраивание Python
Для приложений, написанных на нативном коде, часто требуется какой-либо язык сценариев, и для этой цели можно использовать встраиваемый дистрибутив Python. Как правило, большая часть приложения написана на нативном коде, а некоторая его часть либо вызывает python.exe, либо напрямую использует python3.dll. В обоих случаях достаточно распаковать встраиваемый дистрибутив во вложенный каталог установки приложения, чтобы предоставить загружаемый интерпретатор Python.
Как и при использовании в приложении, пакеты можно устанавливать в любое место, поскольку до инициализации интерпретатора можно указать пути поиска. В остальном принципиальных различий между использованием встраиваемого дистрибутива и обычной установки нет.
4.5. Альтернативные комплекты
Помимо стандартного дистрибутива CPython существуют модифицированные пакеты с дополнительными возможностями. Ниже приведён список популярных версий и их основных функций:
- ActivePython
-
Установщик с совместимостью с несколькими платформами, документацией и PyWin32
- Anaconda
-
Популярные научные модули (например, numpy, scipy и pandas) и диспетчер пакетов
conda. - Enthought Deployment Manager
-
«Среда Python и диспетчер пакетов нового поколения».
Ранее Enthought предоставляла Canopy, но в 2016 году поддержка продукта была прекращена.
- WinPython
-
Дистрибутив для Windows с предварительно собранными научными пакетами и инструментами для сборки пакетов.
Обратите внимание: эти пакеты могут не включать последние версии Python и других библиотек; команда разработчиков ядра Python не поддерживает их и не отвечает за их сопровождение.
4.6. Настройка Python
Чтобы удобно запускать Python из командной строки, можно изменить некоторые переменные среды Windows, установленные по умолчанию. Хотя установщик предлагает настроить переменные PATH и PATHEXT, этот способ надёжно работает только при наличии единственной системной установки. Если вы регулярно используете несколько версий Python, рассмотрите возможность использования средства запуска Python для Windows.
4.6.1. Дополнение: настройка переменных среды
В Windows переменные среды можно настроить постоянно на уровне пользователя и на уровне системы, а также временно — в командной строке.
Чтобы временно задать переменные среды, откройте командную строку и используйте команду set:
C:\>set PATH=C:\Program Files\Python 3.9;%PATH% C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib C:\>python
Эти изменения будут применяться ко всем последующим командам, выполняемым в этой консоли, и наследоваться всеми приложениями, запущенными из неё.
Если заключить имя переменной в знаки процента, будет подставлено её текущее значение, что позволит добавить новое значение в начало или конец. Добавление каталога с файлом python.exe в начало переменной PATH — распространённый способ обеспечить запуск нужной версии Python.
Чтобы изменить переменные среды по умолчанию на постоянной основе, нажмите кнопку «Пуск» и найдите «изменение переменных среды» либо откройте свойства системы, выберите Дополнительные параметры системы и нажмите кнопку Переменные среды. В этом диалоговом окне можно добавлять и изменять переменные пользователя и системы. Для изменения системных переменных необходим неограниченный доступ к компьютеру (то есть права администратора).
Примечание
Windows объединяет пользовательские переменные после системных, что может привести к неожиданным результатам при изменении PATH.
Переменная PYTHONPATH используется всеми версиями Python, поэтому не следует настраивать её постоянно, если указанные в ней пути содержат код, несовместимый с какой-либо из установленных версий Python.
См. также
- https://learn.microsoft.com/windows/win32/procthread/environment-variables
-
Обзор переменных среды в Windows
- https://learn.microsoft.com/windows-server/administration/windows-commands/set_1
-
Команда
setдля временного изменения переменных среды - https://learn.microsoft.com/windows-server/administration/windows-commands/setx
-
Команда
setxдля постоянного изменения переменных среды
4.6.2. Поиск исполняемого файла Python
Изменено в версии 3.5.
Помимо использования автоматически созданного пункта в меню «Пуск» для интерпретатора Python, можно запускать Python из командной строки. Для этого в установщике предусмотрен соответствующий параметр.
На первой странице установщика можно установить флажок «Add Python to PATH», чтобы установщик добавил путь установки в PATH. Также добавляется расположение каталога Scripts\. Это позволяет запускать интерпретатор командой python, а установщик пакетов — командой pip. Таким образом, можно также запускать скрипты с параметрами командной строки; см. документацию Командная строка.
Если вы не включили этот параметр при установке, можно повторно запустить установщик, выбрать пункт «Изменить» и включить его. Кроме того, можно вручную изменить PATH, следуя указаниям в разделе Дополнение: настройка переменных среды. Необходимо задать переменную среды PATH, включив в неё каталог установки Python, отделённый точкой с запятой от других элементов. Пример значения переменной (предполагается, что первые два элемента уже были заданы):
C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9
4.7. Режим UTF-8
Добавлено в версии 3.7.
В Windows для системной кодировки (ANSI Code Page) по-прежнему используются устаревшие кодировки. Python использует её в качестве кодировки по умолчанию для текстовых файлов (например, locale.getencoding()).
Это может приводить к проблемам, поскольку UTF-8 широко используется в интернете и большинстве Unix-систем, включая WSL (подсистему Windows для Linux).
Чтобы изменить кодировку текста по умолчанию на UTF-8, можно использовать режим UTF-8 Python. Включить режим UTF-8 Python можно с помощью параметра командной строки -X utf8 или переменной среды PYTHONUTF8=1. Информацию о включении режима UTF-8 см. в разделе PYTHONUTF8, а о том, как изменять переменные среды, — в разделе Дополнение: настройка переменных среды.
При включённом режиме UTF-8 Python системную кодировку (ANSI Code Page) по-прежнему можно использовать с помощью кодека «mbcs».
Обратите внимание: добавление PYTHONUTF8=1 в переменные среды по умолчанию повлияет на все приложения Python 3.7+ в вашей системе. Если какие-либо приложения Python 3.7+ используют устаревшую системную кодировку, рекомендуется задавать переменную среды временно или использовать параметр командной строки -X utf8.
Примечание
Даже если режим UTF-8 отключён, в Windows Python по умолчанию использует UTF-8 для:
- Ввода-вывода в консоли, включая стандартный ввод-вывод (подробности см. в PEP 528).
- кодировки файловой системы (подробности см. в PEP 529).
4.8. Средство запуска Python для Windows
Добавлено в версии 3.3.
Средство запуска Python для Windows — это утилита, помогающая находить и запускать разные версии Python. Она позволяет скриптам (или командной строке) указывать предпочтительную версию Python, после чего находит и запускает её.
В отличие от переменной PATH, средство запуска правильно выбирает наиболее подходящую версию Python. Оно отдаёт предпочтение установкам для отдельных пользователей перед системными установками и выбирает версию по номеру языка, а не по дате установки.
Изначальная спецификация средства запуска приведена в PEP 397.
4.8.1. Начало работы
4.8.1.1. Из командной строки
Изменено в версии 3.6.
При общесистемной установке Python 3.3 и более поздних версий средство запуска добавляется в PATH. Средство запуска совместимо со всеми доступными версиями Python, поэтому не имеет значения, какая версия установлена. Чтобы проверить, доступно ли средство запуска, выполните в командной строке следующую команду:
py
Должна запуститься последняя установленная версия Python. Выйти из неё можно обычным способом, а все указанные дополнительные аргументы командной строки будут переданы непосредственно Python.
Если установлено несколько версий Python (например, 3.7 и 3.12), вы заметите, что запустилась Python 3.12. Чтобы запустить Python 3.7, выполните команду:
py -3.7
Чтобы запустить последнюю установленную версию Python 2, выполните команду:
py -2
Если появилось следующее сообщение об ошибке, средство запуска не установлено:
'py' is not recognized as an internal or external command, operable program or batch file.
Команда:
py --list
показывает установленные версии Python.
Аргумент -x.y — это краткая форма аргумента -V:Company/Tag, который позволяет выбрать конкретную среду выполнения Python, в том числе полученную не с сайта python.org. Будут обнаружены все среды выполнения, зарегистрированные согласно PEP 514. Команда --list выводит список всех доступных сред выполнения в формате -V:.
При использовании аргумента -V: указание компании ограничит выбор средами выполнения этого поставщика, а указание только тега позволит выбрать среду выполнения любого поставщика. Обратите внимание: если не указывать косую черту, подразумевается тег:
# Select any '3.*' tagged runtime py -V:3 # Select any 'PythonCore' released runtime py -V:PythonCore/ # Select PythonCore's latest Python 3 runtime py -V:PythonCore/3
Краткая форма аргумента (-3) выбирает только основные выпуски Python, но не другие дистрибутивы. Более длинная форма (-V:3), однако, выбирает любой дистрибутив.
Сопоставление компании выполняется по полной строке без учёта регистра. Тег сопоставляется либо по полной строке, либо по её префиксу, если следующий символ — точка или дефис. Благодаря этому -V:3.1 соответствует 3.1-32, но не 3.10. Теги сортируются численно (3.10 новее, чем 3.1), но сравниваются как текст (-V:3.01 не соответствует 3.1).
4.8.1.2. Виртуальные среды
Добавлено в версии 3.5.
Если средство запуска вызвано без явного указания версии Python и активна виртуальная среда (созданная с помощью модуля стандартной библиотеки venv или внешней утилиты virtualenv), средство запуска запустит интерпретатор виртуальной среды, а не глобальный интерпретатор. Чтобы запустить глобальный интерпретатор, деактивируйте виртуальную среду или явно укажите глобальную версию Python.
4.8.1.3. Из скрипта
Создадим тестовый скрипт Python: создайте файл с именем hello.py и следующим содержимым
#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))
Выполните следующую команду из каталога, в котором находится hello.py:
py hello.py
Должен отобразиться номер версии последней установленной версии Python 2.x. Теперь измените первую строку на:
#! python3
При повторном выполнении команды отобразится информация о последней версии Python 3.x. Как и в приведённых выше примерах командной строки, можно указать более точную версию. Если установлена Python 3.7, попробуйте изменить первую строку на #! python3.7 — должна отобразиться информация о версии 3.7.
Обратите внимание: в отличие от интерактивного режима, команда «python» без дополнительных указаний запускает последнюю установленную версию Python 2.x. Это сделано для обратной совместимости и совместимости с Unix, где команда python обычно обозначает Python 2.
4.8.1.4. Из ассоциаций файлов
При установке средство запуска должно было быть связано с файлами Python (то есть файлами .py, .pyw, .pyc). Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использоваться средство запуска. Поэтому можно использовать те же возможности, описанные выше, чтобы указать в скрипте нужную версию.
Главное преимущество состоит в том, что одно средство запуска может одновременно поддерживать несколько версий Python — в зависимости от содержимого первой строки.
4.8.2. Строки шебанга
Если первая строка файла скрипта начинается с #!, она называется строкой «шебанга». Linux и другие Unix-подобные операционные системы поддерживают такие строки на системном уровне; обычно с их помощью указывают, как следует запускать скрипт. Это средство запуска предоставляет те же возможности для скриптов Python в Windows, как показано в приведённых выше примерах.
Чтобы строки шебанга в скриптах Python можно было использовать и в Unix, и в Windows, это средство запуска поддерживает несколько «виртуальных» команд для указания нужного интерпретатора. Поддерживаются следующие виртуальные команды:
/usr/bin/env/usr/bin/python/usr/local/bin/pythonpython
Например, если первая строка скрипта начинается с
#! /usr/bin/python
будет найден и использован интерпретатор Python по умолчанию. Поскольку многие скрипты Python, написанные для Unix, уже содержат эту строку, их можно запускать с помощью средства запуска без изменений. Если вы пишете новый скрипт в Windows, который должен работать и в Unix, используйте одну из строк шебанга, начинающихся с /usr.
К любой из перечисленных виртуальных команд можно добавить явное указание версии (только основную версию либо основную и дополнительную версии). Кроме того, 32-разрядную версию можно запросить, добавив «-32» после номера дополнительной версии. То есть /usr/bin/python3.7-32 запросит использование 32-разрядной версии Python 3.7.
Добавлено в версии 3.7: Начиная с версии 3.7 средства запуска Python можно запросить 64-разрядную версию с помощью суффикса «-64». Кроме того, можно указать основную версию и архитектуру без дополнительной версии (то есть /usr/bin/python3-64).
Изменено в версии 3.11: Суффикс «-64» считается устаревшим и теперь означает «любая архитектура, которая заведомо не является i386/32-разрядной». Чтобы запросить конкретную среду, используйте новый аргумент -V:TAG с полным тегом.
У формы строки шебанга /usr/bin/env есть ещё одно особое свойство. Прежде чем искать установленные интерпретаторы Python, эта форма ищет исполняемый файл PATH, чтобы найти исполняемый файл Python с именем, указанным первым аргументом. Это соответствует поведению программы Unix env, которая выполняет поиск PATH. Если не удаётся найти исполняемый файл, соответствующий первому аргументу после команды env, но аргумент начинается с python, он будет обработан так же, как и другие виртуальные команды. Чтобы пропустить этот поиск в PATH, можно задать переменную среды PYLAUNCHER_NO_SEARCH_PATH (с любым значением).
Строки шебанга, не соответствующие ни одному из этих шаблонов, проверяются в разделе [commands] файла .INI средства запуска. Это можно использовать для обработки определённых команд способом, подходящим для вашей системы. Имя команды должно быть одним аргументом (в исполняемом файле шебанга не должно быть пробелов), а подставляемое значение должно быть полным путём к исполняемому файлу (дополнительные аргументы, указанные в .INI, будут заключены в кавычки как часть имени файла).
[commands] /bin/xpython=C:\Program Files\XPython\python.exe
Команды, не найденные в файле .INI, считаются путями к исполняемым файлам Windows: абсолютными или относительными к каталогу, содержащему файл скрипта. Это упрощает запуск скриптов только для Windows, например созданных установщиком, поскольку такое поведение несовместимо с оболочками Unix. Эти пути можно заключать в кавычки и указывать для них несколько аргументов, после чего к ним будут добавлены путь к скрипту и любые дополнительные аргументы.
4.8.3. Аргументы в строках шебанга
В строках шебанга также можно указать дополнительные параметры, которые будут переданы интерпретатору Python. Например, если строка шебанга выглядит так:
#! /usr/bin/python -v
Python будет запущен с параметром -v
4.8.4. Настройка
4.8.4.1. Настройка с помощью файлов INI
Средство запуска ищет два файла .ini: py.ini в каталоге данных приложений текущего пользователя (%LOCALAPPDATA% или $env:LocalAppData) и py.ini в том же каталоге, что и средство запуска. Одни и те же файлы .ini используются как консольной версией средства запуска (то есть py.exe), так и версией для Windows (то есть pyw.exe).
Параметры, указанные в «каталоге приложения», имеют приоритет над параметрами в файле рядом с исполняемым файлом. Поэтому пользователь, у которого может не быть прав на запись в файл .ini рядом со средством запуска, может переопределить команды из этого глобального файла .ini.
4.8.4.2. Настройка версий Python по умолчанию
В некоторых случаях в команду можно включить указание версии, чтобы определить, какая версия Python будет использоваться. Указание версии начинается с номера основной версии, за которым может следовать точка («.») и номер дополнительной версии. Кроме того, можно запросить 32- или 64-разрядную реализацию, добавив «-32» или «-64».
Например, строка шебанга #!python не содержит указания версии, а #!python3 содержит указание только основной версии.
Если команда не содержит указания версии, для задания версии по умолчанию можно использовать переменную среды PY_PYTHON. Если она не задана, по умолчанию используется «3». В переменной можно указать любое значение, которое допустимо передать в командной строке, например «3», «3.7», «3.7-32» или «3.7-64». (Обратите внимание: параметр «-64» доступен только в средстве запуска, поставляемом с Python 3.7 или более поздней версии.)
Если номер дополнительной версии не указан, для задания полной версии можно использовать переменную среды PY_PYTHON{major} (где {major} — номер основной версии, определённый выше). Если такое значение не задано, средство запуска перечислит установленные версии Python и выберет последнюю дополнительную версию для указанной основной версии. Скорее всего, но не обязательно, это будет версия из соответствующего семейства, установленная последней.
В 64-разрядной Windows, если установлены 32- и 64-разрядные реализации одной и той же версии Python (основной и дополнительной), всегда будет предпочтена 64-разрядная версия. Это правило действует и для 32-, и для 64-разрядных версий средства запуска: 32-разрядное средство запуска предпочтёт запустить 64-разрядную установку указанной версии Python, если она доступна. Благодаря этому поведение средства запуска можно предсказать, зная только установленные на компьютере версии и не учитывая порядок их установки (то есть не зная, какая версия Python — 32- или 64-разрядная — и соответствующая версия средства запуска были установлены последними). Как отмечено выше, суффикс «-32» или «-64» можно добавить к указанию версии, чтобы изменить это поведение.
Примеры:
- Если соответствующие параметры не заданы, команды
pythonиpython2используют последнюю установленную версию Python 2.x, а командаpython3— последнюю установленную версию Python 3.x. - Команда
python3.7не будет учитывать никакие параметры, поскольку версии указаны полностью. - Если задано
PY_PYTHON=3, командыpythonиpython3будут использовать последнюю установленную версию Python 3. - Если задано
PY_PYTHON=3.7-32, командаpythonиспользует 32-разрядную реализацию версии 3.7, а командаpython3— последнюю установленную версию Python (PY_PYTHON не учитывается, поскольку указана основная версия). - Если заданы
PY_PYTHON=3иPY_PYTHON3=3.7, командыpythonиpython3будут использовать именно версию 3.7.
Помимо переменных среды, те же параметры можно настроить в файле .INI, который использует средство запуска. Раздел в файле INI называется [defaults], а имя ключа совпадает с именем переменной среды без префикса PY_ (обратите внимание: имена ключей в файле INI не учитывают регистр). Значение переменной среды имеет приоритет над параметрами, указанными в файле INI.
Например:
- Задание
PY_PYTHON=3.7эквивалентно следующему содержимому файла INI:
[defaults] python=3.7
- Задание
PY_PYTHON=3иPY_PYTHON3=3.7эквивалентно следующему содержимому файла INI:
[defaults] python=3 python3=3.7
4.8.5. Диагностика
Если задана переменная среды PYLAUNCHER_DEBUG (с любым значением), средство запуска выводит диагностическую информацию в stderr (то есть в консоль). Эта информация одновременно и подробна, и лаконична, но позволяет узнать, какие версии Python были найдены, почему выбрана определённая версия и какая именно команда командной строки использовалась для запуска целевого интерпретатора Python. В первую очередь эта возможность предназначена для тестирования и отладки.
4.8.6. Пробный запуск
Если задана переменная среды PYLAUNCHER_DRYRUN (с любым значением), средство запуска выведет команду, которую оно выполнило бы, но не станет запускать Python. Это может быть полезно инструментам, которым нужно использовать средство запуска для обнаружения Python, а затем запускать его напрямую. Обратите внимание: команда, выведенная в стандартный вывод, всегда кодируется с использованием UTF-8 и может некорректно отображаться в консоли.
4.8.7. Установка по запросу
Если задана переменная среды PYLAUNCHER_ALLOW_INSTALL (с любым значением), а запрошенная версия Python не установлена, но доступна в Microsoft Store, средство запуска попытается установить её. Для завершения установки может потребоваться вмешательство пользователя, и команду, возможно, придётся выполнить повторно.
Дополнительная переменная PYLAUNCHER_ALWAYS_INSTALL заставляет средство запуска всегда пытаться установить Python, даже если он уже обнаружен. Она предназначена главным образом для тестирования (и должна использоваться вместе с PYLAUNCHER_DRYRUN).
4.8.8. Коды возврата
Средство запуска Python может возвращать следующие коды завершения. К сожалению, их невозможно отличить от кода завершения самого Python.
Названия кодов приведены так, как они используются в исходном коде, и служат только для справки. Получить или определить их иначе, чем прочитав эту страницу, невозможно. Записи перечислены в алфавитном порядке названий.
Название | Значение | Описание |
|---|---|---|
RC_BAD_VENV_CFG | 107 | Файл |
RC_CREATE_PROCESS | 101 | Не удалось запустить Python. |
RC_INSTALLING | 111 | Установка запущена, но после её завершения команду потребуется выполнить повторно. |
RC_INTERNAL_ERROR | 109 | Непредвиденная ошибка. Сообщите об ошибке. |
RC_NO_COMMANDLINE | 108 | Не удалось получить командную строку от операционной системы. |
RC_NO_PYTHON | 103 | Не удалось найти запрошенную версию. |
RC_NO_VENV_CFG | 106 | Требовался файл |
4.9. Поиск модулей
Эти примечания дополняют описание в разделе Инициализация пути поиска модулей sys.path подробными сведениями о Windows.
Если файл ._pth не найден, на Windows переменная sys.path заполняется следующим образом:
- В начало добавляется пустой элемент, соответствующий текущему каталогу.
- Если существует переменная окружения
PYTHONPATH, как описано в разделе Переменные окружения, ее элементы добавляются следующими. Обратите внимание: на Windows пути в этой переменной должны разделяться точками с запятой, чтобы отличать их от двоеточия, используемого в обозначениях дисков (например,C:\). - Дополнительные «пути приложений» можно добавить в реестр как подразделы
\SOFTWARE\Python\PythonCore{version}\PythonPathв кустахHKEY_CURRENT_USERиHKEY_LOCAL_MACHINE. Если значением по умолчанию подраздела является строка путей, разделенных точками с запятой, каждый путь будет добавлен вsys.path. (Обратите внимание: все известные установщики используют только HKLM, поэтому HKCU обычно пуст.) - Если задана переменная окружения
PYTHONHOME, она считается «домашним каталогом Python». В противном случае путь к основному исполняемому файлу Python используется для поиска «опорного файла» (либоLib\os.py, либоpythonXY.zip), по которому определяется «домашний каталог Python». Если домашний каталог Python найден, соответствующие подкаталоги, добавляемые вsys.path(Lib,plat-winи т. д.), определяются относительно этой папки. В противном случае основной путь Python формируется из значения PythonPath, хранящегося в реестре. - Если домашний каталог Python не удается определить, переменная
PYTHONPATHне задана в окружении и записи в реестре отсутствуют, используется путь по умолчанию с относительными элементами (например,.\Lib;.\plat-winи т. д.).
Если файл pyvenv.cfg найден рядом с основным исполняемым файлом или в каталоге на уровень выше, применяются следующие особенности:
- Если
home— абсолютный путь, а переменнаяPYTHONHOMEне задана, при определении домашнего каталога вместо пути к основному исполняемому файлу используется этот путь.
В результате получается следующее:
- При запуске
python.exeили любого другого .exe в основном каталоге Python (как установленной версии, так и версии непосредственно из каталога PCbuild) основной путь определяется, а основные пути из реестра игнорируются. Другие «пути приложений» из реестра всегда считываются. - Если Python размещен в другом .exe (в другом каталоге, встроен через COM и т. д.), «домашний каталог Python» не будет определен, поэтому будет использован основной путь из реестра. Другие «пути приложений» из реестра всегда считываются.
- Если Python не удается найти свой домашний каталог и в реестре нет значений (замороженный .exe, необычная конфигурация установки), будет создан путь с некоторыми путями по умолчанию, но относительными.
Тем, кто хочет включить Python в свое приложение или дистрибутив, приведенные ниже рекомендации помогут избежать конфликтов с другими установками:
- Поместите файл
._pthрядом с исполняемым файлом и укажите в нем каталоги для включения. Это позволит игнорировать пути, перечисленные в реестре и переменных окружения, а также игнорироватьsite, если только в списке не указанimport site. - Если вы загружаете
python3.dllилиpython37.dllв собственном исполняемом файле, явно вызовитеPy_SetPath()или хотя быPy_SetProgramName()до вызоваPy_Initialize(). - Очистите и/или перезапишите переменную
PYTHONPATHи задайтеPYTHONHOMEперед запускомpython.exeиз своего приложения. - Если вы не можете воспользоваться предыдущими рекомендациями (например, вы распространяете дистрибутив, позволяющий запускать
python.exeнапрямую), убедитесь, что опорный файл (Lib\os.py) находится в каталоге установки. (Обратите внимание: файл не будет найден внутри ZIP-архива, но будет найден ZIP-архив с правильным именем.)
Эти меры гарантируют, что файлы из общесистемной установки не будут иметь приоритет перед копией стандартной библиотеки, включенной в ваше приложение. В противном случае у пользователей могут возникнуть проблемы при работе с приложением. Первая рекомендация — наилучший вариант, поскольку остальные все еще могут быть подвержены влиянию нестандартных путей в реестре и пользовательских site-packages.
Изменено в версии 3.6: Добавлена поддержка файла ._pth и удалена опция applocal из pyvenv.cfg.
Изменено в версии 3.6: Добавлен pythonXX.zip как возможный опорный файл, если он находится непосредственно рядом с исполняемым файлом.
Устарело с версии 3.6: Модули, указанные в реестре в разделе Modules (а не PythonPath), могут импортироваться с помощью importlib.machinery.WindowsRegistryFinder. Этот механизм поиска включен в Windows в версиях 3.6.0 и более ранних, но в будущем его, возможно, потребуется явно добавить в sys.meta_path.
4.10. Дополнительные модули
Хотя Python стремится быть переносимым между всеми платформами, в Windows есть уникальные возможности. Существуют несколько модулей — как из стандартной библиотеки, так и сторонних, — а также фрагменты кода для использования этих возможностей.
Модули стандартной библиотеки, специфичные для Windows, описаны в разделе Службы, специфичные для MS Windows.
4.10.1. PyWin32
Модуль PyWin32, созданный Марком Хаммондом, представляет собой набор модулей для расширенной поддержки Windows. В него входят средства для работы с:
- Component Object Model (COM)
- вызовами Win32 API
- реестром
- журналом событий
- пользовательскими интерфейсами на основе Microsoft Foundation Classes (MFC)
PythonWin — это пример приложения MFC, поставляемый с PyWin32. Это встраиваемая IDE со встроенным отладчиком.
См. также
- Win32: как это сделать…?
-
Тим Голден
- Python и COM
-
Дэвид и Пол Бодди
4.10.2. cx_Freeze
cx_Freeze преобразует скрипты Python в исполняемые программы Windows (файлы *.exe). После этого приложение можно распространять без необходимости устанавливать Python пользователям.
4.11. Компиляция Python в Windows
Если вы хотите самостоятельно скомпилировать CPython, сначала получите исходный код. Можно скачать исходный код последнего выпуска или получить свежую копию репозитория.
Дерево исходного кода содержит решение для сборки и файлы проектов Microsoft Visual Studio — компилятора, используемого для сборки официальных выпусков Python. Эти файлы находятся в каталоге PCbuild.
Общие сведения о процессе сборки см. в PCbuild/readme.txt.
Сведения о модулях расширения см. в разделе Сборка расширений на C и C++ в Windows.
4.12. Другие платформы
В процессе развития Python некоторые платформы, поддерживавшиеся ранее, перестали поддерживаться из-за недостатка пользователей или разработчиков. Подробную информацию обо всех неподдерживаемых платформах см. в PEP 11.
- Windows CE больше не поддерживается начиная с Python 3 (если поддержка вообще когда-либо существовала).
- Установщик Cygwin также предлагает установить интерпретатор Python.
Подробную информацию о платформах, для которых доступны предварительно скомпилированные установщики, см. в разделе Python для Windows.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/using/windows.html