4. Использование Python в Windows

Цель этого документа - дать обзор поведения, специфичного для Windows, о котором вы должны знать при использовании Python в Microsoft Windows.

В отличие от большинства систем и служб Unix, Windows не включает поддерживаемую системой установку Python. Чтобы сделать Python доступным, команда CPython в течение многих лет компилировала инсталляторы Windows (пакеты MSI) с каждым release. Эти инсталляторы в основном предназначены для установки Python на одного пользователя, при этом основной интерпретатор и библиотека используются одним пользователем. Программа установки также может устанавливать для всех пользователей одной машины, а для локальных дистрибутивов приложений доступен отдельный ZIP-файл.

Как указано в PEP 11, релиз Python поддерживает платформу Windows только в том случае, если Microsoft считает платформу находящейся на расширенной поддержке. Это означает, что Python 3.10 поддерживает 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.10 - по две для 32-битной и 64-битной версий интерпретатора. Программа web installer - это небольшая начальная загрузка, и она будет автоматически загружать необходимые компоненты по мере необходимости. Программа offline installer включает компоненты, необходимые для установки по умолчанию, и требует подключения к Интернету только для дополнительных функций. Другие способы избежать загрузки во время установки см. в Установка без загрузки.

После запуска программы установки можно выбрать один из двух вариантов:

../../_images/win_installer.png

