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

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

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

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

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

../../_images/win_installer.png

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

  • Вам не нужно быть администратором (если только не требуется системное обновление для библиотеки C Runtime Library или вы не устанавливаете Программа запуска Python для Windows для всех пользователей).

  • Python будет установлен в ваш пользовательский каталог

  • Программа запуска Python для Windows будет установлен в соответствии с параметром, указанным внизу первой страницы

  • Будут установлены стандартная библиотека, набор тестов, программа запуска и pip

  • Если этот параметр выбран, каталог установки будет добавлен в ваш PATH

  • Ярлыки будут видны только текущему пользователю

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

Чтобы выполнить установку для всех пользователей, вам следует выбрать «Настроить установку». В этом случае:

  • Возможно, от вас потребуется предоставить административные учетные данные или одобрение

  • Python будет установлен в каталог Program Files

  • Программа запуска Python для Windows будет установлен в каталог Windows

  • Дополнительные функции могут быть выбраны во время установки

  • Стандартная библиотека может быть предварительно скомпилирована в байт-код

  • Если этот параметр выбран, каталог установки будет добавлен в систему PATH

  • Ярлыки доступны для всех пользователей

4.1.2. Удаление ограничения MAX_PATH

Исторически в Windows длина пути была ограничена 260 символами. Это означало, что пути, длина которых превышала это значение, не разрешались и возникали ошибки.

В последних версиях Windows это ограничение может быть увеличено примерно до 32 000 символов. Вашему администратору потребуется активировать групповую политику «Включить длинные пути Win32» или установить для параметра LongPathsEnabled значение 1 в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.

Это позволяет функции open(), модулю os и большинству других функций поиска путей принимать и возвращать пути длиной более 260 символов.

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

Изменено в версии 3.6: В Python была включена поддержка длинных путей.

4.1.3. Установка без пользовательского интерфейса

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

Чтобы полностью скрыть пользовательский интерфейс установщика и установить Python автоматически, укажите параметр /quiet. Чтобы пропустить взаимодействие с пользователем, но при этом отображать прогресс и ошибки, укажите параметр /passive. Можно выбрать опцию /uninstall, чтобы немедленно начать удаление Python - запрос на подтверждение отображаться не будет.

Все остальные параметры передаются как name=value, где обычно используется значение 0 для отключения функции, 1 для включения функции или путь. Полный список доступных параметров приведен ниже.

Имя

Описание

По умолчанию

Установочные пользователи

Выполните общесистемную установку.

0

TargetDir Целевой объект

Установочный каталог

Выбирается в зависимости от пользователей установки

DefaultAllUsersTargetDir по умолчанию

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

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

По умолчанию используется только targetdir

Каталог установки по умолчанию для установок just-for-me

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

Пользовательский адрес по умолчанию

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

(пусто)

Ассоциативные файлы

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

1

Компилировать все

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

0

Предварительный путь

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

0

Путь к приложению

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

0

Кратчайший путь

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

1

Включение_doc

Руководство по установке Python

1

Include_debug Включает в себя

Установка двоичных файлов для отладки

0

Включение_dev

Установите заголовки и библиотеки для разработчиков. Если не указать это, установка может оказаться невозможной.

1

Включение_exe

Установите python.exe и связанные с ним файлы. Если не указать это, установка может оказаться невозможной.

1

Include_launcher Включающий в себя

Установите Программа запуска Python для Windows.

1

Установить всех пользователей-загрузчиков

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

1

Включение_lib

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

1

Включение_pip

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

1

Включение_символов

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

0

Включение_tcltk

Установите поддержку Tcl/Tk и работайте в режиме ОЖИДАНИЯ

1

Включающий тест

Установить стандартный библиотечный набор тестов

1

Включение_инструментов

Установка служебных скриптов

1

Только для запуска

Устанавливается только программа запуска. Это переопределит большинство других параметров.

0

Простая установка

Отключите большую часть пользовательского интерфейса установки

0

Простое описание установки

Пользовательское сообщение, отображаемое при использовании упрощенного пользовательского интерфейса установки.

(пусто)

Например, чтобы автоматически установить общесистемную установку 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 |версия|». Убедитесь, что выбранное вами приложение опубликовано Python Software Foundation, и установите его.

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

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

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

Все три команды также доступны с суффиксами номеров версий, например, как python3.exe и python3.x.exe, а также python.exe (где 3.x - это конкретная версия, которую вы хотите запустить, например |версия|). Откройте «Управление псевдонимами выполнения приложений» через «Пуск», чтобы выбрать, какая версия 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, и ее можно обнаружить, найдя 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. Альтернативные пакеты

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

ActivePython

Установщик, совместимый с несколькими платформами, документация, PyWin32

Anaconda

Научно-популярные модули (такие как numpy, scipy и pandas) и менеджер пакетов conda.

Enthought Deployment Manager

«Среда Python следующего поколения и менеджер пакетов».

Ранее Enthought предусматривал навес, но это reached end of life in 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.

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

Если вы не включили эту опцию во время установки, вы всегда можете повторно запустить программу установки, выбрать «Изменить» и включить ее. Кроме того, вы можете вручную изменить 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).

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

Когда параметр Python UTF-8 Mode включен, вы по-прежнему можете использовать системную кодировку (кодовую страницу ANSI) с помощью кодека «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 для 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.10), вы наверняка заметили, что Python 3.10 был запущен - чтобы запустить 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 files) при ее установке. Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использоваться программа запуска, и, следовательно, вы можете использовать те же средства, которые описаны выше, чтобы скрипт указал версию, которую следует использовать.

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

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

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

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

  • /usr/bin/env

  • /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).

