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

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

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

Как указано в PEP 11, версия Python поддерживает только платформу Windows, в то время как Microsoft считает эту платформу находящейся под расширенной поддержкой. Это означает, что Python 3.8 поддерживает Windows Vista и новее. Если вам требуется поддержка Windows XP, установите Python 3.4.

Для Windows доступно несколько различных установщиков, у каждого из которых свои преимущества и недостатки.

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

Пакет Microsoft Store — это простая установка Python, которая подходит для запуска скриптов и пакетов, а также использования IDLE или других сред разработки. Для него требуется Windows 10, но его можно безопасно установить, не повреждая другие программы. Он также предоставляет множество удобных команд для запуска Python и его инструментов.

Пакеты nuget — это легкие установки, предназначенные для систем непрерывной интеграции. Они используются для создания пакетов Python или запуска скриптов, но они не обновляются и не имееют инструментов пользовательского интерфейса.

Встраиваемый пакет — это минимальный пакет Python, подходящий для встраивания в более крупное приложение.

3.1. Полный установщик

3.1.1. Шаги установки

Четыре Python 3.8 установщика доступны для загрузки — по две для 32-битной и 64-битной версий интерпретатора. Веб-установщик представляет собой небольшую начальную загрузку, и при необходимости он автоматически загружает необходимые компоненты. Автономный установщик включает компоненты, необходимые для установки по умолчанию, и требует только подключения к интернету для дополнительных функций. См. установку без скачивания, чтобы узнать о других способах избежать загрузки во время установки.

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

../_images/win_installer.png

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

  • Вам не нужны права администратора (если не требуется обновление системы для библиотеки времени выполнения C или вы не устанавливаете Python запускальщик для Windows для всех пользователей)
  • Python будет установлен в ваш пользовательский каталог
  • Python запускальщик для Windows будет установлен в соответствии с опцией внизу первой страницы
  • Будут установлены стандартная библиотека, набор тестов, программа запуска и pip
  • Если этот параметр выбран, каталог установки будет добавлен в ваш PATH
  • Ярлыки будут видны только текущему пользователю

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

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

  • Вам может потребоваться предоставить административные данные или разрешение
  • Python будет установлен в каталог Program Files
  • Python запускальщик для Windows будет установлен в каталог Windows
  • Дополнительные функции можно выбрать во время установки
  • Стандартная библиотека может предварительно скомпилирована в байт-код
  • Если этот флажок установлен, каталог установки будет добавлен в систему PATH
  • Ярлыки доступны для всех пользователей

3.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 была включена поддержка длинных путей.

3.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 Пользовательский каталог установки по умолчанию, отображаемый в UI (пусто)
AssociateFiles Создать файловые ассоциации, если | 1 лаунчер также установлен. |
CompileAll Компилировать все .py файлы в .pyc. 0
PrependPath Добавление установленных каталогов Scripts в PATH и .PY в PATHEXT 0
Shortcuts Создать ярлыки для интерпретатора, документации и IDLE, если установлен. 1
Include_doc Установить Python мануал 1
Include_debug Установить отладочные бинарники 0
Include_dev Установка сборочных заголовков и библиотек 1
Include_exe Установить python.exe и связанные файлы 1
Include_launcher Установить Python запускальщик для Windows 1
InstallLauncherAllUsers Установить Python запускальщик для Windows для всех пользователей. 1
Include_lib Установить стандартную библиотеку и модули расширения 1
Include_pip Установить комплектные pip и setuptools 1
Include_symbols Установка отладочных символов (*.pdb) 0
Include_tcltk Установить поддержку Tcl/Tk и IDLE 1
Include_test Установить стандартную библиотеку набора тестов 1
Include_tools Установка скриптов утилиты 1
LauncherOnly Только устанавливает лаунчер. Это переопределит большинство других вариантов. 0
SimpleInstall Отключить большинство UI 0
SimpleInstallDescription Настраиваемое сообщение, отображаемое при использовании упрощенного UI установки. (пусто)

