Py launcher что это
Перейти к содержимому

Py launcher что это

В Windows, что такое python launcher 'py', что позволяет контролировать-C между группами процессов?

Итак, в Windows, когда вы нажимаете control-C, чтобы прервать консольную программу, это отправляет CTRL_C_EVENT в процесс. Вы также можете сделать это вручную с помощью GenerateConsoleCtrlEvent . В Python os.kill действует как обертка вокруг уровня C GenerateConsoleCtrlEvent и позволяет нам отправить CTRL_C_EVENT в текущий процесс, выполнив:

Однако, это не просто переход к текущему процессу – он действительно относится ко всей “группе процессов”, в которой этот процесс является частью.

У меня есть набор тестов, который вызывает os.kill , как вы видите выше, как часть некоторых тестов, чтобы убедиться, что обработка управляемых программ C выполняется правильно. Тем не менее, при запуске этого набора тестов на appveyor это создает проблему, потому что, по-видимому, какая-то инфраструктура приложений находится в одной и той же “группе прогресса” и разбивается.

Решение состоит в том, что нам нужно создать набор тестов с установленным флагом CREATE_NEW_PROCESS_GROUP , чтобы его CTRL_C_EVENT не “утечка” родительскому. Это легко сделать. НО…

Если я использую CREATE_NEW_PROCESS_GROUP и запускаю дочерний script с помощью python whatever.py , то он работает так, как ожидалось: CTRL_C_EVENT ограничивается дочерним.

Если я использую CREATE_NEW_PROCESS_GROUP и запускаю дочерний script с помощью py whatever.py (т.е. используя python launcher, который предположительно эквивалентно запуску python напрямую), то CREATE_NEW_PROCESS_GROUP кажется, не имеет никакого эффекта: CTRL_C_EVENT также влияет на родителя!

Здесь минимальная программа-образец, которая просто использует os.kill для себя, а затем проверяет, что она сработала (незначительная морщина: CREATE_NEW_PROCESS_GROUP устанавливает CTRL_C_EVENT для игнорирования в дочерних процессах, поэтому здесь немного пуха, используя SetConsoleCtrlHandler , чтобы игнорировать его):
https://github.com/njsmith/appveyor-ctrl-c-test/blob/master/a.py

Если оболочка script работает python a.py , тогда все работает. Если оболочка script работает py a.py , то оболочка script получает KeyboardInterrupt .

Итак, мой вопрос: что, черт возьми, происходит здесь? Что такое пусковая установка py , отличная от python , которая заставляет CTRL_C_EVENT “просачиваться” в родительский процесс, даже если он находится в другой группе процессов? И как это возможно?

(я изначально обнаружил это, потому что запуск pytest a.py действует как py a.py , т.е. разбит, но python -m pytest a.py работает, по-видимому, потому, что точка входа pytest использует py пусковую установку.)

Каждый процесс находится в группе процессов. Он либо наследует родительскую группу, либо создается как лидер новой группы с помощью флага создания CREATE_NEW_PROCESS_GROUP . Насколько я знаю, GenerateConsoleCtrlEvent – это единственный API, который использует группы процессов, и нет API для запроса идентификатора группы процессов. Вы можете взять его из ProcessParameters в PEB, но это связано с использованием недокументированных внутренних структур. Никто не должен этого делать, поэтому GenerateConsoleCtrlEvent должен отправлять только группе 0 для трансляции события или дочернего процесса, который, как вы знаете, был создан как новая группа.

Что такое python launcher

This PEP describes a Python launcher for the Windows platform. A Python launcher is a single executable which uses a number of heuristics to locate a Python executable and launch it with a specified command line.

Rationale

Windows provides «file associations» so an executable can be associated with an extension, allowing for scripts to be executed directly in some contexts (eg., double-clicking the file in Windows Explorer.) Until now, a strategy of «last installed Python wins» has been used and while not ideal, has generally been workable due to the conservative changes in Python 2.x releases. As Python 3.x scripts are often syntactically incompatible with Python 2.x scripts, a different strategy must be used to allow files with a ‘.py’ extension to use a different executable based on the Python version the script targets. This will be done by borrowing the existing practices of another operating system — scripts will be able to nominate the version of Python they need by way of a «shebang» line, as described below.

