Использование 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 будет установлен в каталог 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. Установка без графического интерфейса
Все параметры, доступные в графическом интерфейсе установщика, также можно указать из командной строки, что позволяет скриптовым установщикам воспроизводить установку на многих машинах без взаимодействия с пользователем. Эти параметры также можно задать без скрытия графического интерфейса, чтобы изменить некоторые значения по умолчанию.
Следующие параметры (найденные путём выполнения установщика с /?) могут быть переданы установщику:
Имя | Описание |
|---|---|
/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.2. Пакет Microsoft Store
Добавлен в версии 3.7.2.
Пакет Microsoft Store — это легко устанавливаемый интерпретатор Python, предназначенный в основном для интерактивного использования, например, студентами.
Чтобы установить пакет, убедитесь, что у вас установлены последние обновления Windows 10, и найдите в приложении Microsoft Store «Python 3.12». Убедитесь, что приложение, которое вы выбираете, опубликовано 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 не подлежат обновлению, и новые версии следует устанавливать рядом и ссылаться на них с помощью полного пути. В качестве альтернативы, вручную удалите каталог пакета и установите его заново. Многие системы CI автоматически сделают это, если они не сохраняют файлы между сборками.
Рядом с каталогом 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. Оно предназначено для использования как части другого приложения, а не для непосредственного доступа конечным пользователям.
После извлечения встроенное распределение (почти) полностью изолировано от системы пользователя, включая переменные среды, параметры системного реестра и установленные пакеты. Стандартная библиотека включена в виде предварительно скомпилированных и оптимизированных .pyc файлов в ZIP-архиве, и python3.dll, python37.dll, python.exe и pythonw.exe также предоставляются. Tcl/tk (включая все зависимые модули, такие как Idle), pip и документация Python не включены.
Примечание
Встроенное распределение не включает Microsoft C Runtime, и ответственность за его предоставление лежит на установщике приложения. Возможно, что эта библиотека уже установлена на системе пользователя или установлена автоматически через Windows Update, и ее можно обнаружить, найдя ucrtbase.dll в системном каталоге.
Пакеты сторонних разработчиков должны устанавливаться установщиком приложения вместе со встроенным распределением. Использование pip для управления зависимостями, как при обычной установке Python, не поддерживается с этим распределением, хотя при определённых условиях возможно включение и использование pip для автоматических обновлений. В общем случае, пакеты сторонних разработчиков следует рассматривать как часть приложения («vendoring»), чтобы разработчик мог обеспечить совместимость с более новыми версиями перед предоставлением обновлений пользователям.
Два рекомендуемых варианта использования этого распределения описаны ниже.
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
Эти изменения будут применяться к любым последующим командам, выполняемым в этой консоли, и будут унаследованы любыми приложениями, запущенными из консоли.
Включение имени переменной в процентах приведет к расширению существующего значения, что позволит добавить новое значение в начало или конец. Изменение PATH путём добавления каталога, содержащего python.exe в начало, является распространённым способом обеспечения запуска корректной версии Python.
Чтобы постоянно изменить переменные среды по умолчанию, щелкните «Пуск» и найдите «Изменение переменных среды», или откройте свойства системы, Дополнительные параметры системы и нажмите кнопку Переменные среды. В этом диалоговом окне вы можете добавлять или изменять переменные пользователя и системы. Для изменения системных переменных вам требуется доступ без ограничений к компьютеру (т.е. права администратора).
Примечание
Windows будет конкатенировать переменные пользователя после системных переменных, что может привести к неожиданным результатам при изменении PATH.
Переменная PYTHONPATH используется всеми версиями Python, поэтому вы не должны настраивать её постоянно, если перечисленные пути включают только код, совместимый со всеми вашими установленными версиями Python.
См. также
- https://docs.microsoft.com/en-us/windows/win32/procthread/environment-variables
-
Обзор переменных среды в Windows
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1
-
Команда
set, для временного изменения переменных среды - https://docs.microsoft.com/en-us/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 (Windows Subsystem for Linux).
Вы можете использовать Режим UTF-8 Python для изменения кодировки текстовых файлов по умолчанию на UTF-8. Вы можете включить Режим UTF-8 Python через параметр командной строки -X utf8 или переменную среды PYTHONUTF8=1. См. PYTHONUTF8 для включения режима UTF-8 и Добавление: Настройка переменных среды для того, как изменить переменные среды.
Когда режим Python UTF-8 Mode включён, вы всё ещё можете использовать системную кодировку (страницу кодов 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.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. Строки 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 с полным тегом.
Форма строки 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 и использует последнюю младшую версию, найденную для основной версии, которая, вероятно, хотя и не гарантированно, является последней установленной версией в этой семействе.
В 64-разрядной Windows, где установлены как 32-, так и 64-разрядные реализации одной версии Python (основная.младшая), всегда будет предпочтена 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». В противном случае путь к основному исполняемому файлу 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. Он включает в себя утилиты для:
- Компонентной объектной модели (COM)
- Вызовов Win32 API
- Реестра
- Журнала событий
- Библиотеки классов Microsoft Foundation (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