Например, чтобы без вывода сообщений установить стандартную общесистемную установку Python, вы можете использовать следующую команду (из командной строки с повышенными привилегиями):

python-3.8.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0

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

python-3.8.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>

3.1.4. Установка без скачивания

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

Выполните следующую команду из командной строки, чтобы загрузить все возможные необходимые файлы. Не забудьте заменить фактическое имя вашего установщика python-3.8.0.exe и создать макеты в их собственных каталогах, чтобы избежать конфликтов между файлами с одинаковыми именами.

python-3.8.0.exe /layout [optional target directory]

Вы также можете указать параметр /quiet, чтобы скрыть отображение прогресса.

3.1.5. Изменение установки

После установки Python вы можете добавлять или удалять компоненты с помощью инструмента «Программы и компоненты», входящего в состав Windows. Выберите запись Python и выберите «Удалить/Изменение», чтобы открыть программу установки в режиме обслуживания.

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

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

«Удалить» удалит Python полностью, за исключением Python запускальщик для Windows, у которого есть отдельная запись в «Программы и компоненты».

3.2. Пакет Microsoft Store

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

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

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

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

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

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

Все три команды также доступны с суффиксами номера версии, например, python3.exe и python3.x.exe, а также python.exe (где 3.x — это конкретная версия, которую вы хотите запустить, например 3.8). Открыть «Управление псевдонимами выполнения приложений» через Пуск, чтобы выбрать, какая версия Python связана с каждой командой. Рекомендуется убедиться, что pip и idle соответствуют выбранной версии python.

Виртуальные среды можно создать с помощью python -m venv, активировать и использовать в обычном режиме.

Если вы установили другую версию Python и добавили её в переменную PATH, она будет доступна как python.exe, а не из Microsoft Store. Чтобы получить доступ к новой установке, используйте python3.exe или python3.x.exe.

Программа запуска py.exe обнаружит эту установку Python, но предпочтет установку из традиционного установщика.

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

3.2.1. Известные проблемы

Из-за ограничений приложений Microsoft Store скрипты Python могут не получить полного доступа к записям общих расположений, таким как TEMP и реестр. Вместо этого будет записываться личная копия. Если ваши сценарии должны изменять общие расположения, вам необходимо установить полную версию установщика.

Дополнительные сведения о технической основе этих ограничений см. в документации Microsoft по пакетным приложениям с полным доверием, которая в настоящее время доступна по адресу.

3.3. Пакеты nuget.org

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

Пакет nuget.org — это среда Python уменьшенного размера, предназначенная для использования в системах непрерывной интеграции и сборки, не имеющих общесистемной установки Python. Хотя nuget является «диспетчером пакетов для .NET», он также отлично работает с пакетами, содержащими инструменты времени сборки.

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

Инструмент командной строки nuget.exe можно загрузить непосредственно с сайта nugetcli, например, с помощью 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. Включение настроек автоматически приведёт к использованию заголовков и библиотек импорта в вашей сборке.

Страницы с информацией о пакете на сайте: https://www.nuget.org/packages/python для 64-разрядной версии и www.nuget.org/packages/pythonx86 для 32-разрядной версии.

3.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 в системном каталоге.

Примечание

При работе в Windows 7 Python 3.8 требует установки обновления KB2533623. Встраиваемый дистрибутив не обнаруживает это обновление и может дать сбой во время выполнения. Это обновление включено в более поздние версии Windows.

Сторонние пакеты должны устанавливаться установщиком приложения вместе со встроенным дистрибутивом. Использование pip для управления зависимостями, как для обычной установки Python, не поддерживается этим дистрибутивом, хотя с некоторой осторожностью можно будет включить и использовать pip для автоматических обновлений. Как правило, сторонние пакеты следует рассматривать как часть приложения («поставку»), чтобы разработчик мог обеспечить совместимость с более новыми версиями перед предоставлением обновлений пользователям.

Два рекомендуемых варианта использования этого дистрибутива описаны ниже.

3.4.1. Приложение Python

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