Unix-like operating systems (referred to simply as «Unix» in this PEP) allow scripts to be executed as if they were executable images by examining the script for a «shebang» line which specifies the actual executable to be used to run the script. This is described in detail in the evecve(2) man page [1] and while user documentation will be created for this feature, for the purposes of this PEP that man page describes a valid shebang line.

Additionally, these operating systems provide symbolic-links to Python executables in well-known directories. For example, many systems will have a link /usr/bin/python which references a particular version of Python installed under the operating-system. These symbolic links allow Python to be executed without regard for where Python it actually installed on the machine (eg., without requiring the path where Python is actually installed to be referenced in the shebang line or in the PATH.) PEP 394 ‘The «python» command on Unix-Like Systems’ [2] describes additional conventions for more fine-grained specification of a particular Python version.

These 2 facilities combined allow for a portable and somewhat predictable way of both starting Python interactively and for allowing Python scripts to execute. This PEP describes an implementation of a launcher which can offer the same benefits for Python on the Windows platform and therefore allows the launcher to be the executable associated with ‘.py’ files to support multiple Python versions concurrently.

While this PEP offers the ability to use a shebang line which should work on both Windows and Unix, this is not the primary motivation for this PEP — the primary motivation is to allow a specific version to be specified without inventing new syntax or conventions to describe it.

Specification

This PEP specifies features of the launcher; a prototype implementation is provided in [3] which will be distributed together with the Windows installer of Python, but will also be available separately (but released along with the Python installer). New features may be added to the launcher as long as the features prescribed here continue to work.

Installation

The launcher comes in 2 versions — one which is a console program and one which is a «windows» (ie., GUI) program. These 2 launchers correspond to the ‘python.exe’ and ‘pythonw.exe’ executables which currently ship with Python. The console launcher will be named ‘py.exe’ and the Windows one named ‘pyw.exe’. The «windows» (ie., GUI) version of the launcher will attempt to locate and launch pythonw.exe even if a virtual shebang line nominates simply «python» — in fact, the trailing ‘w’ notation is not supported in the virtual shebang line at all.

The launcher is installed into the Windows directory (see discussion below) if installed by a privileged user. The stand-alone installer asks for an alternative location of the installer, and adds that location to the user’s PATH.

The installation in the Windows directory is a 32-bit executable (see discussion); the standalone installer may also offer to install 64-bit versions of the launcher.

The launcher installation is registered in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CurrentVersion\SharedDLLs with a reference counter. It contains a version resource matching the version number of the pythonXY.dll with which it is distributed. Independent installations will overwrite older version of the launcher with newer versions. Stand-alone releases use a release level of 0x10 in FIELD3 of the CPython release on which they are based.

Once installed, the «console» version of the launcher is associated with .py files and the «windows» version associated with .pyw files.

The launcher is not tied to a specific version of Python — eg., a launcher distributed with Python 3.3 should be capable of locating and executing any Python 2.x and Python 3.x version. However, the launcher binaries have a version resource that is the same as the version resource in the Python binaries that they are released with.

Python Script Launching

The launcher is restricted to launching Python scripts. It is not intended as a general-purpose script launcher or shebang processor.

The launcher supports the syntax of shebang lines as described in [1], including all restrictions listed.

The launcher supports shebang lines referring to Python executables with any of the (regex) prefixes «/usr/bin/», «/usr/local/bin» and «/usr/bin/env *», as well as binaries specified without

For example, a shebang line of ‘#! /usr/bin/python’ should work even though there is unlikely to be an executable in the relative Windows directory «\usr\bin». This means that many scripts can use a single shebang line and be likely to work on both Unix and Windows without modification.

The launcher will support fully-qualified paths to executables. While this will make the script inherently non-portable, it is a feature offered by Unix and would be useful for Windows users in some cases.

The launcher will be capable of supporting implementations other than CPython, such as jython and IronPython, but given both the absence of common links on Unix (such as «/usr/bin/jython») and the inability for the launcher to automatically locate the installation location of these implementations on Windows, the launcher will support this via customization options. Scripts taking advantage of this will not be portable (as these customization options must be set to reflect the configuration of the machine on which the launcher is running) but this ability is nonetheless considered worthwhile.

