Использование Python в Windows
Этот документ призван предоставить обзор поведения, специфичного для Windows, которое следует учитывать при использовании Python в Microsoft Windows.
В отличие от большинства Unix-систем и сервисов, Windows не включает поддерживаемую установку Python. Чтобы сделать Python доступным, команда CPython много лет компилирует установщики Windows с каждой версией. Эти установщики предназначены в первую очередь для добавления установки Python для каждого пользователя, при которой основной интерпретатор и библиотеки используются одним пользователем. Установщик также может установить Python для всех пользователей одного компьютера, а отдельный ZIP-архив доступен для локальных распределений приложений.
Как указано в PEP 11, выпуск Python поддерживает только платформу Windows, пока Microsoft рассматривает платформу в рамках расширенной поддержки. Это означает, что Python 3.13 поддерживает 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.13 для скачивания — по два для 32-разрядной и 64-разрядной версий интерпретатора. Установщик с веб-сайта — это небольшой начальный загрузчик, и он автоматически загрузит необходимые компоненты по мере необходимости. Установщик без подключения к сети включает компоненты, необходимые для стандартной установки, и требует подключение к Интернету только для дополнительных функций. См. Установка без скачивания для других способов избежать скачивания во время установки.
После запуска установщика можно выбрать один из двух вариантов:
Если вы выберите «Установить сейчас»:
- Вам не нужно будет быть администратором (если не требуется обновление системы для библиотеки C Runtime или вы устанавливаете Загрузчик Python для Windows для всех пользователей)
- Python будет установлен в ваш пользовательский каталог
- Загрузчик Python Launcher для Windows будет установлен в соответствии с вариантом в нижней части первой страницы
- Будут установлены стандартная библиотека, набор тестов, загрузчик и pip
- Если выбрано, каталог установки будет добавлен в вашу
PATH - Ярлыки будут видны только для текущего пользователя
Выбор «Настроить установку» позволит вам выбрать функции для установки, место установки и другие параметры или действия после установки. Для установки символов отладки или библиотек вам нужно будет использовать этот вариант.
Чтобы выполнить установку для всех пользователей, вы должны выбрать «Настроить установку». В этом случае:
- Вам может потребоваться предоставить учетные данные администратора или разрешение
- Python будет установлен в каталог Program Files
- Загрузчик Python Launcher для 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. Установка без графического интерфейса
Все параметры, доступные в графическом интерфейсе установщика, также можно указать из командной строки, что позволяет скриптовым установщикам повторять установку на многих машинах без взаимодействия с пользователем. Эти параметры также можно задать, не скрывая графический интерфейс, для изменения некоторых значений по умолчанию.
Следующие параметры (найденные путем выполнения установщика с /?) можно передать установщику:
Имя | Описание |
|---|---|
/passive | для отображения прогресса без взаимодействия с пользователем |
/quiet | для установки/удаления без отображения графического интерфейса |
/simple | для предотвращения настройки пользователем |
/uninstall | для удаления Python (без подтверждения) |
/layout [каталог] | для предварительной загрузки всех компонентов |
/log [имя файла] | для указания расположения файлов журнала |
Все остальные параметры передаются как 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.1.6. Установка библиотек с поддержкой многопоточности
Добавлена в версии 3.13: (Экспериментальная)
Примечание
Всё описанное в этом разделе считается экспериментальным и может измениться в будущих выпусках.
Для установки предварительно скомпилированных библиотек с поддержкой многопоточности (см. PEP 703), вы должны выбрать «Настроить установку». На второй странице параметров есть флажок «Загрузить библиотеки с поддержкой многопоточности».
Выбор этого параметра загрузит и установит дополнительные библиотеки в то же место, что и основная установка Python. Главный исполняемый файл называется python3.13t.exe, а другие библиотеки либо получают суффикс t, либо полный суффикс ABI. Исходные файлы Python и зависимые сторонние библиотеки совместно используются с основной установкой.
Версия с поддержкой многопоточности регистрируется как обычная установка Python с тэгом 3.13t (с суффиксом -32 или -arm64 как обычно для этих платформ). Это позволяет инструментам обнаружить её и Загрузчику Python для Windows поддерживать py.exe -3.13t. Обратите внимание, что загрузчик будет интерпретировать py.exe -3 (или shebang python3) как «последнюю установку 3.x», которая отдаст предпочтение библиотекам с многопоточностью перед обычными, в то время как py.exe -3.13 этого не сделает. Если вы используете сокращённую форму параметра, вам может быть предпочтительнее не устанавливать библиотеки с многопоточностью в данный момент.
Для указания параметра установки в командной строке используйте Include_freethreaded=1. См. Установка без загрузки для инструкций по предварительной загрузке дополнительных библиотек для автономной установки. Параметры включения символов отладки и библиотек также применяются к сборкам с поддержкой многопоточности.
Библиотеки с многопоточностью также доступны на nuget.org.
4.2. Пакет из Microsoft Store
Добавлена в версии 3.7.2.
Пакет из Microsoft Store — это легко устанавливаемый интерпретатор Python, предназначенный в основном для интерактивного использования, например, студентами.
Чтобы установить пакет, убедитесь, что у вас установлены последние обновления Windows 10, и найдите приложение «Python 3.13» в магазине 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.13). Откройте «Управление псевдонимами запуска приложений» через «Пуск», чтобы выбрать, какая версия 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 не обновляются, и новые версии следует устанавливать бок о бок и ссылаться на них с помощью полного пути. В качестве альтернативы можно вручную удалить каталог пакета и установить его заново. Многие системы CI выполняют это автоматически, если они не сохраняют файлы между сборками.
Рядом с каталогом tools находится каталог build\native. Он содержит файл свойств MSBuild python.props, который можно использовать в проекте C++ для ссылки на установку Python. Включение настроек автоматически использует заголовочные файлы и библиотеки импорта в вашей сборке.
Страницы с информацией о пакетах на nuget.org находятся по адресам: www.nuget.org/packages/python (для 64-разрядной версии), www.nuget.org/packages/pythonx86 (для 32-разрядной версии) и www.nuget.org/packages/pythonarm64 (для версии ARM64).
4.3.1. Пакеты с независимыми потоками
Добавлен в версии 3.13: (Экспериментальная версия)
Примечание
Всё, описанное в этом разделе, считается экспериментальным и может быть изменено в будущих выпусках.
Пакеты, содержащие бинарные файлы с независимыми потоками, называются python-freethreaded (для 64-разрядной версии), pythonx86-freethreaded (для 32-разрядной версии) и pythonarm64-freethreaded (для версии ARM64). Эти пакеты содержат как python3.13t.exe, так и python.exe точки входа, оба из которых работают с независимыми потоками.
4.4. Пакет для встраивания
Добавлен в версии 3.5.
Встраиваемое распределение — это ZIP-архив, содержащий минимальную среду выполнения Python. Оно предназначено для использования в качестве части другого приложения, а не для прямого доступа конечными пользователями.
При извлечении встраиваемое распределение (почти) полностью изолировано от системы пользователя, включая переменные среды, настройки системного реестра и установленные пакеты. Стандартная библиотека включена как предварительно скомпилированные и оптимизированные .pyc файлы в ZIP-архиве, и python3.dll, python37.dll, python.exe и pythonw.exe также предоставляются. Tcl/tk (включая все зависимые компоненты, такие как Idle), pip и документация Python не включены.
Примечание
Встраиваемое распределение не включает Microsoft C Runtime, и ответственность за предоставление этого компонента лежит на установщике приложения. Данный компонент может быть уже установлен на системе пользователя или автоматически через обновление Windows, и его можно обнаружить, найдя 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
Приложения, написанные на native коде, часто требуют некоторого языка сценариев, и для этой цели можно использовать встраиваемое распределение Python. Как правило, основная часть приложения написана на native коде, и какая-то часть будет вызывать 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
Эти изменения будут применяться ко всем последующим командам, выполненным в этой консоли, и будут унаследованы любыми приложениями, запущенными из консоли.
Включение имени переменной в проценты развернёт существующее значение, позволяя добавить новое значение в начале или в конце. Изменение PATH путём добавления каталога, содержащего python.exe, в начало — распространённый способ обеспечения запуска правильной версии 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 в командной строке. Установщик предоставляет возможность настроить это за вас.
На первой странице установщика может быть опция «Добавить Python в 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-кодовая страница). Python использует её в качестве кодировки по умолчанию для текстовых файлов (например, locale.getencoding()).
Это может вызвать проблемы, так как UTF-8 широко используется в интернете и на большинстве Unix-систем, включая WSL (подсистема Linux для Windows).
Вы можете использовать Режим UTF-8 в Python для изменения кодировки текста по умолчанию на UTF-8. Вы можете включить Режим UTF-8 в Python с помощью параметра командной строки -X utf8 или переменной среды PYTHONUTF8=1. См. PYTHONUTF8 для включения режима UTF-8 и Добавление переменных среды для изменения переменных среды.
Когда Режим UTF-8 в Python включён, вы всё ещё можете использовать системную кодировку (ANSI-кодовая страница) через кодек «mbcs».
Обратите внимание, что добавление PYTHONUTF8=1 в переменные среды по умолчанию повлияет на все приложения Python 3.7+ на вашей системе. Если у вас есть приложения Python 3.7+, которые полагаются на устаревшую системную кодировку, рекомендуется временно установить переменную среды или использовать параметр командной строки -X utf8.
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.13), вы заметите, что был запущен Python 3.13. Чтобы запустить 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. Строки shebang
Если первая строка файла скрипта начинается с #!, она известна как строка shebang. Linux и другие операционные системы семейства Unix имеют встроенную поддержку таких строк, и они часто используются в таких системах для указания способа выполнения скрипта. Этот запускатель позволяет использовать те же возможности для Python-скриптов в Windows, и приведенные выше примеры демонстрируют их использование.
Для обеспечения переносимости строк shebang в Python-скриптах между Unix и Windows, этот запускатель поддерживает ряд «виртуальных» команд для указания интерпретатора, который следует использовать. Поддерживаемые виртуальные команды:
/usr/bin/env/usr/bin/python/usr/local/bin/pythonpython
Например, если первая строка вашего скрипта начинается с
#! /usr/bin/python
Будет найден и использован по умолчанию Python или активная виртуальная среда. Поскольку многие Python-скрипты, написанные для работы в Unix, уже содержат эту строку, вы должны обнаружить, что эти скрипты могут использоваться запускателем без изменений. Если вы пишете новый скрипт для Windows, который вы надеетесь использовать в Unix, используйте одну из строк shebang, начинающихся с /usr.
Любая из вышеперечисленных виртуальных команд может быть дополнена явной версией (либо только главной версии, либо главной и второстепенной версии). Кроме того, 32-разрядная версия может быть запрошена добавлением «-32» после второстепенной версии. Например, /usr/bin/python3.7-32 запрашивает использование 32-разрядной версии Python 3.7. Если активна виртуальная среда, версия будет проигнорирована, и будет использоваться среда.
Добавлен в версии 3.7: Начиная с запускателя python 3.7, можно запросить 64-разрядную версию, добавив суффикс «-64». Кроме того, можно указать главную и архитектуру без второстепенной (например, /usr/bin/python3-64).
Изменено в версии 3.11: Суффикс «-64» устарел и теперь подразумевает «любую архитектуру, которая не является явно i386/32-разрядной». Для запроса определённой среды используйте новый аргумент -V:TAG с полным тэгом.
Изменено в версии 3.13: Виртуальные команды, ссылающиеся на python теперь предпочитают активную виртуальную среду, а не поиск PATH. Это обрабатывает случаи, когда shebang указывает /usr/bin/env python3, но python3.exe отсутствует в активной среде.
Форма shebang /usr/bin/env имеет ещё одно специальное свойство. Прежде чем искать установленные интерпретаторы Python, эта форма будет искать исполняемый файл PATH исполняемый файл Python, соответствующий имени, указанному в качестве первого аргумента. Это соответствует поведению программы Unix env, которая выполняет PATH поиск. Если исполняемый файл, соответствующий первому аргументу после команды env, не найден, но аргумент начинается с python, он будет обработан как описано для других виртуальных команд. Переменная среды PYLAUNCHER_NO_SEARCH_PATH может быть установлена (любое значение) для пропуска этого поиска в PATH.
Строки shebang, которые не соответствуют ни одному из этих шаблонов, ищутся в разделе [commands] файла конфигурации запускателя .INI файла. Это может быть использовано для обработки определённых команд так, как это уместно для вашей системы. Имя команды должно быть единственным аргументом (без пробелов в исполняемом файле shebang), а подставленное значение — полным путём к исполняемому файлу (дополнительные аргументы, указанные в .INI, будут заключены в кавычки как часть имени файла).
[commands] /bin/xpython=C:\Program Files\XPython\python.exe
Любые команды, не найденные в файле .INI, обрабатываются как пути к исполняемым файлам Windows, которые являются абсолютными или относительными к каталогу, содержащему файл скрипта. Это удобство для скриптов, относящихся только к Windows, таких как те, которые созданы установщиком, так как поведение не совместимо с оболочками Unix. Эти пути могут быть заключены в кавычки и могут содержать несколько аргументов, после чего путь к скрипту и любые дополнительные аргументы будут добавлены.
4.8.3. Аргументы в строках shebang
Строки shebang также могут указывать дополнительные параметры, которые должны передаваться интерпретатору Python. Например, если у вас есть строка shebang:
#! /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), так и для «окносной» версии (например, pyw.exe).
Настройка, указанная в «каталоге приложения», имеет приоритет над настройкой рядом с исполняемым файлом, поэтому пользователь, у которого нет права записи в файл .ini рядом с загрузчиком, может переопределить команды в этом глобальном файле .ini.
4.8.4.2. Настройка значений по умолчанию для Python
В некоторых случаях в команде можно указать квалификатор версии, чтобы определить, какая версия Python будет использоваться командой. Квалификатор версии начинается с номера основной версии и может быть необязательно продолжен точкой ('.') и спецификатором версии младшей версии. Кроме того, можно указать, требуется ли 32- или 64-разрядная реализация, добавив «-32» или «-64».
Например, строка shebang #!python не имеет квалификатора версии, а #!python3 имеет квалификатор версии, который указывает только основную версию.
Если в команде нет квалификаторов версии, переменная среды PY_PYTHON может быть установлена для указания квалификатора версии по умолчанию. Если она не установлена, значение по умолчанию — «3». Переменная может принимать любое значение, которое можно передать в командной строке, например, «3», «3.7», «3.7-32» или «3.7-64». (Обратите внимание, что опция «-64» доступна только с загрузчиком, включённым в Python 3.7 или более поздней версии.)
Если квалификаторы младших версий отсутствуют, переменная среды PY_PYTHON{major} (где {major} — текущий квалификатор основной версии, определённый выше) может быть установлена для указания полной версии. Если такой опции нет, загрузчик перечислит установленные версии Python и воспользуется последним младшим релизом, найденным для основной версии, что, вероятно, хотя и не гарантированно, является наиболее недавно установленной версией в этой семействе.
В Windows x64 с установленными 32- и 64-разрядными реализациями одной и той же версии Python (major.minor) всегда будет предпочтительна 64-разрядная версия. Это будет справедливо для 32- и 64-разрядных реализаций загрузчика — 32-разрядный загрузчик предпочтёт запустить 64-разрядную установку Python указанной версии, если она доступна. Это делается для того, чтобы поведение загрузчика можно было предсказать, зная только установленные версии на компьютере и не обращая внимания на порядок их установки (то есть, не зная, была ли установлена 32- или 64-разрядная версия Python и соответствующего загрузчика последней).
Как отмечалось выше, необязательный суффикс «-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 не найден, вот как заполняется sys.path в Windows:
- В начале добавляется пустая запись, соответствующая текущей директории.
- Если переменная среды
PYTHONPATHсуществует, как описано в Переменные окружения, её записи добавляются далее. Обратите внимание, что в Windows пути в этой переменной должны разделяться точкой с запятой, чтобы отличить их от двоеточия, используемого в идентификаторах дисков (C:\и т.д.). - Дополнительные «пути приложения» могут быть добавлены в реестр в качестве подключаемых ключей к
\SOFTWARE\Python\PythonCore{version}\PythonPathкак в разделеHKEY_CURRENT_USER, так и вHKEY_LOCAL_MACHINE. Подключаемые ключи, имеющие значения путей, разделенные точкой с запятой, приведут к добавлению каждого пути вsys.path. (Обратите внимание, что все известные установщики используют только HKLM, поэтому HKCU обычно пуст.) - Если переменная среды
PYTHONHOMEустановлена, она используется как «Python Home». В противном случае, путь к основному исполняемому файлу Python используется для поиска «маячного файла» (либоLib\os.pyилиpythonXY.zip) для вывода «Python Home». Если Python Home найден, соответствующие подкаталоги добавляются вsys.path(Lib,plat-win, и т.д.) на основе этой папки. В противном случае, основной путь Python строится из пути PythonPath, хранящегося в реестре. - Если Python Home не может быть найден,
PYTHONPATHне указан в среде и в реестре нет записей, используется путь по умолчанию с относительными записями (например,.\Lib;.\plat-win, и т.д.).
Если файл pyvenv.cfg найден рядом с основным исполняемым файлом или в директории на один уровень выше исполняемого файла, применяются следующие вариации:
- Если
home— абсолютный путь, иPYTHONHOMEне задан, этот путь используется вместо пути к основному исполняемому файлу для определения домашнего расположения.
Конечный результат всего этого:
- При запуске
python.exe, или любого другого .exe в основной директории Python (либо установленная версия, либо непосредственно из директории PCbuild), основной путь определяется, и основные пути в реестре игнорируются. Другие «пути приложения» в реестре всегда читаются. - Когда Python размещён в другом .exe (разная директория, встраивание через COM и т.д.), «Python Home» не определяется, поэтому используется основной путь из реестра. Другие «пути приложения» в реестре всегда читаются.
- Если Python не может найти свой домашний каталог и нет значений в реестре (замороженный .exe, какая-то очень странная установка), вы получаете путь с некоторыми стандартными, но относительными путями.
Для тех, кто хочет объединить Python в своё приложение или дистрибутив, следующие рекомендации помогут избежать конфликтов с другими установками:
- Включите файл
._pthрядом с вашим исполняемым файлом, содержащий директории для включения. Это позволит проигнорировать пути, перечисленные в реестре и переменных среды, а также игнорироватьsite, еслиimport siteне указан. - Если вы загружаете
python3.dllилиpython37.dllв свой собственный исполняемый файл, явно задайтеPyConfig.module_search_pathsдоPy_InitializeFromConfig(). - Очистите и/или перезапишите
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. Это включает в себя инструменты для:
- Компонентной модели объектов (COM)
- Вызовов Win32 API
- Реестра
- Журнала событий
- Библиотеки классов Microsoft Foundation (MFC) пользовательские интерфейсы
PythonWin — это пример приложения MFC, поставляемого с PyWin32. Это интегрированная среда разработки (IDE) со встроенным отладчиком.
См. также
- Win32 How Do I…?
-
автора Тим Голден
- 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.13/using/windows.html