Использование специализированного исполняемого файла в качестве средства запуска требует некоторого программирования, но предоставляет наиболее прозрачный интерфейс для пользователей. С настраиваемой программой запуска нет очевидных признаков того, что программа работает на Python: значки могут быть настроены, информация о компании и версии может отсутствовать, а ассоциации файлов работают правильно. В большинстве случаев пользовательская программа запуска должна просто иметь возможность вызывать Py_Main с жёстко запрограммированной командной строкой.

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

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

3.4.2. Встраивание Python

Приложения, написанные на машинном коде, часто требуют некоторого языка сценариев, и для этой цели можно использовать встроенный дистрибутив Python. Как правило, большая часть приложения написана на машинном коде, а некоторые его части либо вызывают python.exe, либо напрямую используют python3.dll. В любом случае распаковки встроенного дистрибутива в подкаталог установки приложения достаточно для предоставления загружаемого интерпретатора Python.

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

3.5. Альтернативные связки

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

ActivePython
Установщик с мультиплатформенной совместимостью, документацией, PyWin32
Anaconda
Научно-популярные модули (такие как numpy, scipy и pandas) и менеджер пакетов conda.
Canopy
«Среда комплексного анализа Python» с редакторами и прочими Инструментами разработки.
WinPython
Дистрибутив для Windows с готовыми научными пакетами и инструментами для сборки пакетов.

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

3.6. Настройка Python

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

3.6.1. Экскурс: установка переменных окружения

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

Чтобы временно установить переменные среды, открыть командную строку и воспользоваться командой set:

C:\>set PATH=C:\Program Files\Python 3.8;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python

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

Включение имени переменной в знаки процента расширит существующее значение, что позволит вам добавить новое значение либо в начало, либо в конец. Изменение PATH путём добавления в начало каталога, содержащего python.exe, является распространенным способом обеспечения запуска правильной версии Python.

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

Примечание

Windows объединит пользовательские переменные после системных, что может привести к неожиданным результатам при изменении PATH.

Переменная PYTHONPATH используется всеми версиями Python 2 и Python 3, поэтому вам не следует постоянно настраивать эту переменную, если она не включает только код, совместимый со всеми установленными вами версиями Python.

См.также

https://www.microsoft.com/en-us/wdsi/help/folder-variables
Переменные среды в Windows NT
https://technet.microsoft.com/en-us/library/cc754250.aspx
Команда SET для временного изменения переменных среды
https://technet.microsoft.com/en-us/library/cc755104.aspx
Команда SETX для постоянного изменения переменных среды
https://support.microsoft.com/en-us/help/310519/how-to-manage-environment-variables-in-windows-xp
Уравление переменными среды в Windows XP
https://www.chem.gla.ac.uk/~louis/software/faq/q1.html
Установка переменных среды, Луи Дж. Фарруджа

3.6.2. Поиск исполняемого файла Python

Изменено в версии 3.5.

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

На первой странице установщика можно выбрать параметр «Add Python in PATH», чтобы установщик добавил место установки в PATH. Также добавляется расположение папки Scripts\. Это позволяет вам ввести python для запуска интерпретатора и pip для установщика пакетов. Таким образом, вы также можете выполнять свои сценарии с параметрами командной строки, см. документацию по командная строке.

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

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

3.7. Режим UTF-8

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

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

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

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

Когда включен режим UTF-8:

  • locale.getpreferredencoding() возвращает 'UTF-8' вместо системной кодировки. Функция используется для кодировки текста по умолчанию во многих местах, включая open(), Popen, Path.read_text() и т. д.
  • sys.stdin, sys.stdout и sys.stderr используют UTF-8 в качестве кодировки текста.
  • Вы по-прежнему можете использовать системную кодировку через кодек «mbcs».

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

Примечание

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

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

3.8. Python запускальщик для Windows

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

Программа запускальщик (Launcher) Python для Windows — это утилита, которая помогает находить и запускать различные версии Python. Он позволяет сценариям (или командной строке) указывать предпочтение для конкретной версии Python, а также находить и выполнять эту версию.

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

Установка запускальщика изначально была указана в PEP 397.

3.8.1. Начало

3.8.1.1. Из командной строки