On Unix, the user can control which specific version of Python is used by adjusting the links in /usr/bin to point to the desired version. As the launcher on Windows will not use Windows links, customization options (exposed via both environment variables and INI files) will be used to override the semantics for determining what version of Python will be used. For example, while a shebang line of «/usr/bin/python2» will automatically locate a Python 2.x implementation, an environment variable can override exactly which Python 2.x implementation will be chosen. Similarly for «/usr/bin/python» and «/usr/bin/python3». This is specified in detail later in this PEP.

Shebang line parsing

If the first command-line argument does not start with a dash (‘-‘) character, an attempt will be made to open that argument as a file and parsed for a shebang line according to the rules in [1]:

Once parsed, the command will be categorized according to the following rules:

  • If the command starts with the definition of a customized command followed by a whitespace character (including a newline), the customized command will be used. See below for a description of customized commands.
  • The launcher will define a set of prefixes which are considered Unix compatible commands to launch Python, namely «/usr/bin/python», «/usr/local/bin/python», «/usr/bin/env python», and «python». If a command starts with one of these strings will be treated as a ‘virtual command’ and the rules described in Python Version Qualifiers (below) will be used to locate the executable to use.
  • Otherwise the command is assumed to be directly ready to execute — ie. a fully-qualified path (or a reference to an executable on the PATH) optionally followed by arguments. The contents of the string will not be parsed — it will be passed directly to the Windows CreateProcess function after appending the name of the script and the launcher command-line arguments. This means that the rules used by CreateProcess will be used, including how relative path names and executable references without extensions are treated. Notably, the Windows command processor will not be used, so special rules used by the command processor (such as automatic appending of extensions other than ‘.exe’, support for batch files, etc) will not be used.

The use of ‘virtual’ shebang lines is encouraged as this should allow for portable shebang lines to be specified which work on multiple operating systems and different installations of the same operating system.

If the first argument can not be opened as a file or if no valid shebang line can be found, the launcher will act as if a shebang line of ‘#!python’ was found — ie., a default Python interpreter will be located and the arguments passed to that. However, if a valid shebang line is found but the process specified by that line can not be started, the default interpreter will not be started — the error to create the specified child process will cause the launcher to display an appropriate message and terminate with a specific exit code.

Configuration file

Two .ini files will be searched by the launcher — py.ini in the current user’s «application data» directory (i.e. the directory returned by calling the Windows function SHGetFolderPath with CSIDL_LOCAL_APPDATA, %USERPROFILE%\AppData\Local on Vista+, %USERPROFILE%\Local Settings\Application Data on XP) and py.ini in the same directory as the launcher. The same .ini files are used for both the ‘console’ version of the launcher (i.e. py.exe) and for the ‘windows’ version (i.e. pyw.exe)

Customization specified in the «application directory» will have precedence over the one next to the executable, so a user, who may not have write access to the .ini file next to the launcher, can override commands in that global .ini file)

Virtual commands in shebang lines

Virtual Commands are shebang lines which start with strings which would be expected to work on Unix platforms — examples include ‘/usr/bin/python’, ‘/usr/bin/env python’ and ‘python’. Optionally, the virtual command may be suffixed with a version qualifier (see below), such as ‘/usr/bin/python2’ or ‘/usr/bin/python3.2’. The command executed is based on the rules described in Python Version Qualifiers below.

Customized Commands

The launcher will support the ability to define «Customized Commands» in a Windows .ini file (ie, a file which can be parsed by the Windows function GetPrivateProfileString). A section called ‘[commands]’ can be created with key names defining the virtual command and the value specifying the actual command-line to be used for this virtual command.

For example, if an INI file has the contents:

Then a shebang line of ‘#! vpython’ in a script named ‘doit.py’ will result in the launcher using the command-line c:\bin\vpython.exe -foo doit.py

The precise details about the names, locations and search order of the .ini files is in the launcher documentation [4]

Python Version Qualifiers

Some of the features described allow an optional Python version qualifier to be used.