Если вы выберете «Установить сейчас»:

  • Вам не потребуется быть администратором (если только не требуется системное обновление для библиотеки C Runtime Library или вы устанавливаете Python Launcher для 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

Каталог установки по умолчанию для установки всех пользователей

%ProgramFiles%\Python X.Y или %ProgramFiles(x86)%\Python X.Y

DefaultJustForMeTargetDir

Каталог установки по умолчанию для установок «просто для меня

%LocalAppData%\Programs\PythonXY или %LocalAppData%\Programs\PythonXY-32 или %LocalAppData%\Programs\PythonXY-64

DefaultCustomTargetDir

Каталог пользовательской установки по умолчанию, отображаемый в пользовательском интерфейсе

(пустой)

AssociateFiles

Создайте ассоциации файлов, если программа запуска также установлена.

1

CompileAll

Скомпилируйте все файлы .py в .pyc.

0

PrependPath

Добавьте каталоги install и Scripts в PATH и .PY в PATHEXT.

0

Ярлыки

Создайте ярлыки для интерпретатора, документации и IDLE, если он установлен.

1

Включить_документ

Установите руководство по Python

1

Включить_отладку

Установите отладочные двоичные файлы

0

Include_dev

Установите заголовки и библиотеки разработчика. Пропуск этого пункта может привести к неработоспособной установке.

1

Include_exe

Установите python.exe и связанные с ним файлы. Пропуск этого пункта может привести к неработоспособной установке.

1

Включить_запуск

Установите Python Launcher для Windows.

1

InstallLauncherAllUsers

Устанавливает программу запуска для всех пользователей. Также требует, чтобы Include_launcher было установлено в 1

1

Include_lib

Установите стандартную библиотеку и модули расширения. Пропуск этого пункта может привести к неработоспособной установке.

1

Включить_пип

Установите поставляемые в комплекте pip и setuptools

1

Включить_символы

Установите отладочные символы (*.pdb)

0

Include_tcltk

Установите поддержку Tcl/Tk и IDLE

1

Включить_тест

Установите набор тестов стандартной библиотеки

1

Включить_инструменты

Установка сценариев утилиты

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 и выберите «Uninstall/Change», чтобы открыть программу установки в режиме обслуживания.

«Изменить» позволяет добавлять или удалять функции, изменяя флажки - неизменные флажки ничего не установят и не удалят. Некоторые параметры нельзя изменить в этом режиме, например, каталог установки; чтобы изменить их, вам придется полностью удалить, а затем переустановить Python.

«Восстановление» проверит все файлы, которые должны быть установлены с использованием текущих настроек, и заменит все, которые были удалены или изменены.

«Uninstall» удалит Python полностью, за исключением Python Launcher для Windows, который имеет свою собственную запись в Programs and Features.

4.2. Пакет Microsoft Store

Добавлено в версии 3.7.2.

Пакет Microsoft Store представляет собой легко устанавливаемый интерпретатор Python, предназначенный в основном для интерактивного использования, например, студентами.

Чтобы установить пакет, убедитесь, что у вас установлены последние обновления Windows 10, и найдите в приложении Microsoft Store «Python 3.10». Убедитесь, что выбранное приложение опубликовано Python Software Foundation, и установите его.

Предупреждение

Python всегда будет доступен бесплатно в Microsoft Store. Если вас просят заплатить за него, значит, вы выбрали неправильный пакет.

После установки Python можно запустить, найдя его в Пуске. Кроме того, он будет доступен из любой командной строки или сеанса PowerShell, если набрать python. Далее, pip и IDLE можно использовать, набрав pip или idle. IDLE также можно найти в Пуске.

Все три команды также доступны с суффиксами номера версии, например, как python3.exe и python3.x.exe, а также python.exe (где 3.x - это конкретная версия, которую вы хотите запустить, например, 3.10). Откройте «Manage App Execution Aliases» через Start, чтобы выбрать, какая версия 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 для автоматического обновления. В целом, пакеты сторонних разработчиков должны рассматриваться как часть приложения («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, но она reached end of life in 2016.

WinPython

Windows-специфичный дистрибутив с готовыми научными пакетами и инструментами для создания пакетов.

Обратите внимание, что эти пакеты могут не включать последние версии Python или других библиотек, а также не поддерживаются основной командой Python.

4.6. Конфигурирование Python

Чтобы удобно запускать Python из командной строки, можно изменить некоторые переменные среды по умолчанию в Windows. Хотя программа установки предоставляет возможность настроить переменные PATH и PATHEXT для вас, это надежно только для единичной, общесистемной установки. Если вы регулярно используете несколько версий Python, рассмотрите возможность использования переменных Python Launcher для Windows.

4.6.1. Экскурс: Установка переменных среды

Windows позволяет настраивать переменные среды постоянно как на уровне пользователя, так и на уровне системы, или временно в командной строке.

Чтобы временно установить переменные среды, откройте Command Prompt и используйте команду 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.

Чтобы навсегда изменить переменные среды по умолчанию, нажмите кнопку Пуск и найдите «редактировать переменные среды» или откройте Свойства системы, Advanced system settings и нажмите кнопку Environment Variables. В этом диалоге вы можете добавить или изменить переменные пользователя и системы. Чтобы изменить системные переменные, вам необходим неограниченный доступ к вашей машине (т.е. права администратора).

Примечание

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 для программы установки пакета. Таким образом, вы также можете выполнять свои скрипты с опциями командной строки, см. документацию Командная строка.

Если вы не включили эту опцию во время установки, вы всегда можете повторно запустить программу установки, выбрать Modify и включить ее. Кроме того, вы можете вручную изменить PATH, используя указания в Экскурс: Установка переменных среды. Вам нужно установить переменную окружения PATH, чтобы она включала каталог вашей установки Python, отделенный точкой с запятой от других записей. Пример переменной может выглядеть следующим образом (при условии, что первые две записи уже существуют):

C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9

4.7. Режим UTF-8

Добавлено в версии 3.7.

Windows по-прежнему использует устаревшие кодировки для системной кодировки (кодовая страница ANSI). Python использует ее для кодировки текстовых файлов по умолчанию (например, locale.getpreferredencoding()).

Это может вызвать проблемы, поскольку UTF-8 широко используется в Интернете и большинстве Unix-систем, включая WSL (Windows Subsystem for Linux).

Вы можете использовать Python UTF-8 Mode для изменения кодировки текста по умолчанию на UTF-8. Вы можете включить Python UTF-8 Mode с помощью опции командной строки -X utf8 или переменной окружения PYTHONUTF8=1. См. PYTHONUTF8 о включении режима UTF-8 и Экскурс: Установка переменных среды о том, как изменять переменные окружения.

Когда Python UTF-8 Mode включен, вы все еще можете использовать системную кодировку (ANSI Code Page) через кодек «mbcs».

Обратите внимание, что добавление PYTHONUTF8=1 к переменным среды по умолчанию повлияет на все приложения Python 3.7+ в вашей системе. Если у вас есть приложения Python 3.7+, которые полагаются на устаревшую системную кодировку, рекомендуется временно установить переменную окружения или использовать опцию командной строки -X utf8.

Примечание

Даже если режим UTF-8 отключен, Python по умолчанию использует UTF-8 в Windows для:

  • Консольный ввод/вывод, включая стандартный ввод/вывод (подробнее см. PEP 528).

  • filesystem encoding (подробнее см. PEP 529).

4.8. Python Launcher для Windows

Добавлено в версии 3.3.

Python launcher для 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.10), вы заметили, что Python 3.10 был запущен - чтобы запустить Python 3.7, попробуйте выполнить команду:

py -3.7

Если вам нужна последняя версия Python 2, которая у вас установлена, попробуйте выполнить команду:

py -2

Вы должны найти последнюю версию запуска Python 3.x.

Если вы видите следующую ошибку, у вас не установлена пусковая установка:

'py' is not recognized as an internal or external command,
operable program or batch file.

Однопользовательские установки Python не добавляют пусковую установку в PATH, если эта опция не была выбрана при установке.

Команда:

py --list

отображает текущую установленную версию (версии) Python.

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.10 будет выведена.

Обратите внимание, что в отличие от интерактивного использования, голый «python» будет использовать последнюю версию Python 2.x, которую вы установили. Это сделано для обратной совместимости и для совместимости с Unix, где команда python обычно относится к Python 2.

4.8.1.4. Из ассоциаций файлов

При установке программа запуска должна быть связана с файлами Python (т.е. с файлами .py, .pyw, .pyc). Это означает, что при двойном щелчке на одном из этих файлов из проводника Windows будет использоваться программа запуска, и поэтому вы можете использовать те же средства, которые описаны выше, чтобы скрипт указывал версию, которую следует использовать.

Основным преимуществом этого является то, что одна программа запуска может одновременно поддерживать несколько версий Python в зависимости от содержимого первой строки.

4.8.2. Линии Шебанга

Если первая строка файла сценария начинается с #!, она известна как строка «shebang». Linux и другие Unix-подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в таких системах для указания того, как должен быть выполнен сценарий. Эта программа запуска позволяет использовать те же средства для сценариев Python в Windows, и приведенные выше примеры демонстрируют их применение.

Чтобы строки shebang в сценариях Python можно было переносить между Unix и Windows, эта программа запуска поддерживает ряд «виртуальных» команд, указывающих, какой интерпретатор использовать. Поддерживаются следующие виртуальные команды:

  • /usr/bin/env python

  • /usr/bin/python

  • /usr/local/bin/python

  • python

Например, если первая строка вашего сценария начинается со слов

#! /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». Кроме того, можно указать major и архитектуру без minor (т.е. /usr/bin/python3-64).

Форма строки shebang /usr/bin/env имеет еще одно особое свойство. Прежде чем искать установленные интерпретаторы Python, эта форма будет искать исполняемый файл PATH на предмет наличия исполняемого файла Python. Это соответствует поведению программы Unix env, которая выполняет поиск PATH.

4.8.3. Аргументы в строках shebang

В строках shebang также можно указать дополнительные параметры, которые будут передаваться интерпретатору Python. Например, если у вас есть строка shebang:

#! /usr/bin/python -v

Тогда Python будет запущен с опцией -v.

4.8.4. Персонализация

4.8.4.1. Настройка с помощью INI-файлов

Запускающая программа будет искать два .ini файла - py.ini в каталоге «данные приложения» текущего пользователя (т.е. каталог, возвращаемый вызовом функции Windows SHGetFolderPath с CSIDL_LOCAL_APPDATA) и py.ini в том же каталоге, что и запускающая программа. Одни и те же файлы .ini используются как для «консольной» версии программы запуска (т.е. py.exe), так и для «windows» версии (т.е. 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. Диагностика

Если переменная окружения PYLAUNCH_DEBUG установлена (в любое значение), программа запуска будет печатать диагностическую информацию на stderr (т.е. на консоль). Хотя эта информация умудряется быть одновременно многословной и краткой, она должна позволить вам увидеть, какие версии Python были расположены, почему была выбрана конкретная версия и точную командную строку, использованную для выполнения целевого Python.

4.9. Поиск модулей

Python обычно хранит свою библиотеку (и, соответственно, папку site-packages) в каталоге установки. Так, если вы установили Python в каталог C:\Python\, библиотека по умолчанию будет находиться в C:\Python\Lib\, а модули сторонних разработчиков должны храниться в C:\Python\Lib\site-packages\.

Чтобы полностью переопределить sys.path, создайте файл ._pth с тем же именем, что и DLL (python37._pth) или исполняемый файл (python._pth), и укажите по одной строке для каждого пути, который нужно добавить в sys.path. Файл, основанный на имени DLL, перекрывает файл, основанный на имени исполняемого файла, что позволяет при желании ограничить пути для любой программы, загружающей среду выполнения.

Когда файл существует, все переменные реестра и среды игнорируются, включается изолированный режим, и site не импортируется, если только одна строка в файле не указывает import site. Пустые пути и строки, начинающиеся с #, игнорируются. Каждый путь может быть абсолютным или относительным по отношению к местоположению файла. Операторы импорта, отличные от site, не допускаются, и произвольный код не может быть указан.

Обратите внимание, что файлы .pth (без ведущего подчеркивания) будут нормально обрабатываться модулем site, если указано import site.

Когда файл ._pth не найден, в Windows так заполняется sys.path:

  • В начале добавляется пустая запись, которая соответствует текущему каталогу.

  • Если существует переменная окружения 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». Если дом Python найден, соответствующие подкаталоги, добавленные в sys.path (Lib, plat-win и т.д.), основываются на этой папке. В противном случае основной путь к Python строится из PythonPath, хранящегося в реестре.

  • Если Python Home не может быть найден, в окружении не указано PYTHONPATH и не найдены записи реестра, используется путь по умолчанию с относительными записями (например, .\Lib;.\plat-win и т.д.).

Если файл pyvenv.cfg найден рядом с основным исполняемым файлом или в каталоге на один уровень выше исполняемого файла, применяются следующие варианты:

  • Если home является абсолютным путем и PYTHONHOME не установлен, то этот путь используется вместо пути к основному исполняемому файлу при вычислении домашнего местоположения.

Конечным результатом всего этого является:

  • При запуске python.exe или любого другого .exe в основном каталоге Python (либо установленной версии, либо непосредственно из каталога PCbuild), путь к ядру вычисляется, а пути к ядру в реестре игнорируются. Другие «пути приложения» в реестре всегда считываются.

  • Если Python размещен в другом .exe (в другом каталоге, встроен через COM и т.д.), «Python Home» не будет вычислен, поэтому используется путь к ядру из реестра. Другие «пути приложения» в реестре всегда считываются.

  • Если Python не может найти свой дом и нет значения реестра (замороженный .exe, какая-то очень странная установка), вы получите путь с некоторыми путями по умолчанию, но относительными.

Для тех, кто хочет включить Python в свое приложение или дистрибутив, следующие советы помогут избежать конфликтов с другими установками:

  • Включите файл ._pth рядом с исполняемым файлом, содержащий каталоги для включения. При этом будут игнорироваться пути, указанные в реестре и переменных окружения, а также игнорироваться site, если не указан import site.

  • Если вы загружаете python3.dll или python37.dll в собственный исполняемый файл, явно вызовите Py_SetPath() или (по крайней мере) Py_SetProgramName() перед Py_Initialize().

  • Очистите и/или перезапишите PYTHONPATH и установите PYTHONHOME перед запуском python.exe из вашего приложения.

  • Если вы не можете использовать предыдущие предложения (например, вы являетесь дистрибутивом, который позволяет людям запускать python.exe напрямую), убедитесь, что файл-знак (Lib\os.py) существует в вашем каталоге установки. (Обратите внимание, что он не будет обнаружен внутри ZIP-файла, но вместо него будет обнаружен правильно названный ZIP-файл).

Это гарантирует, что файлы в общесистемной установке не будут иметь приоритет над копией стандартной библиотеки, поставляемой с вашим приложением. В противном случае у ваших пользователей могут возникнуть проблемы при работе с вашим приложением. Обратите внимание, что первое предложение является лучшим, так как остальные могут быть подвержены нестандартным путям в реестре и пакетах пользовательских сайтов.

Изменено в версии 3.6:
  • Добавляет поддержку файлов ._pth и удаляет опцию applocal из pyvenv.cfg.

  • Добавляет 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. Сюда входят утилиты для:

PythonWin - это образец приложения MFC, поставляемый с PyWin32. Это встраиваемая IDE со встроенным отладчиком.

См.также

Win32 How Do I…?

Тим Голден

Python and COM

Дэвид и Пол Бодди

4.10.2. cx_Freeze

cx_Freeze - это расширение distutils (см. Расширение Distutils), которое оборачивает сценарии Python в исполняемые программы Windows (файлы *.exe). Сделав это, вы можете распространять свое приложение, не требуя от пользователей установки Python.

4.11. Компиляция Python в Windows

Если вы хотите скомпилировать CPython самостоятельно, первое, что вы должны сделать, это получить source. Вы можете скачать либо исходники последнего выпуска, либо просто взять свежий checkout.

Дерево исходных текстов содержит решение для сборки и файлы проекта для Microsoft Visual Studio, который является компилятором, используемым для сборки официальных релизов Python. Эти файлы находятся в каталоге PCbuild.

Просмотрите PCbuild/readme.txt для получения общей информации о процессе сборки.

Для получения информации о модулях расширения обратитесь к Создание расширений C и C++ в Windows.

4.12. Другие платформы

С постоянным развитием Python некоторые платформы, которые поддерживались ранее, больше не поддерживаются (из-за отсутствия пользователей или разработчиков). Проверьте PEP 11 для получения подробной информации обо всех неподдерживаемых платформах.

Подробную информацию о платформах с предварительно скомпилированными установщиками смотрите в Python for Windows.

Вернуться на верх