Изменено в версии 3.6.

При общесистемной установке Python 3.3 и более поздних версий программа запуска будет установлена на вашем PATH. Программа запуска совместима со всеми доступными версиями Python, поэтому не имеет значения, какая версия установлена. Чтобы убедиться, что средство запуска доступно, выполните следующую команду в командной строке:

py

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

Если у вас установлено несколько версий Python (например, 2.7 и 3.8), вы заметите, что Python 3.8 запустился — для запуска Python 2.7 примените команду:

py -2.7

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

py -2

Вы должны увидеть, что запускается последняя версия Python 2.x.

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

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

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

3.8.1.2. Виртуальные среды

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

Если средство запуска запущено без явной спецификации версии Python и активной виртуальной среды (созданная с помощью модуля стандартной библиотеки venv или внешнего инструмента virtualenv), средство запуска будет запускать интерпретатор виртуальной среды, а не глобальный. Чтобы запустить глобальный интерпретатор, либо деактивируйте виртуальную среду, либо явно укажите глобальную версию Python.

3.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 2.6, попробуйте изменить первую строку на #! python2.6, и вы увидите напечатанную информацию о версии 2.6.

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

3.8.1.4. Из файловых ассоциаций

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

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

3.8.2. Шебанг строки

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

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

  • /usr/bin/env python
  • /usr/bin/python
  • /usr/local/bin/python
  • python

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

#! /usr/bin/python

Будет найден и применён Python по умолчанию. Поскольку многие сценарии Python, написанные для работы в Unix, уже содержат эту строку, вы должны обнаружить, что эти сценарии могут использоваться программой запуска без изменений. Если вы пишете новый сценарий в Windows, который, как вы надеетесь, будет полезен в Unix, вам следует использовать одну из шебанг строк, начинающихся с /usr.

У любой из вышеперечисленных виртуальных команд может существовать суффикс явной версии (либо только основной версии, либо основной и дополнительной версии). Кроме того, 32-битную версию можно запросить, добавив «-32» после дополнительной версии. Т.е. /usr/bin/python2.7-32 запросит использование 32-разрядного Python 2.7.

Добавлено в версии 3.7: Начиная с python 3.7 запускальщик может запрашивать 64-битную версию по суффиксу «-64». Кроме того, можно указать основное и архитектуру без второстепенных деталей (например, /usr/bin/python3-64).

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

3.8.3. Аргументы в строках шебанга

Шебанг строки также могут указывать дополнительные параметры, передаваемые интерпретатору Python. Например, если у вас есть шебанг строка:

#! /usr/bin/python -v

Будет запущен Python с опцией -v

3.8.4. Настройка

3.8.4.1. Настройка через файлы INI

Программа запуска будет искать два .ini файла — py.ini в каталоге «данных приложения» текущего пользователя (т. е. в каталоге, возвращенном вызовом функции Windows SHGetFolderPath с CSIDL_LOCAL_APPDATA) и py.ini в том же каталоге, что и программа запуска. Одни и те же файлы .ini используются как для «консольной» версии программы запуска (например, py.exe), так и для версии «Windows» (например, pyw.exe).

Настройка, указанная в «каталоге приложения», будет приоритетнее над настройкой рядом с исполняемым файлом, поэтому пользователь, у которого нет доступа на запись к файлу .ini рядом с программой запуска (launcher), может переопределить команды в глобальном .ini файле.

3.8.4.2. Настройка версий Python по умолчанию

В некоторых случаях квалификатор версии может добавляться к команде, чтобы указать, используемую версию Python. Квалификатор версии начинается с основного номера версии и может сопровождаться точкой («.») и указателем дополнительной версии. Кроме того, можно указать, будет ли запрашиваться 32- или 64-разрядная реализация, добавив «-32» или «-64».