A version qualifier starts with a major version number and can optionally be followed by a period (‘.’) and a minor version specifier. If the minor qualifier is specified, it may optionally be followed by «-32» to indicate the 32bit implementation of that version be used. Note that no «-64» qualifier is necessary as this is the default implementation (see below).

On 64bit Windows with both 32bit and 64bit implementations of the same (major.minor) Python version installed, the 64bit version will always be preferred. This will be true for both 32bit and 64bit implementations of the launcher — a 32bit launcher will prefer to execute a 64bit Python installation of the specified version if available. This is so the behavior of the launcher can be predicted knowing only what versions are installed on the PC and without regard to the order in which they were installed (ie, without knowing whether a 32 or 64bit version of Python and corresponding launcher was installed last). As noted above, an optional «-32» suffix can be used on a version specifier to change this behaviour.

If no version qualifiers are found in a command, the environment variable PY_PYTHON can be set to specify the default version qualifier — the default value is «2». Note this value could specify just a major version (e.g. «2») or a major.minor qualifier (e.g. «2.6»), or even major.minor-32.

If no minor version qualifiers are found, the environment variable PY_PYTHON (where is the current major version qualifier as determined above) can be set to specify the full version. If no such option is found, the launcher will enumerate the installed Python versions and use the latest minor release found for the major version, which is likely, although not guaranteed, to be the most recently installed version in that family.

In addition to environment variables, the same settings can be configured in the .INI file used by the launcher. The section in the INI file is called [defaults] and the key name will be the same as the environment variables without the leading PY_ prefix (and note that the key names in the INI file are case insensitive.) The contents of an environment variable will override things specified in the INI file.

Command-line handling

Only the first command-line argument will be checked for a shebang line and only if that argument does not start with a ‘-‘.

If the only command-line argument is «-h» or «—help», the launcher will print a small banner and command-line usage, then pass the argument to the default Python. This will cause help for the launcher being printed followed by help for Python itself. The output from the launcher will clearly indicate the extended help information is coming from the launcher and not Python.

As a concession to interactively launching Python, the launcher will support the first command-line argument optionally being a dash («-«) followed by a version qualifier, as described above, to nominate a specific version be used. For example, while «py.exe» may locate and launch the latest Python 2.x implementation installed, a command-line such as «py.exe -3» could specify the latest Python 3.x implementation be launched, while «py.exe -2.6-32» could specify a 32bit implementation Python 2.6 be located and launched. If a Python 2.x implementation is desired to be launched with the -3 flag, the command-line would need to be similar to «py.exe -2 -3» (or the specific version of Python could obviously be launched manually without use of this launcher.) Note that this feature can not be used with shebang processing as the file scanned for a shebang line and this argument must both be the first argument and therefore are mutually exclusive.

All other arguments will be passed untouched to the child Python process.

Process Launching

The launcher offers some conveniences for Python developers working interactively — for example, starting the launcher with no command-line arguments will launch the default Python with no command-line arguments. Further, command-line arguments will be supported to allow a specific Python version to be launched interactively — however, these conveniences must not detract from the primary purpose of launching scripts and must be easy to avoid if desired.

The launcher creates a subprocess to start the actual interpreter. See Discussion below for the rationale.

Discussion

It may be surprising that the launcher is installed into the Windows directory, and not the System32 directory. The reason is that the System32 directory is not on the Path of a 32-bit process running on a 64-bit system. However, the Windows directory is always on the path.

The launcher that is installed into the Windows directory is a 32-bit executable so that the 32-bit CPython installer can provide the same binary for both 32-bit and 64-bit Windows installations.

Ideally, the launcher process would execute Python directly inside the same process, primarily so the parent of the launcher process could terminate the launcher and have the Python interpreter terminate. If the launcher executes Python as a sub-process and the parent of the launcher terminates the launcher, the Python process will be unaffected.

However, there are a number of practical problems associated with this approach. Windows does not support the execv* family of Unix functions, so this could only be done by the launcher dynamically loading the Python DLL, but this would have a number of side-effects. The most serious side effect of this is that the value of sys.executable would refer to the launcher instead of the Python implementation. Many Python scripts use the value of sys.executable to launch child processes, and these scripts may fail to work as expected if the launcher is used. Consider a «parent» script with a shebang line of ‘#! /usr/bin/python3’ which attempts to launch a child script (with no shebang) via sys.executable — currently the child is launched using the exact same version running the parent script. If sys.executable referred to the launcher the child would be likely executed using a Python 2.x version and would be likely to fail with a SyntaxError.

