Использование Python в Windows
В данном документе представлен обзор особенностей поведения Python в среде Microsoft Windows.
В отличие от большинства Unix-систем и сервисов, Windows не содержит встроенной поддержки установки Python. Для использования Python команда CPython в течение многих лет компилирует и распространяет установщики Windows (пакеты MSI) с каждой версией. Эти установщики предназначены в первую очередь для установки Python для каждого пользователя, используя основной интерпретатор и библиотеки только для одного пользователя. Также установщик может устанавливать Python для всех пользователей на одном компьютере, и доступен отдельный ZIP-архив для локальных распределений приложений.
Как указано в PEP 11, версия Python поддерживает платформу Windows только пока Microsoft поддерживает эту платформу. Это означает, что Python 3.10 поддерживает Windows 8.1 и более поздние версии. Если вам требуется поддержка Windows 7, пожалуйста, установите Python 3.8.
Существует несколько различных установщиков Windows, каждый из которых имеет свои преимущества и недостатки.
Полный установщик содержит все компоненты и является лучшим вариантом для разработчиков, использующих Python для любых проектов.
Пакет из Microsoft Store — это простая установка Python, подходящая для запуска скриптов и пакетов, а также для использования IDLE или других сред разработки. Он требует Windows 10 и выше, но его можно безопасно установить без повреждения других программ. Также он предоставляет множество удобных команд для запуска Python и его инструментов.
Пакеты nuget.org — это лёгкие установки, предназначенные для систем непрерывной интеграции. Их можно использовать для создания пакетов Python или запуска скриптов, но они не обновляются и не имеют инструментов пользовательского интерфейса.
Встраиваемый пакет — это минимальный пакет Python, подходящий для встраивания в более крупное приложение.
4.1. Полный установщик
4.1.1. Шаги установки
Доступны четыре установщика Python 3.10 для загрузки — по два для 32-разрядной и 64-разрядной версий интерпретатора. Веб-установщик — это небольшой начальный запрос, и он автоматически загрузит необходимые компоненты по мере необходимости. Установка автономным установщиком включает компоненты, необходимые для стандартной установки, и требует подключения к интернету только для дополнительных функций. См. Установку без загрузки, чтобы узнать о других способах избежания загрузки во время установки.
После запуска установщика можно выбрать один из двух вариантов:
Если вы выберите «Установить сейчас»:
- Вам не потребуется права администратора (если не требуется системное обновление библиотеки C Runtime или вы устанавливаете Загрузчик Python для Windows для всех пользователей)
- Python будет установлен в ваш пользовательский каталог
- Загрузчик Python Launcher for Windows будет установлен в соответствии с выбором в нижней части первой страницы
- Будут установлены стандартная библиотека, набор тестов, загрузчик и pip
- Если выбрано, каталог установки будет добавлен в вашу
PATH - Ярлыки будут видны только для текущего пользователя
Выбор «Настроить установку» позволит вам выбрать функции для установки, место установки и другие параметры или действия после установки. Для установки символов отладки или библиотек вам потребуется использовать этот вариант.
Для установки для всех пользователей следует выбрать «Настроить установку». В этом случае:
- Вам может потребоваться предоставить учетные данные администратора или разрешение
- Python будет установлен в каталог Program Files
- Загрузчик Python Launcher for Windows будет установлен в каталог Windows
- Дополнительные функции можно выбрать во время установки
- Стандартная библиотека может быть предварительно скомпилирована в байткод
- Если выбрано, каталог установки будет добавлен в системную
PATH - Ярлыки доступны для всех пользователей
4.1.2. Удаление ограничения MAX_PATH
В Windows исторически длина пути ограничена 260 символами. Это означало, что пути, превышающие эту длину, не будут разрешены, и возникнут ошибки.
В последних версиях Windows это ограничение можно расширить примерно до 32 000 символов. Администратор должен активировать групповую политику «Включить длинные пути Win32» или установить LongPathsEnabled на 1 в ключе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.
Это позволяет функции open(), модулю os и большинству других функций работы с путями принимать и возвращать пути, превышающие 260 символов.
После изменения вышеуказанного параметра дальнейшая настройка не требуется.
Изменено в версии 3.6: Поддержка длинных путей была включена в Python.
4.1.3. Установка без графического интерфейса
Все параметры, доступные в графическом интерфейсе установщика, также можно указать в командной строке, что позволяет скриптовым установщикам воспроизводить установку на многих машинах без взаимодействия с пользователем. Эти параметры также можно установить без скрытия графического интерфейса для изменения некоторых значений по умолчанию.
Чтобы полностью скрыть графический интерфейс установщика и установить Python в бесшумном режиме, передайте параметр /quiet. Чтобы пропустить взаимодействие с пользователем, но при этом отобразить прогресс и ошибки, передайте параметр /passive. Параметр /uninstall может быть передан для немедленного начала удаления Python — запрос подтверждения не будет отображен.
Все остальные параметры передаются как name=value, где значение обычно равно 0 для отключения функции, 1 для включения функции или пути. Полный список доступных параметров показан ниже.
Имя | Описание | Значение по умолчанию |
|---|---|---|
InstallAllUsers | Выполнить системную установку. | 0 |
TargetDir | Каталог установки | Выбирается в зависимости от InstallAllUsers |
DefaultAllUsersTargetDir | Каталог установки по умолчанию для установки для всех пользователей |
|
DefaultJustForMeTargetDir | Каталог установки по умолчанию для установки только для меня |
|
DefaultCustomTargetDir | Каталог установки по умолчанию для пользовательской установки, отображаемый в графическом интерфейсе | (пусто) |
AssociateFiles | Создать ассоциации файлов, если также установлен загрузчик. | 1 |
CompileAll | Скомпилировать все | 0 |
PrependPath | Добавить каталоги установки и Scripts в | 0 |
Shortcuts | Создать ярлыки для интерпретатора, документации и IDLE, если они установлены. | 1 |
Include_doc | Установить руководство по Python | 1 |
Include_debug | Установить отладочные двоичные файлы | 0 |
Include_dev | Установить заголовочные файлы и библиотеки разработчика. Пропуск этого может привести к непригодной для использования установке. | 1 |
Include_exe | Установить | 1 |
Include_launcher | Установить Загрузчик Python для Windows. | 1 |
InstallLauncherAllUsers | Устанавливает загрузчик для всех пользователей. Также требует, чтобы | 1 |
Include_lib | Установить стандартную библиотеку и модули расширений. Пропуск этого может привести к непригодной для использования установке. | 1 |
Include_pip | Установить встроенные pip и setuptools | 1 |
Include_symbols | Установить символы отладки ( | 0 |
Include_tcltk | Установить поддержку Tcl/Tk и IDLE | 1 |
Include_test | Установить набор тестов стандартной библиотеки | 1 |
Include_tools | Установить утилитарные скрипты | 1 |
LauncherOnly | Устанавливает только загрузчик. Это переопределит большинство других параметров. | 0 |
SimpleInstall | Отключить большинство элементов графического интерфейса установки | 0 |
SimpleInstallDescription | Пользовательское сообщение для отображения при использовании упрощенного графического интерфейса установки. | (пусто) |
Например, чтобы бесшумно установить стандартную системную установку Python, вы можете использовать следующую команду (из командной строки с правами администратора):
python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
Чтобы пользователи могли легко установить персональную копию Python без набора тестов, вы можете предоставить ярлык с помощью следующей команды. Это отобразит упрощенную начальную страницу и запретит настройку:
python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
(Обратите внимание, что пропуск загрузчика также пропускает ассоциации файлов и рекомендуется только для установок на основе текущего пользователя, когда есть также системная установка, включающая загрузчик.)
Перечисленные выше параметры также можно указать в файле с именем unattend.xml вместе с исполняемым файлом. Этот файл определяет список параметров и значений. Когда значение предоставляется как атрибут, оно преобразуется в число, если это возможно. Значения, предоставленные в виде текста элемента, всегда оставляются строками. В этом примере файла устанавливаются те же параметры, что и в предыдущем примере:
<Options>
<Option Name="InstallAllUsers" Value="no" />
<Option Name="Include_launcher" Value="0" />
<Option Name="Include_test" Value="no" />
<Option Name="SimpleInstall" Value="yes" />
<Option Name="SimpleInstallDescription">Just for me, no test suite</Option>
</Options>
4.1.4. Установка без загрузки
Поскольку некоторые функции Python не включены в первоначальную загрузку установщика, для выбора этих функций может потребоваться подключение к интернету. Чтобы избежать этого, все возможные компоненты можно загрузить по запросу, чтобы создать полный макет, который больше не будет требовать подключения к интернету независимо от выбранных функций. Обратите внимание, что эта загрузка может быть больше, чем требуется, но при выполнении большого количества установок очень полезно иметь локальную кэшированную копию.
Выполните следующую команду в командной строке, чтобы загрузить все необходимые файлы. Не забудьте заменить python-3.9.0.exe фактическим именем вашего установщика и создать макеты в своих каталогах, чтобы избежать конфликтов между файлами с одинаковыми именами.
python-3.9.0.exe /layout [optional target directory]
Вы также можете указать параметр /quiet, чтобы скрыть отображение прогресса.
4.1.5. Изменение установки
После установки Python вы можете добавить или удалить функции с помощью инструмента «Программы и компоненты», который входит в Windows. Выберите запись Python и выберите «Удалить/Изменить», чтобы открыть установщик в режиме обслуживания.
«Изменить» позволяет добавлять или удалять функции путем изменения флажков — не измененные флажки ничего не установят или не удалят. Некоторые параметры нельзя изменить в этом режиме, например, каталог установки; чтобы изменить их, вам нужно полностью удалить и повторно установить Python.
«Восстановить» проверит все файлы, которые должны быть установлены в соответствии с текущими параметрами, и заменит любые удаленные или измененные файлы.
«Удалить» полностью удалит Python, за исключением Загрузчика Python для Windows, у которого есть своя запись в «Программы и компоненты».
4.2. Пакет Microsoft Store
Новый в версии 3.7.2.
Пакет Microsoft Store — это легко устанавливаемый интерпретатор Python, предназначенный в основном для интерактивного использования, например, студентами.
Для установки пакета убедитесь, что у вас установлены последние обновления Windows 10, и найдите в приложении Microsoft Store «Python 3.10». Убедитесь, что приложение опубликовано Python Software Foundation, и установите его.
Предупреждение
Python всегда будет доступен бесплатно в Microsoft Store. Если вас попросят заплатить за него, вы выбрали не тот пакет.
После установки Python можно запустить, найдя его в меню «Пуск». Кроме того, он будет доступен из любой сессии командной строки или PowerShell, набрав python. Кроме того, pip и IDLE можно использовать, набрав pip или idle. IDLE также можно найти в меню «Пуск».
Все три команды также доступны с суффиксами версии, например, как python3.exe и python3.x.exe, а также python.exe (где 3.x — конкретная версия, которую вы хотите запустить, например, 3.10). Откройте «Управление псевдонимами запуска приложений» через «Пуск», чтобы выбрать, какая версия 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.org для получения самой актуальной информации об использовании nuget. Далее приведён краткий обзор, достаточный для разработчиков Python.
Инструмент командной строки nuget.exe может быть загружен напрямую с https://aka.ms/nugetclidl, например, с помощью curl или PowerShell. С помощью инструмента устанавливается последняя версия Python для 64-разрядных или 32-разрядных машин, используя:
nuget.exe install python -ExcludeVersion -OutputDirectory . nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .
Для выбора конкретной версии добавьте -Version 3.x.y. Каталог вывода может быть изменён с ., и пакет будет установлен в подкаталог. По умолчанию подкаталог имеет то же имя, что и пакет, и без опции -ExcludeVersion это имя будет включать установленную версию. Внутри подкаталога находится каталог tools, содержащий установку Python:
# Without -ExcludeVersion > .\python.3.5.2\tools\python.exe -V Python 3.5.2 # With -ExcludeVersion > .\python\tools\python.exe -V Python 3.5.2
В целом, пакеты nuget не обновляются, и новые версии следует устанавливать рядом и ссылаться на них с помощью полного пути. В качестве альтернативы, можно вручную удалить каталог пакета и установить его заново. Многие системы непрерывной интеграции (CI) будут делать это автоматически, если они не сохраняют файлы между сборками.
Рядом с каталогом tools находится каталог build\native. Он содержит файл свойств MSBuild python.props, который можно использовать в проекте C++ для ссылки на установку Python. Включение настроек автоматически использует заголовки и импортирует библиотеки в вашей сборке.
Страницы информации о пакетах на nuget.org находятся по адресам www.nuget.org/packages/python для 64-разрядной версии и www.nuget.org/packages/pythonx86 для 32-разрядной версии.
4.4. Встраиваемый пакет
Новый в версии 3.5.
Встраиваемое распределение — это ZIP-архив, содержащий минимальную Python-среду. Оно предназначено для использования в качестве части другого приложения, а не для прямого доступа конечными пользователями.
При извлечении встраиваемое распределение почти полностью изолировано от системы пользователя, включая переменные среды, системные настройки реестра и установленные пакеты. Стандартная библиотека включена в виде предварительно скомпилированных и оптимизированных .pyc файлов в ZIP-архиве, и python3.dll, python37.dll, python.exe и pythonw.exe также предоставляются. Tcl/tk (включая все зависимые модули, такие как Idle), pip и документация Python не включены.
Примечание
Встраиваемое распределение не включает Microsoft C Runtime, и ответственность за предоставление этой библиотеки лежит на установщике приложения. Этот компонент может быть уже установлен в системе пользователя или автоматически через Windows Update, и его можно обнаружить, найдя ucrtbase.dll в системном каталоге.
Пакеты сторонних разработчиков должны быть установлены установщиком приложения вместе с встраиваемым распределением. Использование pip для управления зависимостями, как для обычной установки Python, не поддерживается с этим распределением, хотя с некоторыми предосторожностями возможно включить и использовать pip для автоматических обновлений. В целом, пакеты сторонних разработчиков следует рассматривать как часть приложения («vendor»), чтобы разработчик мог гарантировать совместимость с новыми версиями перед предоставлением обновлений пользователям.
Два рекомендуемых варианта использования этого распределения описаны ниже.
4.4.1. Приложение Python
Приложение, написанное на Python, не обязательно должно быть очевидным для пользователей. Встраиваемое распределение можно использовать в этом случае для включения частной версии Python в пакет установки. В зависимости от того, насколько прозрачным должно быть это приложение (или, наоборот, насколько профессиональным оно должно выглядеть), есть два варианта.
Использование специализированного исполняемого файла в качестве загрузчика требует кодирования, но обеспечивает наиболее прозрачный опыт для пользователей. С помощью настраиваемого загрузчика нет явных признаков того, что программа работает на Python: можно настроить значки, указать информацию о компании и версии, и правильно работать с ассоциациями файлов. В большинстве случаев настраиваемый загрузчик должен просто вызывать Py_Main с жёстко заданной командной строкой.
Более простой подход — предоставить пакетный файл или созданный ярлык, который напрямую вызывает python.exe или pythonw.exe с необходимыми аргументами командной строки. В этом случае приложение будет выглядеть как Python, а не своим фактическим именем, и пользователи могут испытывать трудности с отличием его от других запущенных процессов Python или ассоциаций файлов.
В последнем случае пакеты следует устанавливать как каталоги рядом с исполняемым файлом Python, чтобы обеспечить их доступность в пути. С помощью специализированного загрузчика пакеты могут располагаться в других местах, поскольку есть возможность указать путь поиска перед запуском приложения.
4.4.2. Встраивание Python
Приложения, написанные на родном коде, часто требуют некоторого вида языка сценариев, и встраиваемое распределение Python может быть использовано для этой цели. В целом, основная часть приложения написана на родном коде, и какая-то его часть либо вызывает python.exe, либо напрямую использует python3.dll. В обоих случаях, извлечение встраиваемого распределения в подкаталог установки приложения достаточно для предоставления загружаемого интерпретатора Python.
Как и в случае с приложением, пакеты могут быть установлены в любое место, поскольку есть возможность указать пути поиска перед инициализацией интерпретатора. В противном случае, нет фундаментальных различий между использованием встраиваемого распределения и обычной установкой.
4.5. Альтернативные пакеты
Помимо стандартного дистрибутива CPython, существуют модифицированные пакеты, включающие дополнительную функциональность. Ниже представлен список популярных версий и их ключевых особенностей:
- ActivePython
-
Установщик с кроссплатформенной совместимостью, документацией, PyWin32
- Anaconda
-
Популярные научные модули (такие как numpy, scipy и pandas) и менеджер пакетов
conda. - Enthought Deployment Manager
-
«Следующее поколение среды Python и менеджера пакетов».
Ранее Enthought предоставлял Canopy, но он прекратил свою работу в 2016 году.
- WinPython
-
Дистрибутив, специфичный для Windows, с предварительно скомпилированными научными пакетами и инструментами для создания пакетов.
Обратите внимание, что эти пакеты могут не включать последние версии Python или других библиотек и не поддерживаются основной командой разработчиков Python.
4.6. Настройка Python
Для удобного запуска Python из командной строки вы можете изменить некоторые переменные среды в Windows. Хотя установщик предоставляет возможность настроить переменные PATH и PATHEXT за вас, это надежно только для одной системы. Если вы регулярно используете несколько версий Python, рассмотрите использование Загрузчика Python для Windows.
4.6.1. Добавление переменных среды
Windows позволяет настраивать переменные среды постоянно на уровне пользователя и системы, или временно в командной строке.
Для временного изменения переменных среды откройте командную строку и используйте команду set:
C:\>set PATH=C:\Program Files\Python 3.9;%PATH% C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib C:\>python
Эти изменения будут применяться к последующим командам, выполняемым в этой консоли, и будут унаследованы любыми приложениями, запущенными из этой консоли.
Включение имени переменной в проценты расширит её текущее значение, что позволит добавить новое значение в начало или конец. Изменение PATH путём добавления каталога, содержащего python.exe, в начало, — распространённый способ гарантировать запуск правильной версии Python.
Для постоянного изменения переменных среды, щелкните «Пуск», найдите «изменение переменных среды» или откройте свойства системы, Дополнительные параметры системы и нажмите кнопку Переменные среды. В этом диалоговом окне вы можете добавлять и изменять переменные пользователя и системы. Для изменения системных переменных необходимы права администратора.
Примечание
Windows объединяет переменные пользователя после переменных системы, что может привести к неожиданным результатам при изменении PATH.
Переменная PYTHONPATH используется всеми версиями Python, поэтому вы не должны настраивать её постоянно, если указанные пути включают только код, совместимый со всеми установленными версиями Python.
См. также
- https://docs.microsoft.com/en-us/windows/win32/procthread/environment-variables
-
Обзор переменных среды в Windows
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1
-
Команда
setдля временного изменения переменных среды - https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx
-
Команда
setxдля постоянного изменения переменных среды
4.6.2. Поиск исполняемого файла Python
Изменено в версии 3.5.
Помимо использования автоматически созданной записи в меню Пуск для интерпретатора Python, вы можете запустить Python в командной строке. Установщик предоставляет возможность настроить это за вас.
На первой странице установщика может быть выбран параметр «Добавить Python в PATH», чтобы установщик добавил местоположение установки в PATH. Также добавляется местоположение папки Scripts\. Это позволяет набирать python для запуска интерпретатора и pip для менеджера пакетов. Таким образом, вы также можете выполнять ваши скрипты с параметрами командной строки, см. документацию Командная строка.
Если вы не включили этот параметр при установке, вы всегда можете запустить установщик, выбрать «Изменить» и включить его. Или вручную изменить PATH, следуя инструкциям в Добавление переменных среды. Вам нужно установить переменную среды PATH, включая каталог вашей установки Python, разделённый точкой с запятой от других записей. Пример переменной (предполагая, что первые две записи уже существовали):
C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9
4.7. Режим UTF-8
Новое в версии 3.7.
Windows всё ещё использует устаревшие кодировки для системной кодировки (ANSI-кодовая страница). Python использует её для по умолчанию для кодировки текстовых файлов (например, locale.getpreferredencoding()).
Это может вызвать проблемы, так как UTF-8 широко используется в Интернете и на большинстве Unix-систем, включая WSL (Windows Subsystem for Linux).
Вы можете использовать Режим Python UTF-8, чтобы изменить кодировку текстовых файлов по умолчанию на UTF-8. Вы можете включить Режим Python UTF-8 через опцию командной строки -X utf8 или переменную окружения PYTHONUTF8=1. См. PYTHONUTF8 для включения режима UTF-8 и Добавление переменных среды для изменения переменных среды.
При включённом Режиме Python UTF-8 вы всё ещё можете использовать системную кодировку (ANSI-кодовая страница) через «mbcs»-кодек.
Обратите внимание, что добавление PYTHONUTF8=1 в переменные среды по умолчанию повлияет на все приложения Python 3.7+ на вашей системе. Если у вас есть приложения Python 3.7+, которые зависят от устаревшей системной кодировки, рекомендуется устанавливать переменную среды временно или использовать опцию командной строки -X utf8.
Примечание
Даже при отключенном режиме UTF-8, Python по умолчанию использует UTF-8 в Windows для:
- Ввода/вывода в консоли, включая стандартный ввод/вывод (см. PEP 528 для подробностей).
- Кодировка файловой системы (см. 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), вы заметите, что запустилась версия 3.10. Чтобы запустить Python 3.7, попробуйте команду:
py -3.7
Если вы хотите запустить последнюю установленную версию Python 2, попробуйте команду:
py -2
Вы должны увидеть запуск последней версии Python 3.x.
Если вы видите следующую ошибку, загрузчик не установлен:
'py' is not recognized as an internal or external command, operable program or batch file.
Установки Python для текущего пользователя не добавляют загрузчик в PATH, если этот параметр не был выбран при установке.
Команда:
py --list
отображает установленные версии Python.
4.8.1.2. Виртуальные среды
Новое в версии 3.5.
Если загрузчик запускается без явного указания версии Python и активна виртуальная среда (созданная с помощью стандартного модуля venv или стороннего инструмента virtualenv), загрузчик запустит интерпретатор виртуальной среды, а не глобальный. Чтобы запустить глобальный интерпретатор, либо деактивируйте виртуальную среду, либо явно укажите глобальную версию Python.
4.8.1.3. Из скрипта
Создадим тестовый Python-скрипт — создайте файл с именем hello.py со следующим содержимым
#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))
Из каталога, в котором находится hello.py, выполните команду:
py hello.py
Вы должны увидеть версию последней установленной версии Python 2.x. Теперь попробуйте изменить первую строку на:
#! python3
Повторное выполнение команды должно отобразить информацию о последней версии Python 3.x. Как и в приведённых выше примерах с командной строкой, вы можете указать более конкретную версию. Предполагая, что у вас установлена версия Python 3.7, попробуйте изменить первую строку на #! python3.7, и вы должны увидеть информацию о версии 3.7.
Обратите внимание, что в отличие от интерактивного использования, простой «python» будет использовать последнюю версию Python 2.x, установленную у вас. Это делается для обеспечения обратной совместимости и совместимости с Unix, где команда python обычно ссылается на Python 2.
4.8.1.4. Из ассоциаций файлов
При установке загрузчик должен был быть связан с файлами Python (т.е. .py, .pyw, .pyc файлы). Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использован загрузчик, а значит, вы можете использовать те же возможности, что и выше, чтобы скрипт указал используемую версию.
Ключевое преимущество заключается в том, что один загрузчик может одновременно поддерживать несколько версий Python в зависимости от содержимого первой строки.
4.8.2. Строки shebang
Если первая строка файла скрипта начинается с #!, она называется строкой shebang. Linux и другие операционные системы семейства Unix имеют встроенную поддержку таких строк, и они часто используются на таких системах для указания способа выполнения скрипта. Этот загрузчик позволяет использовать те же возможности со скриптами Python на Windows, и вышеприведённые примеры демонстрируют их применение.
Для обеспечения переносимости строк shebang в скриптах Python между Unix и Windows этот загрузчик поддерживает ряд «виртуальных» команд для указания интерпретатора, который следует использовать.
/usr/bin/env python/usr/bin/python/usr/local/bin/pythonpython
Например, если первая строка вашего скрипта начинается с
#! /usr/bin/python
Будет найден и использован стандартный Python. Поскольку многие скрипты Python, написанные для работы в Unix, уже содержат эту строку, вы должны обнаружить, что эти скрипты могут быть использованы загрузчиком без модификаций. Если вы пишете новый скрипт для Windows, который, по вашему мнению, будет полезен в Unix, вы должны использовать одну из строк shebang, начинающихся с /usr.
Любая из вышеперечисленных виртуальных команд может быть дополнена явной версией (только основной версии или основной и дополнительной версии). Кроме того, 32-битная версия может быть запрошена добавлением «-32» после дополнительной версии. То есть /usr/bin/python3.7-32 запросит использование 32-битного Python 3.7.
Новое в версии 3.7: Начиная с загрузчика python 3.7, можно запросить 64-битную версию с помощью суффикса «-64». Кроме того, можно указать основную версию и архитектуру без дополнительной (т.е. /usr/bin/python3-64).
Форма строки shebang /usr/bin/env имеет одно дополнительное специальное свойство. Перед поиском установленных интерпретаторов Python эта форма будет искать исполняемый файл PATH для исполняемого файла Python. Это соответствует поведению программы Unix env, которая выполняет поиск PATH.
4.8.3. Аргументы в строках shebang
Строки shebang также могут указывать дополнительные параметры, которые будут переданы интерпретатору Python. Например, если у вас есть строка shebang:
#! /usr/bin/python -v
Тогда Python будет запущен с параметром -v.
4.8.4. Настройка
4.8.4.1. Настройка через файлы INI
Загрузчик будет искать два файла .ini — py.ini в каталоге данных приложения текущего пользователя (т.е. в каталоге, возвращаемом функцией Windows SHGetFolderPath с параметром CSIDL_LOCAL_APPDATA) и py.ini в том же каталоге, что и загрузчик. Те же файлы .ini используются как для версии загрузчика в консоли (т.е. py.exe), так и для версии в окнах (т.е. pyw.exe).
Настройки, заданные в каталоге «приложения», имеют приоритет над настройками в файле рядом с исполняемым файлом, поэтому пользователь, у которого нет прав записи в файл .ini рядом с загрузчиком, может переопределить команды в этом глобальном файле .ini.
4.8.4.2. Настройка по умолчанию версий Python
В некоторых случаях в команде можно указать квалификатор версии, определяющий, какая версия Python будет использоваться командой. Квалификатор версии начинается с номера основной версии и необязательно может быть дополнен точкой ('.') и спецификатором версии. Кроме того, можно указать, требуется ли 32-разрядная или 64-разрядная реализация, добавив «-32» или «-64».
Например, строка shebang #!python не содержит квалификатора версии, в то время как #!python3 содержит квалификатор версии, который указывает только основную версию.
Если в команде нет квалификаторов версии, можно установить переменную среды PY_PYTHON для указания квалификатора версии по умолчанию. Если она не установлена, значение по умолчанию — «3». Переменная может принимать любое значение, которое может быть передано в командной строке, например, «3», «3.7», «3.7-32» или «3.7-64». (Обратите внимание, что опция «-64» доступна только с загрузчиком, включенным в Python 3.7 или более поздней версии.)
Если не указаны квалификаторы вспомогательной версии, можно установить переменную среды PY_PYTHON{major} (где {major} — текущий квалификатор основной версии, определенный выше), чтобы указать полную версию. Если такой опции нет, загрузчик перечислит установленные версии Python и воспользуется последней выпущенной вспомогательной версией для основной версии, которая, скорее всего, хотя и не гарантировано, является последней установленной версией в этой семействе.
В 64-разрядной операционной системе Windows с установленными 32- и 64-разрядными реализациями той же (основной.вспомогательной) версии Python 64-разрядная версия всегда будет предпочтительнее. Это будет справедливо как для 32-, так и для 64-разрядных реализаций загрузчика — 32-разрядный загрузчик отдаст предпочтение 64-разрядной установке Python указанной версии, если она доступна. Это позволяет предсказывать поведение загрузчика, зная только установленные на компьютере версии и не учитывая порядок их установки (т.е. не зная, была ли установлена последней 32- или 64-разрядная версия Python и соответствующего загрузчика). Как отмечалось выше, к спецификатору версии можно добавить необязательный суффикс «-32» или «-64», чтобы изменить это поведение.
Примеры:
- Если не установлены соответствующие опции, команды
pythonиpython2будут использовать последнюю установленную версию Python 2.x, а командаpython3— последнюю установленную версию Python 3.x. - Команда
python3.7вообще не будет использовать какие-либо опции, поскольку версии полностью указаны. - Если
PY_PYTHON=3, командыpythonиpython3будут использовать последнюю установленную версию Python 3. - Если
PY_PYTHON=3.7-32, командаpythonбудет использовать 32-разрядную реализацию 3.7, а командаpython3— последнюю установленную версию Python (PY_PYTHON вообще не учитывалась, поскольку была указана основная версия). - Если
PY_PYTHON=3иPY_PYTHON3=3.7, командыpythonиpython3будут использовать именно версию 3.7.
Помимо переменных среды, те же настройки можно настроить в файле .INI, используемом загрузчиком. Раздел в файле INI называется [defaults], а имя ключа будет таким же, как у переменных среды, без префикса PY_ (обратите внимание, что имена ключей в файле INI нечувствительны к регистру). Содержимое переменной среды будет переопределять настройки, указанные в файле INI.
Например:
- Установка
PY_PYTHON=3.7эквивалентна следующему содержимому файла INI:
[defaults] python=3.7
- Установка
PY_PYTHON=3иPY_PYTHON3=3.7эквивалентна следующему содержимому файла INI:
[defaults] python=3 python3=3.7
4.8.5. Диагностика
Если установлена переменная среды PYLAUNCH_DEBUG (любое значение), загрузчик выведет диагностическую информацию в stderr (т.е. в консоль). Эта информация одновременно подробна и лаконична, что позволит увидеть, какие версии Python были найдены, почему была выбрана конкретная версия и точную командную строку, используемую для запуска целевого Python.
4.9. Поиск модулей
Python обычно хранит свою библиотеку (и, следовательно, папку site-packages) в каталоге установки. Таким образом, если вы установили Python в C:\Python\, то стандартная библиотека будет находиться в C:\Python\Lib\, а модули сторонних разработчиков — в C:\Python\Lib\site-packages\.
Для полной перезаписи sys.path, создайте файл с тем же именем, что и 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» не определяется, поэтому используется основной путь из реестра. Другие «пути приложений» в реестре всегда считываются.
- Если 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.
- Добавлена поддержка файлов
._pthи удален параметрapplocalизpyvenv.cfg. - Добавлен
pythonXX.zipкак потенциальный маркер, когда он непосредственно примыкает к исполняемому файлу.
Модули, указанные в реестре в Modules (а не PythonPath), могут импортироваться importlib.machinery.WindowsRegistryFinder. Этот поиск включен в Windows в 3.6.0 и более ранних версиях, но в будущем может потребоваться явно добавить его в sys.meta_path.
4.10. Дополнительные модули
Несмотря на то, что Python стремится к переносимости между всеми платформами, существуют функции, уникальные для Windows. Существуют несколько модулей, как стандартных, так и сторонних, а также фрагменты кода для использования этих функций.
Документация по специфичным для Windows стандартным модулям приведена в Услуги, специфичные для MS Windows.
4.10.1. PyWin32
Модуль PyWin32, созданный Марком Хаммондом, представляет собой набор модулей для расширенной поддержки, специфичной для Windows. Это включает в себя утилиты для:
- Компонента COM
- Вызовов Win32 API
- Реестра
- Журнала событий
- Интерфейсов пользователя Microsoft Foundation Classes
PythonWin — это пример приложения MFC, поставляемый с PyWin32. Это интегрируемая среда разработки с встроенным отладчиком.
См. также
- Win32 How Do I…?
-
by Tim Golden
- Python и COM
-
by David and Paul Boddie
4.10.2. cx_Freeze
cx_Freeze — это расширение модуля distutils (см. Расширение Distutils), которое упаковывает скрипты Python в исполняемые файлы Windows (файлы *.exe). После этого вы можете распространять ваше приложение без необходимости установки Python пользователями.
4.11. Компиляция Python под Windows
Если вы хотите самостоятельно скомпилировать CPython, в первую очередь вам нужно получить исходный код исходный код. Вы можете загрузить исходный код последней версии или просто сделать чек-аут.
Дерево исходного кода содержит решение для сборки и файлы проекта для Microsoft Visual Studio, который используется в качестве компилятора для создания официальных релизов Python. Эти файлы находятся в каталоге PCbuild.
См. PCbuild/readme.txt для общей информации о процессе сборки.
Для модулей расширения обратитесь к Сборке расширений C и C++ под Windows.
4.12. Другие платформы
В ходе развития Python некоторые платформы, которые ранее поддерживались, больше не поддерживаются (из-за отсутствия пользователей или разработчиков). Подробную информацию о всех недоступных платформах см. в PEP 11.
- Windows CE больше не поддерживается начиная с Python 3 (если он когда-либо и поддерживался).
- Инсталлятор Cygwin предлагает также установить интерпретатор Python.
Подробную информацию о платформах с предварительно скомпилированными установщиками см. на странице Python для Windows.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/using/windows.html