Изменено в версии 3.11: Суффикс «-64» устарел и теперь подразумевает «любую архитектуру, которая не является доказуемо i386/32-разрядной». Чтобы запросить конкретную среду, используйте новый аргумент -V:TAG с тегом complete.

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

Строки Shebang, которые не соответствуют ни одному из этих шаблонов, можно найти в разделе [commands] в .INI file панели запуска. Это может быть использовано для обработки определенных команд способом, который имеет смысл для вашей системы. Имя команды должно быть единственным аргументом (в исполняемом файле 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), так и для «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-разрядной реализациями одного и того же (major.minor) Установлена версия Python, 64-разрядная версия всегда будет предпочтительнее. Это будет справедливо как для 32-разрядной, так и для 64-разрядной реализаций программы запуска - 32-разрядная программа запуска предпочтет выполнить установку 64-разрядного Python указанной версии, если она доступна. Это делается для того, чтобы можно было предсказать поведение программы запуска, зная только, какие версии установлены на ПК, и без учета порядка, в котором они были установлены (т.е. не зная, была ли последней установлена 32-разрядная или 64-разрядная версия Python и соответствующая программа запуска). Как отмечалось выше, для изменения этого поведения в спецификаторе версии можно использовать необязательный суффикс «-32» или «-64».

Примеры:

  • Если соответствующие параметры не заданы, команды python и python2 будут использовать последнюю установленную версию Python 2.x, а команда python3 будет использовать последнюю установленную версию Python 3.x.

  • Команда python3.7 вообще не будет использовать какие-либо параметры, поскольку версии указаны полностью.

  • Если PY_PYTHON=3, то команды python и python3 будут использовать последнюю установленную версию Python 3.

  • Если PY_PYTHON=3.7-32, то команда python будет использовать 32-разрядную реализацию версии 3.7, тогда как команда python3 будет использовать последнюю версию установленного Python (PY_PYTHON вообще не рассматривался, поскольку была указана основная версия).

  • Если PY_PYTHON=3 и PY_PYTHON3=3.7, то команды python и python3 будут использовать именно 3.7

В дополнение к переменным среды, те же параметры можно настроить в файле .INI, используемом программой запуска. Раздел в INI-файле называется [defaults], а имя ключа будет таким же, как и у переменных окружения, без префикса PY_ (и обратите внимание, что имена ключей в INI-файле не чувствительны к регистру). Содержимое переменной окружения будет переопределять параметры, указанные в INI-файле.

Например:

  • Параметр PY_PYTHON=3.7 эквивалентен INI-файлу, содержащему:

[defaults]
python=3.7
  • Значения PY_PYTHON=3 и PY_PYTHON3=3.7 эквивалентны INI-файлу, содержащему:

[defaults]
python=3
python3=3.7

4.8.5. Диагностика

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

4.8.6. Пробный запуск

Если задана переменная среды PYLAUNCHER_DRYRUN (любое значение), программа запуска выведет команду, которую она должна была выполнить, но на самом деле не запустит Python. Это может быть полезно для инструментов, которые хотят использовать программу запуска для обнаружения и последующего запуска Python напрямую. Обратите внимание, что команда, записываемая в стандартный вывод, всегда кодируется с использованием UTF-8 и может неправильно отображаться в консоли.

4.8.7. Установка по требованию

Если задана переменная среды PYLAUNCHER_ALLOW_INSTALL (любое значение), а запрошенная версия Python не установлена, но доступна в Microsoft Store, программа запуска попытается установить ее. Для завершения этого может потребоваться взаимодействие с пользователем, и вам может потребоваться повторно запустить команду.

Дополнительная переменная PYLAUNCHER_ALWAYS_INSTALL приводит к тому, что программа запуска всегда пытается установить Python, даже если она обнаружена. В основном это предназначено для тестирования (и должно использоваться с PYLAUNCHER_DRYRUN).

4.8.8. Коды возврата

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

Названия кодов приведены в том виде, в каком они используются в источниках, и приведены только для справки. Получить к ним доступ или разрешить их можно только прочитав эту страницу. Записи перечислены в алфавитном порядке названий.

Имя

Ценность

Описание

RC_BAD_VENV_CFG - ПУТЬ к УСПЕХУ

107

Файл pyvenv.cfg был найден, но поврежден.

RC_CREATE_PROCESS - ПРОЦЕСС СОЗДАНИЯ

101

Не удалось запустить Python.

RC_УСТАНОВКА

111

Установка была запущена, но после ее завершения потребуется повторно запустить команду.

ОШИБКА RC_INTERNAL_ERROR

109

Непредвиденная ошибка. Пожалуйста, сообщите об ошибке.

RC_NO_КОМАНДНАЯ СТРОКА

108

Не удается получить доступ к командной строке из операционной системы.

RC_NO_PYTHON

103

Не удается найти запрошенную версию.

RC_NO_VENV_CFG_ПРИКЛЮЧЕНИЕ

106

Требовалось значение pyvenv.cfg, но оно не было найдено.

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

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

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

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

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

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

  • Когда Python размещен в другом исполняемом файле (в другом каталоге, встроен через COM и т.д.), «Домашняя страница Python» не будет выведена, поэтому используется основной путь из реестра. Другие «пути к приложениям» в реестре всегда готовы.

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

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

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

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

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

  • Если вы не можете воспользоваться предыдущими предложениями (например, ваш дистрибутив позволяет пользователям запускать python.exe напрямую), убедитесь, что файл landmark (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. Сюда входят утилиты для:

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

См.также

Win32 How Do I…?

автор: Тим Голден

Python and COM

авторы: Дэвид и Пол Бодди

4.10.2. cx_Freeze (Замораживание)

cx_Freeze преобразует скрипты 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 для получения подробной информации о платформах с предварительно скомпилированными установщиками.

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