Another hurdle is the support for alternative Python implementations using the «customized commands» feature described above, where loading the command dynamically into a running executable is not possible.

The final hurdle is the rules above regarding 64bit and 32bit programs — a 32bit launcher would be unable to load the 64bit version of Python and vice-versa.

Given these considerations, the launcher will execute its command in a child process, remaining alive while the child process is executing, then terminate with the same exit code as returned by the child. To address concerns regarding the termination of the launcher not killing the child, the Win32 Job API will be used to arrange so that the child process is automatically killed when the parent is terminated (although children of that child process will continue as is the case now.) As this Windows API is available in Windows XP and later, this launcher will not work on Windows 2000 or earlier.

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 будет установлен в ваш пользовательский каталог будет установлен в соответствии с опцией внизу первой страницы
  • Будут установлены стандартная библиотека, набор тестов, программа запуска и pip
  • Если этот параметр выбран, каталог установки будет добавлен в ваш PATH
  • Ярлыки будут видны только текущему пользователю

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

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

  • Вам может потребоваться предоставить административные данные или разрешение
  • Python будет установлен в каталог Program Files будет установлен в каталог 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 без набора тестов, вы можете предоставить ярлык с помощью следующей команды. Это отобразит упрощенную начальную страницу и запретит настройку:

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

Перечисленные выше параметры также можно определить в файле с именем unattend.xml вместе с исполняемым файлом. Этот файл определяет список параметров и значений. Когда значение предоставляется как атрибут, оно будет, если возможно, преобразовано в число. Значения, предоставленные в виде текста элемента, всегда остаются в виде строк. В этом примере файла задаются те же параметры, что и в предыдущем примере:

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

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

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

Вы также можете указать параметр /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-битных машин устанавливается с использованием:

Чтобы выбрать конкретную версию, добавить -Version 3.x.y . Выходной каталог можно изменить с . , и пакет будет установлен в подкаталог. По умолчанию подкаталог называется так же, как и пакет, и без параметра -ExcludeVersion это имя будет включать конкретную установленную версию. Внутри подкаталога находится каталог tools , содержащий установку Python:

Как правило, пакеты 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:

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

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

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

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

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

louis/software/faq/q1.html Установка переменных среды, Луи Дж. Фарруджа

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

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

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

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

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

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:

    возвращает ‘UTF-8’ вместо системной кодировки. Функция используется для кодировки текста по умолчанию во многих местах, включая open() , Popen , Path.read_text() и т. д. , 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, поэтому не имеет значения, какая версия установлена. Чтобы убедиться, что средство запуска доступно, выполните следующую команду в командной строке:

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

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

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

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

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

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

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

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

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

3.8.1.3. Из сценария¶

Давайте создадим тестовый скрипт Python с именем hello.py со следующим содержимым:

Из каталога, в котором живет hello.py, выполните команду:

Вы должны заметить, что напечатан номер версии вашей последней установки Python 2.x. Теперь попробуйте изменить первую строку на:

Повторное выполнение команды должно теперь распечатать последнюю информацию о 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

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

Будет найден и применён 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. Например, если у вас есть шебанг строка:

Будет запущен 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 (где — квалификатор текущей основной версии, как определено выше) может установлен для указания полной версии. Если такой вариант не найден, средство запуска перечислит установленные версии 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-файлу, содержащему:
  • Установка PY_PYTHON=3 и PY_PYTHON3=3.1 эквивалентна INI-файлу, содержащему:

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\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.

  • Добавляет поддержку файла ._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. Сюда входят утилиты для:

    (COM)
  • Вызовы Win32 API
  • Реестр
  • Журнал событий (MFC) пользовательских интерфейсов

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.

    по-прежнему поддерживается.
  • Программа установки Cygwin также предлагает установить интерпретатор Python (см. исходник пакета Cygwin, Релизы сопровождающего)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *