Использование Python в Windows
Этот документ призван предоставить обзор особенностей поведения Python в Microsoft Windows, которые следует знать.
В отличие от большинства Unix-систем и сервисов, Windows не содержит системной поддерживаемой установки Python. Для обеспечения доступности Python команда разработчиков CPython много лет компилирует установщики Windows (пакеты MSI) с каждой релиза. Эти установщики в первую очередь предназначены для добавления установки Python для каждого пользователя, где основной интерпретатор и библиотеки используются одним пользователем. Установщик также может устанавливать для всех пользователей одного компьютера, а для локальных распределений приложений доступен отдельный ZIP-архив.
Как указано в PEP 11, выпуск Python поддерживает платформу Windows только при условии, что Microsoft рассматривает платформу как находящуюся в расширенной поддержке. Это означает, что Python 3.11 поддерживает 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.11 — по два для 32-разрядной и 64-разрядной версий интерпретатора. Веб-установщик — это небольшой начальный загрузчик, который автоматически загрузит необходимые компоненты по мере необходимости. Установщик автономной загрузки включает компоненты, необходимые для стандартной установки, и требует интернет-соединение только для дополнительных функций. Обратитесь к Установка без скачивания, чтобы узнать о других способах избежать скачивания во время установки.
После запуска установщика можно выбрать один из двух вариантов:
Если вы выберете «Установить сейчас»:
- Вам не потребуется статус администратора (за исключением случаев, когда требуется обновление системной библиотеки C Runtime Library или вы устанавливаете Загрузчик 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. Установка без графического интерфейса
Все параметры, доступные в графическом интерфейсе установщика, также могут быть заданы из командной строки, что позволяет скриптовым установщикам повторять установку на многих машинах без взаимодействия с пользователем. Эти параметры также могут быть заданы без скрытия графического интерфейса, чтобы изменить некоторые значения по умолчанию.
Чтобы полностью скрыть графический интерфейс установщика и установить Python в бесшумном режиме, передайте параметр /quiet. Чтобы пропустить взаимодействие с пользователем, но все же отобразить процесс и ошибки, передайте параметр /passive. Параметр /uninstall можно передать, чтобы немедленно начать удаление Python — запрос подтверждения не будет отображен.
Все остальные параметры передаются как 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.11». Убедитесь, что приложение, которое вы выбираете, опубликовано Python Software Foundation, и установите его.
Предупреждение
Python всегда будет доступен бесплатно в Microsoft Store. Если вам предлагается заплатить за него, вы выбрали неверный пакет.
После установки Python можно запустить, найдя его в меню «Пуск». Кроме того, он будет доступен из любой сессии командной строки или PowerShell, набрав python. Кроме того, pip и IDLE можно использовать, набрав pip или idle. IDLE также можно найти в меню «Пуск».
Все три команды также доступны с суффиксами номеров версий, например, как python3.exe и python3.x.exe а также python.exe (где 3.x — конкретная версия, которую вы хотите запустить, например, 3.11). Откройте «Управление псевдонимами запуска приложений» через «Пуск», чтобы выбрать, какая версия 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.org для получения самой актуальной информации об использовании nuget. Далее приведён краткий обзор, достаточный для разработчиков 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 для автоматических обновлений. В общем случае пакеты сторонних разработчиков следует рассматривать как часть приложения («вендинга»), чтобы разработчик мог обеспечить совместимость с новыми версиями перед предоставлением обновлений пользователям.
Два рекомендуемых варианта использования этого распределения описаны ниже.
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 для Linux).
Вы можете использовать Режим 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.11), вы заметите, что был запущен Python 3.11. Чтобы запустить 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 launcher 3.7, можно запросить 64-битную версию с помощью суффикса «-64». Кроме того, можно указать основную версию и архитектуру без дополнительной (например, /usr/bin/python3-64).
Изменено в версии 3.11: Суффикс «-64» устарел и теперь подразумевает «любую архитектуру, которая не является явно i386/32-битной». Чтобы запросить конкретную среду, используйте новый аргумент -V:TAG с полным тегом.
Формат /usr/bin/env строки shebang имеет ещё одну специальную особенность. Перед поиском установленных интерпретаторов 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, команда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не установлена, этот путь используется вместо пути к основному исполняемому файлу при определении расположения «Home».
Конечным результатом всего этого является:
- При запуске
python.exe, или любого другого .exe в основной директории Python (будь то установленная версия или непосредственно из директории PCbuild), основной путь вычисляется, а основные пути из реестра игнорируются. Другие «пути приложений» в реестре всегда читаются. - Когда Python размещается в другом .exe (другая директория, встроенный через COM и т.д.), «Python Home» не вычисляется, поэтому используется основной путь из реестра. Другие «пути приложений» в реестре всегда читаются.
- Если 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-архив будет обнаружен.)
Это гарантирует, что файлы в установке на весь компьютер не будут иметь приоритет над копией стандартной библиотеки, включенной в ваше приложение. В противном случае пользователи могут столкнуться с проблемами при использовании вашего приложения. Обратите внимание, что первое предложение является лучшим, так как другие могут все еще быть восприимчивы к нестандартным путям в реестре и пользовательских пакетах.
Изменено в версии 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)
- Вызовов API Win32
- Реестра
- Журнала событий
- Microsoft Foundation Classes (MFC) пользовательские интерфейсы
PythonWin — это пример MFC-приложения, поставляемого с PyWin32. Это интегрируемая среда разработки с встроенным отладчиком.
См. также
- 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.
Подробную информацию о платформах с предварительно скомпилированными установщиками см. на сайте Python для Windows.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/using/windows.html