Spec-Zone.ru › Python 3.11

Часто задаваемые вопросы по Python в Windows

  • Как запустить программу Python в Windows?
  • Как сделать скрипты Python исполняемыми?
  • Почему Python иногда долго загружается?
  • Как создать исполняемый файл из скрипта Python?
  • Является ли файл *.pyd таким же, как DLL?
  • Как встроить Python в приложение Windows?
  • Как предотвратить вставку табуляции в исходный код Python редакторами?
  • Как проверить нажатие клавиши без блокировки?
  • Как исправить ошибку отсутствия api-ms-win-crt-runtime-l1-1-0.dll?

Как запустить программу Python в Windows?

Это не обязательно простой вопрос. Если вы уже знакомы с запуском программ из командной строки Windows, всё будет очевидно; в противном случае вам может потребоваться немного больше руководства.

Если вы не используете какое-либо интегрированное окружение разработки, вам придётся вводить команды Windows в окно «Командная строка». Обычно вы можете создать такое окно из строки поиска, набрав cmd. Вы должны распознать, когда вы открыли такое окно, потому что увидите командную строку Windows, которая обычно выглядит так:

C:\>

Буква может быть другой, и после неё могут быть другие символы, поэтому вы можете увидеть что-то вроде:

D:\YourName\Projects\Python>

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

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

Сначала убедитесь, что ваша командная строка распознаёт слово «py» как команду для запуска интерпретатора. Если вы открыли окно командной строки, попробуйте ввести команду py и нажмите Enter:

C:\Users\YourName> py

Затем вы увидите что-то вроде:

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

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

>>> print("Hello")
Hello
>>> "Hello" * 3
'HelloHelloHello'

Многие люди используют интерактивный режим в качестве удобного, но в то же время очень программируемого калькулятора. Когда вы хотите завершить свою интерактивную сессию Python, вызовите функцию exit() или удерживайте нажатой клавишу Ctrl, введите Z и нажмите клавишу «Enter», чтобы вернуться к командной строке Windows.

Возможно, у вас есть пункт меню «Пуск» типа Пуск ‣ Программы ‣ Python 3.x ‣ Python (командная строка), который приводит к появлению запроса >>> в новом окне. В таком случае окно исчезнет после вызова функции exit() или ввода символа Ctrl-Z; Windows выполняет одну команду «python» в окне и закрывает его при завершении работы интерпретатора.

Теперь, когда команда py распознаётся, вы можете предоставить свой скрипт Python. Вам нужно будет указать абсолютный или относительный путь к скрипту Python. Предположим, ваш скрипт Python находится на рабочем столе и называется hello.py, а ваша командная строка красиво открыта в домашнем каталоге, поэтому вы видите что-то подобное:

C:\Users\YourName>

Теперь вы попросите команду py передать ваш скрипт Python, набрав py и путь к вашему скрипту:

C:\Users\YourName> py Desktop\hello.py
hello

Как сделать скрипты Python исполняемыми?

В Windows стандартный установщик Python уже связывает расширение .py с типом файла (Python.File) и предоставляет для этого типа файла команду открытия, которая запускает интерпретатор (D:\Program Files\Python\python.exe "%1" %*). Этого достаточно для запуска скриптов из командной строки как ‘foo.py’. Если вы хотите иметь возможность запускать скрипт, просто набрав «foo» без расширения, вам нужно добавить .py в переменную среды PATHEXT.

Почему Python иногда долго загружается?

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

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

Как создать исполняемый файл из скрипта Python?

См. Как создать автономный исполняемый файл из скрипта Python? для списка инструментов, которые можно использовать для создания исполняемых файлов.

Является ли файл *.pyd таким же, как DLL?

Да, файлы .pyd являются dll, но есть несколько различий. Если у вас есть DLL с именем foo.pyd, то она должна иметь функцию PyInit_foo(). Затем вы можете написать «import foo» на Python, и Python будет искать foo.pyd (а также foo.py, foo.pyc), и если найдёт, попытается вызвать PyInit_foo() для её инициализации. Вы не связываете ваш .exe с foo.lib, так как это потребует от Windows наличия DLL.

Обратите внимание, что путь поиска для foo.pyd — это PYTHONPATH, а не путь, используемый Windows для поиска foo.dll. Кроме того, foo.pyd не обязательно должен присутствовать для запуска вашей программы, в то время как если вы связали свою программу с dll, dll необходима. Конечно, foo.pyd необходим, если вы хотите сказать import foo. В DLL связь объявляется в исходном коде с помощью __declspec(dllexport). В .pyd связь определяется в списке доступных функций.

END_OF_DOCUMENT_MARKER

Как встроить интерпретатор Python в приложение для Windows?

Встраивание интерпретатора Python в приложение Windows можно описать следующим образом:

  1. Не встраивайте Python напрямую в ваш исполняемый файл (.exe). В Windows Python должен быть DLL-библиотекой для обработки импорта модулей, которые сами являются DLL. (Это первый ключевой не документированный факт.) Вместо этого, связывайтесь с pythonNN.dll; обычно он установлен в C:\Windows\System. NN — это версия Python, число, например, «33» для Python 3.3.

    Вы можете связаться с Python двумя способами. Связывание во время загрузки означает связывание с pythonNN.lib, а связывание во время выполнения — со pythonNN.dll. (Общее примечание: pythonNN.lib — это так называемая «библиотека импорта», соответствующая pythonNN.dll. Она просто определяет символы для компоновщика.)

    Связывание во время выполнения значительно упрощает параметры компоновки; всё происходит во время выполнения. Ваш код должен загружать pythonNN.dll с помощью Windows-функции LoadLibraryEx(). Код также должен использовать функции доступа и данные в pythonNN.dll (то есть, C API Python) с помощью указателей, полученных с помощью Windows-функции GetProcAddress(). Макросы могут сделать использование этих указателей прозрачным для любого C-кода, который вызывает функции в C API Python.

  2. Если вы используете SWIG, легко создать модуль расширения Python, который сделает данные и методы приложения доступными для Python. SWIG позаботится обо всех сложных деталях. Результатом будет C-код, который вы связываете в ваш исполняемый файл (!) Вам не нужно создавать DLL-файл, что также упрощает компоновку.
  3. SWIG создаст функцию инициализации (C-функцию), имя которой зависит от имени модуля расширения. Например, если имя модуля — leo, функция инициализации будет называться initleo(). Если вы используете классы-тени SWIG, как и следует, функция инициализации будет называться initleoc(). Это инициализирует скрытый вспомогательный класс, используемый классом-тенью.

    Причина, по которой вы можете связать C-код из шага 2 в ваш исполняемый файл, заключается в том, что вызов функции инициализации эквивалентен импорту модуля в Python! (Это второй ключевой не документированный факт.)

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

    #include <Python.h>
    ...
    Py_Initialize();  // Initialize Python.
    initmyAppc();  // Initialize (import) the helper class.
    PyRun_SimpleString("import myApp");  // Import the shadow class.
    
  5. Существуют две проблемы с C API Python, которые проявятся, если вы используете компилятор, отличный от MSVC, компилятор, используемый для построения pythonNN.dll.

    Проблема 1: так называемые функции «Очень высокого уровня», принимающие FILE * аргументы, не будут работать в многокомпиляционной среде, потому что представление struct FILE в каждом компиляторе будет отличаться. С точки зрения реализации, это функции очень низкого уровня.

    Проблема 2: SWIG генерирует следующий код при генерации обёртки для функций void:

    Py_INCREF(Py_None);
    _resultobj = Py_None;
    return _resultobj;
    

    К сожалению, Py_None — это макрос, который расширяется до ссылки на сложную структуру данных под названием _Py_NoneStruct внутри pythonNN.dll. Опять же, этот код не будет работать в многокомпиляционной среде. Замените такой код на:

    return Py_BuildValue("");
    

    Возможно, с помощью команды %typemap SWIG можно выполнить изменение автоматически, хотя мне это не удалось (я полный новичок в SWIG).

  6. Использование скрипта оболочки Python для отображения окна интерпретатора Python изнутри приложения Windows — плохая идея; получившееся окно будет независимо от вашей системы оконного управления. Вместо этого вы (или класс wxPythonWindow) должны создать «родное» окно интерпретатора. Легко связать это окно с интерпретатором Python. Вы можете перенаправить ввод/вывод Python к любому объекту, поддерживающему чтение и запись, поэтому всё, что вам нужно, — это объект Python (определённый в вашем модуле расширения), содержащий методы read() и write().

Как предотвратить вставку табуляции в код Python редакторами?

В FAQ не рекомендуется использовать табуляцию, и руководство по стилю Python, PEP 8, рекомендует использовать 4 пробела для распределённого кода Python; это также стандартное значение по умолчанию для режима python-mode в Emacs.

Использование смешения табуляции и пробелов в любом редакторе — плохая идея. MSVC в этом отношении ничем не отличается и легко настраивается на использование пробелов: выберите Сервис ‣ Параметры ‣ Вкладки, для типа файла «По умолчанию» задайте «Размер табуляции» и «Размер отступа» 4 и выберите радиокнопку «Вставлять пробелы».

Python вызывает IndentationError или TabError, если смешанные табуляции и пробелы вызывают проблемы с отступами. Вы также можете запустить модуль tabnanny для проверки дерева каталогов в пакетном режиме.

Как проверить нажатие клавиши без блокировки?

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

Как исправить ошибку отсутствия api-ms-win-crt-runtime-l1-1-0.dll?

Это может произойти в Python 3.5 и более поздних версиях при использовании Windows 8.1 или более ранних версий без установки всех обновлений. Сначала убедитесь, что ваша операционная система поддерживается и обновлена, и если это не решит проблему, посетите страницу поддержки Microsoft https://support.microsoft.com/en-us/help/3118401/ для получения инструкций по ручному установлению обновления C Runtime.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/faq/windows.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API