Например, у шебанг строки #!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.1 и python2.7 вообще не обращаются к каким-либо параметрам, поскольку версии полностью указаны.
  • Если PY_PYTHON=3, команды python и python3 будут использовать последнюю установленную версию Python 3.
  • Если PY_PYTHON=3.1-32, команда python будет использовать 32-разрядную реализацию 3.1, тогда как команда python3 будет использовать последнюю установленную версию Python (PY_PYTHON вообще не рассматривался, поскольку была указана основная версия)
  • Если PY_PYTHON=3 и PY_PYTHON3=3.1, команды python и python3 будут использовать именно 3.1

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

Например:

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

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

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

3.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 не найден, sys.path заполняется в Windows следующим образом:

  • В начало добавляется пустая запись, соответствующая текущему каталогу.
  • Если существует переменная среды PYTHONPATH, как описано в Переменные окружения, её записи добавляются следующими. Обратите внимание, что в Windows пути в этой переменной должны разделяться точкой с запятой, чтобы отличить их от двоеточия, используемого в идентификаторах дисков (C:\ и т. д.).
  • Дополнительные «пути приложений» можно добавить в реестр как подразделы \SOFTWARE\Python\PythonCore{version}\PythonPath в кусты HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE. Подразделы, для которых в качестве значения по умолчанию используются строки пути, разделенные точками с запятой, будут вызывать добавление каждого пути в sys.path. (Обратите внимание, что все известные установщики используют только HKLM, поэтому HKCU обычно пуст.)
  • Если задана переменная среды PYTHONHOME, она принимается как «Дом для Python». В противном случае путь к основному исполняемому файлу Python используется для поиска «файла ориентира» (либо Lib\os.py, либо pythonXY.zip) для определения «Дома Python». Если дом Python найден, соответствующие подкаталоги, добавленные в sys.path (Lib, plat- win и т. д.), основаны на данном каталоге. В противном случае основной путь Python создаётся из PythonPath, хранящегося в реестре.
  • Если Дом Python не найден, в среде не указан PYTHONPATH и не найдены записи в реестре, используется путь по умолчанию с относительными записями (например, .\Lib;.\plat-win и т. д.).

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

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

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

  • При запуске python.exe или любого другого .exe в основном каталоге Python (либо установленной версии, либо непосредственно из каталога PCbuild) определяется путь к ядру, а пути к ядру в реестре игнорируются. Всегда считываются другие «пути приложений» в реестре.
  • Когда Python размещен в другом .exe (другом каталоге, встроенном через COM и т. д.), «Python 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-файл с правильным именем.

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

Изменено в версии 3.6:
  • Добавляет поддержку файла ._pth и удаляет параметр applocal из pyvenv.cfg.
  • Добавляет pythonXX.zip в качестве потенциального ориентира при непосредственном соседстве с исполняемым файлом.
Не рекомендуется, начиная с версии 3.6:

Модули, указанные в реестре под Modules (не PythonPath), могут импортироваться importlib.machinery.WindowsRegistryFinder. Этот поисковик включен в Windows начиная с версии 3.6.0 и более ранних, но, возможно, в будущем его потребуется явно добавить в sys.meta_path.

3.10. Дополнительные модули

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

Стандартные модули для Windows описаны в Специальных службах MS Windows.

3.10.1. PyWin32

Модуль PyWin32 от Марка Хаммонда — это набор модулей для расширенной поддержки Windows. Сюда входят утилиты для:

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

См.также

Как я работаю с win32
от Тима Голдена
Python и COM
Дэвида и Пола Бодди

3.10.2. cx_Freeze

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

3.10.3. WConio

Поскольку расширенный уровень обработки терминалов Python (curses) ограничен Unix-подобными системами, существует также библиотека, эксклюзивная для Windows: консольный ввод-вывод Windows для Python.

WConio — это оболочка для Turbo-C CONIO.H, используемая для создания текстовых пользовательских интерфейсов.

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

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

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

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

По поводу модулей расширения обращайтесь к Создание расширений C и C++ в Windows.

См.также

Python + Windows + distutils + SWIG + gcc MinGW
или «Создание расширений Python на C/C++ с помощью SWIG и их компиляция с помощью MinGW gcc под Windows» или «Установка расширения Python с distutils и без Microsoft Visual C++» Себастьяна Соваж, 2003

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

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

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