Документация Python неофициальный перевод

windows.md

553 строк · 64.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/using/windows.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Использование Python в Windows89Этот документ содержит обзор особенностей поведения Windows, которые следует учитывать при использовании Python в Microsoft Windows.1011## 3.1. Установка Python1213В отличие от большинства систем и служб Unix, Windows не включает в себя официально поддерживаемую установку Python. Чтобы сделать Python доступным, команда CPython на протяжении многих лет компилирует установщики Windows (пакеты MSI) для каждого [релиза](https://python-all.ru/3.5/using/windows.html). Эти установщики в первую очередь предназначены для добавления установки Python для одного пользователя, с основным интерпретатором и библиотекой, используемыми одним пользователем. Установщик также может выполнить установку для всех пользователей одной машины, а отдельный ZIP-файл доступен для локального распространения приложений.1415### 3.1.1. Поддерживаемые версии1617Как указано в [**PEP 11**](https://python-all.ru/3.5/using/windows.html), выпуск Python поддерживает только те платформы Windows, которые Microsoft считает находящимися под расширенной поддержкой. Это означает, что Python 3.5 поддерживает Windows Vista и новее. Если требуется поддержка Windows XP, установите Python 3.4.1819### 3.1.2. Шаги установки2021Четыре установщика Python 3.5 доступны для загрузки – по два для 32-битной и 64-битной версий интерпретатора. *Веб-установщик* – это небольшой начальный загружаемый файл, который автоматически загружает необходимые компоненты по мере необходимости. *Автономный установщик* содержит все компоненты для установки по умолчанию и требует подключения к интернету только для дополнительных функций. См. [Установка без загрузки](https://python-all.ru/3.5/using/windows.html#install-layout-option), где описаны другие способы избежать загрузки во время установки.2223После запуска установщика можно выбрать один из двух вариантов:2425![../_images/win_installer.png](https://python-all.ru/3.5/_images/win_installer.png)2627Если вы выберете «Установить сейчас»:2829- Вам *не* потребуются права администратора (если только не требуется системное обновление библиотеки времени выполнения C или вы не устанавливаете [Запускатель Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher) для всех пользователей).30- Python будет установлен в ваш пользовательский каталог31- [Запускатель Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher) будет установлен в соответствии с опцией в нижней части первой страницы.32- Стандартная библиотека, тестовый набор, средство запуска и pip будут установлены33- Если выбрано, каталог установки будет добавлен в ваши `PATH`34- Ярлыки будут видны только текущему пользователю3536Выбор «Настраиваемая установка» позволит выбрать компоненты для установки, расположение установки и другие параметры или действия после установки. Чтобы установить отладочные символы или двоичные файлы, нужно использовать этот вариант.3738Для установки для всех пользователей следует выбрать «Настраиваемая установка». В этом случае:3940- Может потребоваться предоставить учетные данные администратора или одобрение41- Python будет установлен в каталог Program Files42- [Запускатель Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher) будет установлен в каталог Windows.43- Дополнительные компоненты можно выбрать во время установки44- Стандартная библиотека может быть предварительно скомпилирована в байт-код45- Если выбрано, каталог установки будет добавлен в системные `PATH`46- Ярлыки доступны для всех пользователей4748### 3.1.3. Установка без пользовательского интерфейса4950Все параметры, доступные в графическом интерфейсе установщика, также можно указать из командной строки, что позволяет сценариям установки воспроизводить установку на многих компьютерах без участия пользователя. Эти параметры также можно задать, не отключая интерфейс, чтобы изменить некоторые значения по умолчанию.5152Чтобы полностью скрыть интерфейс установщика и установить Python в тихом режиме, укажите параметр `/quiet`. Чтобы пропустить взаимодействие с пользователем, но при этом отображать ход выполнения и ошибки, укажите параметр `/passive`. Параметр `/uninstall` можно указать для немедленного начала удаления Python – приглашение отображаться не будет.5354Все остальные параметры передаются в виде `name=value`, где значение обычно `0` для отключения функции, `1` для включения функции или путь. Полный список доступных параметров приведён ниже.5556| Имя | Описание | По умолчанию |57| --- | --- | --- |58| InstallAllUsers | Выполняет установку для всех пользователей системы. | 0 |59| TargetDir | Каталог установки | Выбирается на основе InstallAllUsers |60| DefaultAllUsersTargetDir | Каталог установки по умолчанию для установки для всех пользователей | `%ProgramFiles%\Python X.Y` или `%ProgramFiles(x86)%\Python X.Y` |61| DefaultJustForMeTargetDir | Каталог установки по умолчанию для установки только для текущего пользователя | `%LocalAppData%\Programs\PythonXY` или `%LocalAppData%\Programs\PythonXY-32` |62| DefaultCustomTargetDir | Каталог пользовательской установки по умолчанию, отображаемый в интерфейсе | (пусто) |63| AssociateFiles | Создавать ассоциации файлов, если также установлен загрузчик. | 1 |64| CompileAll | Компилировать все файлы `.py` в `.pyc`. | 0 |65| PrependPath | Добавляет каталоги install и Scripts в `PATH` и `.PY` в `PATHEXT` | 0 |66| Ярлыки | Создавать ярлыки для интерпретатора, документации и IDLE, если они установлены. | 1 |67| Include\_doc | Установить руководство Python | 1 |68| Include\_debug | Установить отладочные бинарные файлы | 0 |69| Include\_dev | Установить заголовочные файлы и библиотеки для разработки | 1 |70| Include\_exe | Установить `python.exe` и связанные файлы | 1 |71| Include\_launcher | Установить [средство запуска Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher). | 1 |72| InstallLauncherAllUsers | Устанавливает [средство запуска Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher) для всех пользователей. | 1 |73| Include\_lib | Установить стандартную библиотеку и модули расширения | 1 |74| Include\_pip | Установить встроенные pip и setuptools | 1 |75| Include\_symbols | Установить символы отладки (*\**.pdb) | 0 |76| Include\_tcltk | Установить поддержку Tcl/Tk и IDLE | 1 |77| Include\_test | Установить набор тестов стандартной библиотеки | 1 |78| Include\_tools | Установить служебные скрипты | 1 |79| LauncherOnly | Устанавливает только лаунчер. Это переопределит большинство других параметров. | 0 |80| SimpleInstall | Отключить большую часть интерфейса установки | 0 |81| SimpleInstallDescription | Пользовательское сообщение, которое отображается при использовании упрощённого интерфейса установки. | (пусто) |8283Например, для автоматической установки Python по умолчанию в общесистемном режиме можно использовать следующую команду (из командной строки с правами администратора):8485```text86python-3.5.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=087```8889Чтобы пользователи могли легко установить личную копию Python без набора тестов, можно предоставить ярлык со следующей командой. Она отобразит упрощённую начальную страницу и запретит настройку:9091```text92python-3.5.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=093    SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."94```9596(Обратите внимание: отказ от лаунчера также отключает ассоциации файлов, и это рекомендуется только для установок для одного пользователя при наличии общесистемной установки, включающей лаунчер.)9798Перечисленные выше параметры также можно задать в файле `unattend.xml`, расположенном рядом с исполняемым файлом. Этот файл содержит список параметров и значений. Если значение задано как атрибут, оно будет преобразовано в число, если это возможно. Значения, заданные как текст элемента, всегда остаются строками. Этот пример файла задаёт те же параметры, что и предыдущий пример:99100```text101<Options>102    <Option Name="InstallAllUsers" Value="no" />103    <Option Name="Include_launcher" Value="0" />104    <Option Name="Include_test" Value="no" />105    <Option Name="SimpleInstall" Value="yes" />106    <Option Name="SimpleInstallDescription">Just for me, no test suite</Option>107</Options>108```109110### 3.1.4. Установка без загрузки111112Поскольку некоторые возможности Python не входят в начальный загружаемый установщик, для выбора этих возможностей может потребоваться подключение к интернету. Чтобы избежать этого, все возможные компоненты можно загрузить по требованию, создав полную *сборку*, которая больше не будет требовать подключения к интернету независимо от выбранных возможностей. Обратите внимание, что такая загрузка может быть больше необходимой, но при большом количестве установок очень полезно иметь локально кэшированную копию.113114Выполните следующую команду в командной строке, чтобы загрузить все возможные необходимые файлы. Не забудьте заменить `python-3.5.0.exe` на фактическое имя вашего установщика и создавать сборки в отдельных каталогах, чтобы избежать конфликтов между файлами с одинаковыми именами.115116```text117python-3.5.0.exe /layout [optional target directory]118```119120Также можно указать параметр `/quiet`, чтобы скрыть индикатор выполнения.121122### 3.1.5. Изменение установки123124После установки Python можно добавлять или удалять компоненты через средство «Программы и компоненты», входящее в состав Windows. Выберите запись Python и выберите «Удаление/Изменение», чтобы открыть установщик в режиме обслуживания.125126«Изменить» позволяет добавлять или удалять компоненты, изменяя флажки – неизменённые флажки ничего не устанавливают и не удаляют. Некоторые параметры нельзя изменить в этом режиме, например, каталог установки; чтобы изменить их, потребуется полностью удалить и затем переустановить Python.127128«Восстановить» проверяет все файлы, которые должны быть установлены в соответствии с текущими настройками, и заменяет те, которые были удалены или изменены.129130«Удаление» полностью удалит Python, за исключением [средства запуска Python для Windows](https://python-all.ru/3.5/using/windows.html#launcher), которое имеет собственную запись в разделе «Программы и компоненты».131132### 3.1.6. Другие платформы133134В процессе развития Python некоторые платформы, которые ранее поддерживались, больше не поддерживаются (из-за отсутствия пользователей или разработчиков). Обратитесь к [**PEP 11**](https://python-all.ru/3.5/using/windows.html) для получения подробной информации о всех неподдерживаемых платформах.135136- [Windows CE](https://python-all.ru/3.5/using/windows.html) всё ещё поддерживается.137- Установщик [Cygwin](https://python-all.ru/3.5/using/windows.html) также предлагает установить интерпретатор Python (см. [исходные коды пакетов Cygwin](ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus/release/python), [релизы мейнтейнера](https://python-all.ru/3.5/using/windows.html))138139См. [Python для Windows](https://python-all.ru/3.5/using/windows.html) для получения подробной информации о платформах с предварительно собранными установщиками.140141> **См. также**142>143> **[Python на XP](https://python-all.ru/3.5/using/windows.html)**144>145> «7 минут до "Hello World!"» автор: Ричард Дулинг, 2006146>147> **[Установка в Windows](https://python-all.ru/3.5/using/windows.html)**148>149> в «150>151> [Dive into Python: Python from novice to pro](https://python-all.ru/3.5/using/windows.html)152>153> » Марк Пилигрим, 2004, ISBN 1-59059-356-1154>155> **[Для пользователей Windows](https://python-all.ru/3.5/using/windows.html)**156>157> в «Installing Python» в «158>159> [A Byte of Python](https://python-all.ru/3.5/using/windows.html)160>161> » Сваруп C H, 2003162163## 3.2. Альтернативные пакеты164165Помимо стандартного дистрибутива CPython, существуют модифицированные пакеты, включающие дополнительную функциональность. Ниже приведён список популярных версий и их ключевые особенности:166167**[ActivePython](https://python-all.ru/3.5/using/windows.html)**168169Установщик с поддержкой нескольких платформ, документация, PyWin32170171**[Anaconda](https://python-all.ru/3.5/using/windows.html)**172173Популярные научные модули (такие как numpy, scipy и pandas) и менеджер пакетов174175`conda`176177.178179**[Canopy](https://python-all.ru/3.5/using/windows.html)**180181«Комплексная среда анализа Python» с редакторами и другими средствами разработки.182183**[WinPython](https://python-all.ru/3.5/using/windows.html)**184185Дистрибутив для Windows с предварительно собранными научными пакетами и инструментами для сборки пакетов.186187Обратите внимание, что эти пакеты могут не включать последние версии Python или других библиотек и не поддерживаются командой ядра Python.188189## 3.3. Настройка Python190191Для удобного запуска Python из командной строки можно рассмотреть изменение некоторых переменных окружения по умолчанию в Windows. Хотя установщик предоставляет возможность настроить переменные PATH и PATHEXT, это надёжно только для одной общесистемной установки. Если вы регулярно используете несколько версий Python, рассмотрите возможность использования [Python Launcher for Windows](https://python-all.ru/3.5/using/windows.html#launcher).192193### 3.3.1. Отступление: настройка переменных окружения194195Windows позволяет настраивать переменные окружения постоянно как на уровне пользователя, так и на уровне системы, или временно в командной строке.196197Чтобы временно задать переменные окружения, откройте командную строку и используйте команду **set**:198199```text200C:\>set PATH=C:\Program Files\Python 3.5;%PATH%201C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib202C:\>python203```204205Эти изменения будут применяться ко всем дальнейшим командам, выполняемым в этой консоли, и будут наследоваться любыми приложениями, запущенными из консоли.206207Заключение имени переменной в знаки процента приведёт к подстановке существующего значения, что позволяет добавить новое значение как в начало, так и в конец. Изменение `PATH` путём добавления каталога, содержащего **python.exe**, в начало является распространённым способом обеспечить запуск нужной версии Python.208209Чтобы постоянно изменить переменные окружения по умолчанию, нажмите Пуск и найдите «изменение переменных среды» или откройте свойства системы, Дополнительные параметры системы и нажмите кнопку Переменные среды. В этом диалоге вы можете добавить или изменить переменные пользователя и системы. Для изменения системных переменных требуется неограниченный доступ к компьютеру (то есть права администратора).210211> **Примечание**212>213> Windows объединяет пользовательские переменные *после* системных, что может привести к неожиданным результатам при изменении `PATH`.214>215> Переменная [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH) используется всеми версиями Python 2 и Python 3, поэтому не следует настраивать эту переменную постоянно, если только она не содержит код, совместимый со всеми установленными версиями Python.216217> **См. также**218>219> **[https://support.microsoft.com/kb/100843](https://python-all.ru/3.5/using/windows.html)**220>221> Переменные среды в Windows NT222>223> **[https://technet.microsoft.com/en-us/library/cc754250.aspx](https://python-all.ru/3.5/using/windows.html)**224>225> Команда SET для временного изменения переменных среды226>227> **[https://technet.microsoft.com/en-us/library/cc755104.aspx](https://python-all.ru/3.5/using/windows.html)**228>229> Команда SETX для постоянного изменения переменных среды230>231> **[https://support.microsoft.com/kb/310519](https://python-all.ru/3.5/using/windows.html)**232>233> Как управлять переменными среды в Windows XP234>235> **[https://www.chem.gla.ac.uk/~louis/software/faq/q1.html](https://python-all.ru/3.5/using/windows.html)**236>237> Настройка переменных среды, Луи Дж. Фарруджа238239### 3.3.2. Поиск исполняемого файла Python240241Изменено в версии 3.5.242243Помимо использования автоматически созданного пункта меню «Пуск» для интерпретатора Python, может потребоваться запускать Python из командной строки. Установщик Python 3.5 и более поздних версий имеет опцию, позволяющую настроить это.244245На первой странице установщика можно выбрать опцию «Add Python 3.5 to PATH», чтобы установщик добавил путь к месту установки в переменную `PATH`. Также добавляется расположение папки `Scripts\`. Это позволяет вводить **python** для запуска интерпретатора и **pip** для установщика пакетов. Таким образом, можно также выполнять свои скрипты с параметрами командной строки – см. документацию [Командная строка](https://python-all.ru/3.5/using/cmdline.html#using-on-cmdline).246247Если вы не включили эту опцию при установке, вы всегда можете повторно запустить установщик, выбрать «Modify» и включить её. Или же вы можете вручную изменить переменные `PATH`, следуя инструкциям в разделе [Excursus: Setting environment variables](https://python-all.ru/3.5/using/windows.html#setting-envvars). Вам нужно добавить каталог вашей установки Python в переменную среды `PATH`, разделив его точкой с запятой от других записей. Пример переменной может выглядеть так (предполагая, что первые две записи уже существовали):248249```text250C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.5251```252253## 3.4. Средство запуска Python для Windows254255Новое в версии 3.3.256257Загрузчик Python для Windows – это утилита, помогающая находить и запускать различные версии Python. Она позволяет сценариям (или командной строке) указать предпочтительную версию Python, и загрузчик найдет и запустит эту версию.258259В отличие от переменной `PATH`, загрузчик правильно выбирает наиболее подходящую версию Python. Он отдает предпочтение установкам для конкретного пользователя перед общесистемными и сортирует по версии языка, а не по дате установки.260261### 3.4.1. Начало работы262263#### 3.4.1.1. Из командной строки264265При общесистемной установке Python 3.3 и новее загрузчик помещается в `PATH`. Загрузчик совместим со всеми доступными версиями Python, поэтому неважно, какая из них установлена. Чтобы проверить доступность загрузчика, выполните следующую команду в командной строке:266267```text268py269```270271Должна запуститься последняя установленная версия Python 2.x – её можно завершить обычным способом, а все дополнительные аргументы командной строки будут переданы напрямую Python.272273Если установлено несколько версий Python 2.x (например, 2.6 и 2.7), вы заметите, что запустилась Python 2.7. Чтобы запустить Python 2.6, попробуйте команду:274275```text276py -2.6277```278279Если установлен Python 3.x, попробуйте команду:280281```text282py -3283```284285Должна запуститься последняя версия Python 3.x.286287Если вы видите следующую ошибку, значит, загрузчик не установлен:288289```text290'py' is not recognized as an internal or external command,291operable program or batch file.292```293294Установки Python для отдельных пользователей не добавляют средство запуска в `PATH`, если только эта опция не была выбрана при установке.295296#### 3.4.1.2. Виртуальные окружения297298Новое в версии 3.5.299300Если загрузчик запускается без явного указания версии Python и активно виртуальное окружение (созданное с помощью модуля стандартной библиотеки [`venv`](https://python-all.ru/3.5/library/venv.html#module-venv) или внешнего инструмента `virtualenv`), загрузчик запустит интерпретатор виртуального окружения, а не глобальный. Чтобы запустить глобальный интерпретатор, либо деактивируйте виртуальное окружение, либо явно укажите глобальную версию Python.301302#### 3.4.1.3. Из скрипта303304Давайте создадим тестовый сценарий Python – создайте файл с именем `hello.py` со следующим содержимым305306```text307#! python308import sys309sys.stdout.write("hello from Python %s\n" % (sys.version,))310```311312Из каталога, в котором находится hello.py, выполните команду:313314```text315py hello.py316```317318Вы должны заметить, что выводится номер версии вашей последней установки Python 2.x. Теперь попробуйте изменить первую строку на:319320```text321#! python3322```323324Повторный запуск команды теперь должен вывести информацию о последней версии Python 3.x. Как и в приведённых выше примерах командной строки, можно указать более точный определитель версии. Предположим, у вас установлен Python 2.6: попробуйте изменить первую строку на `#! python2.6`, и должны вывестись сведения о версии 2.6.325326#### 3.4.1.4. Из ассоциаций файлов327328Загрузчик должен быть ассоциирован с файлами Python (т.е. файлами `.py`, `.pyw`, `.pyc`) при установке. Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использоваться загрузчик, и поэтому вы можете использовать те же возможности, описанные выше, чтобы указать сценарию версию, которая должна использоваться.329330Ключевое преимущество этого в том, что один загрузчик может одновременно поддерживать несколько версий Python в зависимости от содержимого первой строки.331332### 3.4.2. Shebang-строки333334Если первая строка файла сценария начинается с `#!`, она называется «shebang»-строкой. Linux и другие Unix-подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в этих системах для указания того, как следует выполнять сценарий. Данный загрузчик позволяет использовать те же возможности для сценариев Python в Windows, и примеры выше демонстрируют их применение.335336Чтобы обеспечить переносимость shebang-строк в сценариях Python между Unix и Windows, этот загрузчик поддерживает ряд «виртуальных» команд для указания того, какой интерпретатор использовать. Поддерживаемые виртуальные команды:337338- `/usr/bin/env python`339- `/usr/bin/python`340- `/usr/local/bin/python`341- `python`342343Например, если первая строка вашего сценария начинается с344345```text346#! /usr/bin/python347```348349Будет найдена и использована версия Python по умолчанию. Поскольку многие сценарии Python, написанные для работы в Unix, уже содержат эту строку, такие сценарии могут использоваться программой запуска без изменений. Если вы пишете новый сценарий в Windows, который, как вы надеетесь, будет полезен в Unix, следует использовать одну из строк shebang, начинающуюся с `/usr`.350351К любой из перечисленных выше виртуальных команд можно добавить суффикс с явным указанием версии (только старшей версии или старшей и младшей) – например `/usr/bin/python2.7` – это приведёт к поиску и использованию указанной версии.352353Форма `/usr/bin/env` шебанг-строки обладает одним дополнительным свойством. Прежде чем искать установленные интерпретаторы Python, эта форма выполняет поиск исполняемого файла Python в `PATH`. Это соответствует поведению программы `env` в Unix, которая выполняет поиск `PATH`.354355### 3.4.3. Аргументы в shebang-строках356357Shebang-строки также могут указывать дополнительные параметры, передаваемые интерпретатору Python. Например, если у вас есть shebang-строка:358359```text360#! /usr/bin/python -v361```362363Тогда Python будет запущен с опцией `-v`364365### 3.4.4. Настройка366367#### 3.4.4.1. Настройка через INI-файлы368369Программа запуска будет искать два .ini-файла: `py.ini` – в каталоге «application data» текущего пользователя (т. е. в каталоге, который возвращает функция Windows SHGetFolderPath с параметром CSIDL\_LOCAL\_APPDATA), и `py.ini` – в том же каталоге, где находится программа запуска. Эти .ini-файлы используются как для «консольной» версии программы запуска (py.exe), так и для «оконной» версии (pyw.exe).370371Настройки, заданные в каталоге приложения, имеют приоритет над настройками из каталога с исполняемым файлом. Таким образом, пользователь, у которого может не быть прав на запись .ini-файла рядом с программой запуска, может переопределить команды из того глобального .ini-файла.372373#### 3.4.4.2. Настройка версий Python по умолчанию374375В некоторых случаях в команду можно включить уточнитель версии, чтобы указать, какая версия Python будет использоваться командой. Уточнитель версии начинается с номера старшей версии и может опционально содержать точку («.») и указатель младшей версии. Если указана младшая версия, за ней может опционально следовать «-32» для обозначения 32-разрядной реализации этой версии.376377Например, shebang-строка `#!python` не имеет квалификатора версии, в то время как `#!python3` имеет квалификатор версии, указывающий только старшую версию.378379Если в команде не найдено уточнителей версии, можно задать переменную окружения `PY_PYTHON`, чтобы указать уточнитель версии по умолчанию. Значение по умолчанию – «2». Обратите внимание: это значение может указывать только старшую версию (например, «2») или уточнитель старшая.младшая (например, «2.6»), или даже старшая.младшая-32.380381Если квалификаторы младшей версии не найдены, может быть установлена переменная окружения `PY_PYTHON{major}` (где `{major}` – текущий квалификатор старшей версии, определённый выше) для указания полной версии. Если такая опция не найдена, загрузчик перечислит установленные версии Python и будет использовать последний младший выпуск, найденный для старшей версии, который, вероятно, хотя и не гарантированно, является самой последней установленной версией в этом семействе.382383В 64-разрядной Windows, где установлены и 32-разрядная, и 64-разрядная реализации одной и той же версии Python (major.minor), всегда будет предпочитаться 64-разрядная версия. Это справедливо как для 32-разрядной, так и для 64-разрядной реализации загрузчика – 32-разрядный загрузчик предпочтёт запустить 64-разрядную установку Python указанной версии, если она доступна. Это сделано для того, чтобы поведение загрузчика можно было предсказать, зная только, какие версии установлены на ПК, независимо от порядка их установки (то есть без знания того, какая версия – 32- или 64-разрядная – Python и соответствующего загрузчика была установлена последней). Как уже отмечалось, для изменения этого поведения можно использовать необязательный суффикс «-32» в спецификаторе версии.384385Примеры:386387- Если соответствующие параметры не заданы, команды `python` и `python2` будут использовать последнюю установленную версию Python 2.x, а команда `python3` будет использовать последнюю установленную версию Python 3.x.388- Команды `python3.1` и `python2.7` не будут учитывать никакие параметры, так как версии полностью указаны.389- Если `PY_PYTHON=3`, то команды `python` и `python3` будут обе использовать последнюю установленную версию Python 3.390- Если `PY_PYTHON=3.1-32`, команда `python` будет использовать 32-разрядную реализацию версии 3.1, тогда как команда `python3` будет использовать последнюю установленную версию Python (PY\_PYTHON не учитывался, поскольку была указана старшая версия).391- Если `PY_PYTHON=3` и `PY_PYTHON3=3.1`, команды `python` и `python3` обе будут использовать именно версию 3.1392393В дополнение к переменным окружения те же настройки можно задать в файле .INI, используемом загрузчиком. Раздел в INI-файле называется `[defaults]`, а имя ключа будет таким же, как у переменных окружения без префикса `PY_` (обратите внимание, что имена ключей в INI-файле нечувствительны к регистру). Содержимое переменной окружения будет переопределять настройки, указанные в INI-файле.394395Например:396397- Установка `PY_PYTHON=3.1` эквивалентна следующему содержимому INI-файла:398399```text400[defaults]401python=3.1402```403404- Установка `PY_PYTHON=3` и `PY_PYTHON3=3.1` эквивалентна следующему содержимому INI-файла:405406```text407[defaults]408python=3409python3=3.1410```411412### 3.4.5. Диагностика413414Если установлена переменная окружения `PYLAUNCH_DEBUG` (с любым значением), средство запуска выводит диагностическую информацию в stderr (т.е. на консоль). Эта информация одновременно является многословной *и* краткой, но она позволяет увидеть, какие версии Python были найдены, почему выбрана конкретная версия и точная командная строка, использованная для запуска целевого Python.415416## 3.5. Поиск модулей417418Python обычно хранит свою библиотеку (и соответственно папку site-packages) в каталоге установки. Так, если Python был установлен в `C:\Python\`, библиотека по умолчанию будет находиться в `C:\Python\Lib\`, а сторонние модули должны храниться в `C:\Python\Lib\site-packages\`.419420Вот как формируется [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path) в Windows:421422- В начале добавляется пустая запись, соответствующая текущей директории.423- Если существует переменная окружения [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH), как описано в [Переменные окружения](https://python-all.ru/3.5/using/cmdline.html#using-on-envvars), то её записи добавляются следом. Обратите внимание, что в Windows пути в этой переменной должны разделяться точками с запятой, чтобы отличать их от двоеточия, используемого в идентификаторах дисков (`C:\` и т.д.).424- Дополнительные «пути приложений» можно добавить в реестр как подразделы `\SOFTWARE\Python\PythonCore{version}\PythonPath` как в разделе `HKEY_CURRENT_USER`, так и в `HKEY_LOCAL_MACHINE`. Подразделы, у которых в качестве значения по умолчанию указаны строки путей, разделённые точкой с запятой, приводят к добавлению каждого пути в [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path). (Обратите внимание, что все известные установщики используют только HKLM, поэтому HKCU обычно пуст.)425- Если задана переменная окружения [`PYTHONHOME`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONHOME), она считается «домашним каталогом Python» (Python Home). В противном случае путь к главному исполняемому файлу Python используется для поиска «маркерного файла» (`Lib\os.py`), чтобы определить «Python Home». Если домашний каталог найден, соответствующие подкаталоги, добавляемые в [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path) (`Lib`, `plat-win` и т. д.), определяются относительно этого каталога. В противном случае основной путь Python строится из значения PythonPath, хранящегося в реестре.426- Если домашний каталог Python не найден, в окружении не указана переменная [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH) и не найдены записи реестра, используется путь по умолчанию с относительными записями (например, `.\Lib;.\plat-win` и т.д.).427428Если файл `pyvenv.cfg` найден рядом с основным исполняемым файлом или в директории уровнем выше, применяются следующие варианты:429430- Если `home` – абсолютный путь, а [`PYTHONHOME`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONHOME) не задана, то при определении домашнего каталога используется этот путь вместо пути к основному исполняемому файлу.431- Если `applocal` установлен в true, в качестве домашнего пути всегда используется свойство `home` или главный исполняемый файл, а все переменные окружения или значения реестра, влияющие на путь, игнорируются. Маркерный файл не проверяется.432433Конечный результат всего этого:434435- При запуске `python.exe` или любого другого .exe в основной директории Python (установленной версии или непосредственно из каталога PCbuild) основной путь определяется, а основные пути в реестре игнорируются. Другие «пути приложений» в реестре всегда считываются.436- Когда Python размещается в другом .exe (другая директория, встраивание через COM и т.д.), «домашний каталог Python» не определяется, поэтому используется основной путь из реестра. Другие «пути приложений» в реестре всегда считываются.437- Если Python не может найти свой домашний каталог и в реестре нет значений (замороженный .exe, какая-то очень странная установка), вы получаете путь с некоторыми путями по умолчанию, но относительными.438439Для тех, кто хочет встроить Python в своё приложение или дистрибутив, следующие рекомендации помогут избежать конфликтов с другими установками:440441- Разместите файл `pyvenv.cfg` рядом с вашим исполняемым файлом, содержащий `applocal = true`. Это гарантирует, что для разрешения путей будет использоваться ваш собственный каталог, даже если вы включили стандартную библиотеку в ZIP-файл. Кроме того, будут игнорироваться пользовательские site-packages и другие пути, указанные в реестре.442- Если вы загружаете `python3.dll` или `python35.dll` в свой собственный исполняемый файл, явно вызовите [`Py_SetPath()`](https://python-all.ru/3.5/c-api/init.html#c.Py_SetPath) или (по крайней мере) [`Py_SetProgramName()`](https://python-all.ru/3.5/c-api/init.html#c.Py_SetProgramName) перед [`Py_Initialize()`](https://python-all.ru/3.5/c-api/init.html#c.Py_Initialize).443- Очистите и/или перезапишите [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH) и задайте [`PYTHONHOME`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONHOME) перед запуском `python.exe` из вашего приложения.444- Если вы не можете воспользоваться предыдущими рекомендациями (например, вы создаете дистрибутив, который позволяет запускать `python.exe` напрямую), убедитесь, что маркерный файл (`Lib\os.py`) существует в вашем каталоге установки. (Обратите внимание, что внутри ZIP-файла он не будет обнаружен.)445446Это гарантирует, что файлы из общесистемной установки не будут иметь приоритет над копией стандартной библиотеки, входящей в состав вашего приложения. В противном случае у пользователей могут возникнуть проблемы при работе с вашим приложением. Обратите внимание, что первая рекомендация является наилучшей, поскольку остальные могут быть подвержены влиянию нестандартных путей в реестре и пользовательских site-packages.447448## 3.6. Дополнительные модули449450Хотя Python стремится быть переносимым между всеми платформами, существуют функции, уникальные для Windows. Ряд модулей, как в стандартной библиотеке, так и внешних, а также фрагменты кода позволяют использовать эти возможности.451452Стандартные модули, специфичные для Windows, описаны в [Специфичные службы MS Windows](https://python-all.ru/3.5/library/windows.html#mswin-specific-services).453454### 3.6.1. PyWin32455456Модуль [PyWin32](https://python-all.ru/3.5/using/windows.html) от Марка Хаммонда – это набор модулей для расширенной поддержки Windows. Он включает утилиты для:457458- [Component Object Model](https://python-all.ru/3.5/using/windows.html) (COM)459- Вызовы Win32 API460- Реестр461- Журнал событий462- [Microsoft Foundation Classes](https://python-all.ru/3.5/using/windows.html) (MFC) пользовательские интерфейсы463464[PythonWin](https://python-all.ru/3.5/using/windows.html) – это пример MFC-приложения, поставляемого с PyWin32. Это встраиваемая среда разработки со встроенным отладчиком.465466> **См. также**467>468> **[Win32: Как мне…?](https://python-all.ru/3.5/using/windows.html)**469>470> Тим Голден471>472> **[Python и COM](https://python-all.ru/3.5/using/windows.html)**473>474> Дэвид и Пол Бодди475476### 3.6.2. cx\_Freeze477478[cx\_Freeze](https://python-all.ru/3.5/using/windows.html) – это расширение [`distutils`](https://python-all.ru/3.5/library/distutils.html#module-distutils) (см. [Расширение Distutils](https://python-all.ru/3.5/distutils/extending.html#extending-distutils)), которое упаковывает скрипты Python в исполняемые программы Windows (файлы `*.exe`). Когда это сделано, вы можете распространять своё приложение, не требуя от пользователей установки Python.479480### 3.6.3. WConio481482Поскольку расширенный уровень работы с терминалом Python, [`curses`](https://python-all.ru/3.5/library/curses.html#module-curses), ограничен Unix-подобными системами, существует библиотека, эксклюзивная для Windows: Windows Console I/O for Python.483484[WConio](https://python-all.ru/3.5/using/windows.html) – это обёртка для `CONIO.H` от Turbo-C, используемая для создания текстовых пользовательских интерфейсов.485486## 3.7. Компиляция Python в Windows487488Если вы хотите скомпилировать CPython самостоятельно, первым делом нужно получить [исходный код](https://python-all.ru/3.5/using/windows.html). Можно загрузить исходный код последнего релиза или просто взять свежую [копию из репозитория](https://python-all.ru/3.5/devguide/setup.html#getting-the-source-code).489490Дерево исходного кода содержит файлы решения и проекта для Microsoft Visual Studio 2015 – компилятора, используемого для сборки официальных выпусков Python. Эти файлы находятся в каталоге `PCbuild`.491492Обратитесь к `PCbuild/readme.txt` за общей информацией о процессе сборки.493494Для модулей-расширений обратитесь к [Сборка расширений C и C++ в Windows](https://python-all.ru/3.5/extending/windows.html#building-on-windows).495496> **См. также**497>498> **[Python + Windows + distutils + SWIG + gcc MinGW](https://python-all.ru/3.5/using/windows.html)**499>500> или «Создание расширений Python на C/C++ с помощью SWIG и компиляция с MinGW gcc под Windows» или «Установка расширения Python с помощью distutils и без Microsoft Visual C++» от Sébastien Sauvage, 2003501>502> **[MingW – расширения Python](https://python-all.ru/3.5/using/windows.html)**503>504> Трент Аптед и др., 2007505506## 3.8. Встраиваемый дистрибутив507508Новое в версии 3.5.509510Встраиваемое распространение представляет собой ZIP-файл, содержащий минимальное окружение Python. Оно предназначено для использования в качестве части другого приложения, а не для прямого доступа конечных пользователей.511512При распаковке встраиваемая дистрибуция (почти) полностью изолирована от системы пользователя, включая переменные окружения, настройки системного реестра и установленные пакеты. Стандартная библиотека включена в виде предварительно скомпилированных и оптимизированных файлов `.pyc` в ZIP, а также предоставляются `python3.dll`, `python35.dll`, `python.exe` и `pythonw.exe`. Tcl/tk (включая все зависимые компоненты, такие как Idle), pip и документация Python не включены.513514> **Примечание**515>516> Встроенное распространяемое не включает [Microsoft C Runtime](https://python-all.ru/3.5/using/windows.html), и установщик приложения должен предоставить его. Среда выполнения могла быть уже установлена в системе пользователя ранее или автоматически через Центр обновления Windows; её можно обнаружить, найдя `ucrtbase.dll` в системном каталоге.517518Сторонние пакеты должны устанавливаться установщиком приложения вместе со встраиваемым распространением. Использование pip для управления зависимостями, как в обычной установке Python, не поддерживается в этом распространении, хотя при определенной осторожности может быть возможно включить и использовать pip для автоматических обновлений. В общем случае сторонние пакеты следует рассматривать как часть приложения («вендоринг»), чтобы разработчик мог обеспечить совместимость с новыми версиями перед предоставлением обновлений пользователям.519520Два рекомендуемых варианта использования этого распространения описаны ниже.521522### 3.8.1. Приложение Python523524Приложение, написанное на Python, не обязательно требует, чтобы пользователи знали об этом факте. В этом случае встраиваемое распространение может быть использовано для включения частной версии Python в установочный пакет. В зависимости от того, насколько прозрачным оно должно быть (или, наоборот, насколько профессиональным оно должно выглядеть), есть два варианта.525526Использование специализированного исполняемого файла в качестве загрузчика требует некоторого программирования, но обеспечивает наиболее прозрачный интерфейс для пользователей. При использовании настраиваемого загрузчика нет явных признаков того, что программа работает на Python: значки можно настраивать, можно указать информацию о компании и версии, а ассоциации файлов работают правильно. В большинстве случаев настраиваемый загрузчик должен просто вызывать `Py_Main` с жестко заданной командной строкой.527528Более простой подход – предоставить пакетный файл или созданный ярлык, который напрямую вызывает `python.exe` или `pythonw.exe` с необходимыми аргументами командной строки. В этом случае приложение будет отображаться как Python, а не под своим реальным именем, и у пользователей могут возникнуть трудности с его отличием от других запущенных процессов Python или ассоциаций файлов.529530При втором подходе пакеты должны быть установлены как каталоги рядом с исполняемым файлом Python, чтобы гарантировать их доступность в пути. При использовании специализированного загрузчика пакеты могут располагаться в других местах, так как есть возможность указать путь поиска перед запуском приложения.531532### 3.8.2. Встраивание Python533534Приложения, написанные на нативном коде, часто требуют какую-либо форму языка сценариев, и для этой цели может быть использовано встраиваемое распространение Python. В общем случае большая часть приложения написана на нативном коде, и некоторая часть будет либо вызывать `python.exe`, либо напрямую использовать `python3.dll`. В любом случае, извлечение встраиваемого распространения в подкаталог установки приложения достаточно для обеспечения загружаемого интерпретатора Python.535536Как и при использовании в приложении, пакеты можно устанавливать в любое место, так как есть возможность указать пути поиска перед инициализацией интерпретатора. В остальном нет принципиальных различий между использованием встраиваемого распространения и обычной установкой.537538## 3.9. Прочие ресурсы539540> **См. также**541>542> **[Python Programming On Win32](https://python-all.ru/3.5/using/windows.html)**543>544> «Help for Windows Programmers» Марк Хаммонд и Энди Робинсон, O’Reilly Media, 2000, ISBN 1-56592-621-8545>546> **[A Python for Windows Tutorial](https://python-all.ru/3.5/using/windows.html)**547>548> Аманда Бирмингем, 2004549>550> **[**PEP 397**](https://python-all.ru/3.5/using/windows.html) – загрузчик Python для Windows**551>552> Предложение о включении лаунчера в дистрибутив Python.553