Простая С библиотека, которую можно использовать из Python
Здесь мы рассмотрим все этапы создания и тестирования примеров кода. Небольшое предисловие о самой С библиотеке, перед тем, как мы перейдем к модулю ctypes.
Код С, который мы будем использовать в этом руководстве будет настолько прост, насколько это возможно- он написан специально для раскрытия основных понятий, рассматриваемых в этом руководстве. Это скорее «пример на пальцах», и не предназначен для более широкого применения. Давайте рассмотрим функции, которые мы будем использовать:
C
int simple_function(void) {
static int counter = 0;
counter++;
return counter;
}
1 2 3 4 5 |
intsimple_function(void){ staticintcounter=; counter++; returncounter; } |
Функция simple_function просто возвращает подсчитанные числа. Каждый раз, когда она вызывается в счетчике increments, она выдает следующее значение:
C
void add_one_to_string(char *input) {
int ii = 0;
for (; ii < strlen(input); ii++) {
input++;
}
}
1 2 3 4 5 6 |
voidadd_one_to_string(char*input){ intii=; for(;ii<strlen(input);ii++){ inputii++; } } |
Функция add_one_to_string добавляет единицу к каждому символу в переданном массиве char. Мы используем его при рассмотрении неизменяемых строк Python и узнаем, как работать с ними при необходимости.
Python
char * alloc_C_string(void) {
char* phrase = strdup(«I was written in C»);
printf(«C just allocated %p(%ld): %s\n»,
phrase, (long int)phrase, phrase);
return phrase;
}
void free_C_string(char* ptr) {
printf(«About to free %p(%ld): %s\n»,
ptr, (long int)ptr, ptr);
free(ptr);
}
1 2 3 4 5 6 7 8 9 10 11 12 |
char*alloc_C_string(void){ char*phrase=strdup(«I was written in C»); printf(«C just allocated %p(%ld): %s\n», phrase,(longint)phrase,phrase); returnphrase; } void free_C_string(char*ptr){ printf(«About to free %p(%ld): %s\n», ptr,(longint)ptr,ptr); free(ptr); } |
Python
clib1.so: clib1.o
gcc -shared -o libclib1.so clib1.o
clib1.o: clib1.c
gcc -c -Wall -Werror -fpic clib1.c
1 2 3 4 5 |
clib1.soclib1.o gcc-shared-olibclib1.so clib1.o clib1.oclib1.c gcc-c-Wall-Werror-fpic clib1.c |
Makefile в repo настроен на создание и запуска демо из scratch. Вам нужно только запустить следующую команду в вашей оболочке:
Python
$ make
1 | $make |
Байт-код и виртуальная машина
Python поставляется с интерпретатором, который можно использовать, как REPL (read-eval-print-loop) в интерактивном режиме в командной строке. В качестве альтернативы вы можете вызвать Python со сценариями кода Python.
В обоих случаях интерпретатор анализирует ваш ввод, а затем компилирует его в байт-код (машинные инструкции нижнего уровня), который затем выполняется «питоническим представлением» компьютера. Это представление Pythonic называется виртуальной машиной.
Однако он достаточно отличается от других виртуальных машин, таких как Java или Erlang, и заслуживает отдельного изучения. Виртуальная машина, в свою очередь, взаимодействует с операционной системой и реальным оборудованием для выполнения машинных инструкций.
Когда вы видите типы файлов .pyc, .pyo и .pyd, важно помнить, что это файлы, созданные интерпретатором Python при преобразовании кода в скомпилированный байт-код. Компиляция исходного кода Python в байт-код является необходимым промежуточным этапом в процессе преобразования инструкций из исходного кода на понятном человеку языке в машинные инструкции, которые может выполнять ваша операционная система.. В этой статье мы рассмотрим каждый тип файла по отдельности, но сначала мы кратко рассмотрим виртуальную машину и байт-код в Python.
В этой статье мы рассмотрим каждый тип файла по отдельности, но сначала мы кратко рассмотрим виртуальную машину и байт-код в Python.
Установка
-
Скачаем .
Установка производится простым клонированием git-репозитория.
У проекта есть умный скрипт,
который скачает и его сотоварищей:Скрипт не требует прав суперпользователя (без ), потому что
всё устанавливается в домашнюю директорию пользователя. Туда же
будут устанавливаться и интерпретаторы. Если страшно запускать
какие-то скрипты из интернета (так и должно быть), то прочитать код скрипта можно
здесь. -
Настроим шелл.
Предыдущая команда перед завершением должна была напечатать инструкции
по настройке шелла. Допустим, в случае с она выводит
следующее:В случае с нужно будет добавить те же самые строки в .
В случае с в связи с особенностями самого шелла инструкции отличаются:
Кстати, горячо рекомендую попробовать , очень удобный шелл.
-
Установим зависимости для сборки.
При установке новой версии интерпретатора через под капотом
происходит сборка из исходников, поэтому для успешной установки
необходимы некоторые зависимости. Полный и актуальный список
для своей ОС смотрите
или .
Лучше установить всё заранее. -
Перезапустим шелл и проверим установку.
Установка из источника
Это отличный навык, которому стоит научиться. Существуют более простые способы, которые мы рассмотрим позже в этой статье. Тем не менее, существует ряд пакетов, которые нужно установить именно этим способом. Например, чтобы использовать easy_install, вам сначала нужно установить setuptools. Чтобы сделать это, вам нужно скачать tar или zip файл с PyPI (https://pypi.python.org/pypi/setuptools), и извлечь его в вашей системе
Далее, обратите внимание на файл setup.py. Откройте сессию терминала и измените каталог на папку, содержащую файл setup
После этого запустите следующую команду:
Python
python setup.py install
1 | python setup.py install |
Если Python не расположен в пути вашей системы, вы получите сообщение об ошибке, указывающее на то, что команда не была найдена, или приложение неизвестно. Вы также можете вызвать эту команду, применив весь путь к Python. Для пользователей Windows это выглядит так:
Python
c:\python34\python.exe setup.py install
1 | c:\python34\python.exe setup.py install |
Этот метод особенно удобен, если у вас несколько установленных версий Python и вам нужно установить пакет на разные версии. Все что вам нужно, это указать полный путь к конкретной версии Python и установить пакет. Некоторые пакеты содержат в себе С код, например, заглавные файлы С, которые должны быть скомпилированы под пакет для корректной установки. В случае с Linux, у вас должен быть установленный C/C++ компилятор, так что вы можете установить пакет без головной боли. Возвращаясь к Windows, вам нужна правильная версия Visual Studio, для корректной компиляции пакета. Некоторые люди упоминают также и MingW, который можно использовать для этих целей, но я не знаю, как сделать так, чтобы это работало. Если в пакете присутствует установщик Windows, используйте его. В таком случае вы можете забыть о компиляции в принципе.
Базовое использование¶
Все стандартные инструменты пакетизации предназначены для использования из командной
строки.
Следующая команда установит последнюю версию модуля и его зависимостей из
Пакетного индекса Python (PIP):
python -m pip install SomePackage
Примечание
Для пользователей POSIX (включая пользователей Mac OS X и Linux) примеры в этом
руководстве предполагают использование .
Для пользователей Windows в примерах этого руководства предполагается, что при
установке Python была выбрана опция настройки системной переменной среды
PATH.
Также можно указать точную или минимальную версию непосредственно в командной
строке. При использовании операторов сравнения, таких как ,
или некоторые другие специальные символы, которые
интерпретируются оболочкой, имя пакета и версия должны быть заключены в двойные
кавычки:
python -m pip install SomePackage==1.0.4 # конкретная версия python -m pip install "SomePackage>=1.0.4" # минимальная версия
Как правило, если подходящий модуль уже установлен, попытка его повторной
установки не будет иметь никаких последствий. Необходимо явно запросить
обновление существующих модулей:
python -m pip install --upgrade SomePackage
Создание виртуальных сред осуществляется через модуль . При установке
пакетов в активную виртуальную среду используются команды, показанные выше.
Разработка игр
Python — это очень разносторонний язык,
позволяющий программистам создавать
самые разнообразные приложения, включая
видеоигры.
Pygame. Набор модулей для написания видеоигр. Pygame расширяет функционал прекрасной библиотеки SDL. Благодаря ему на Python можно создавать полнофункциональные игры и мультимедиа-программы.
Pyglet. Мощная, но при этом простая в использовании библиотека Python для разработки игр и других приложений с большим количеством визуальных эффектов для Windows, Mac OS X и Linux.
pyOpenGL. Этот модуль чаще других используется для обеспечения работы с библиотекой OpenGL и связанными с нею API в программах на Python.
Отладка исполняемых файлов PyInstaller ↑
Как вы видели выше, вы можете столкнуться с проблемами при запуске исполняемого файла. В зависимости от сложности вашего проекта исправления могут быть такими простыми, как включение файлов данных, таких как пример программы чтения каналов. Однако иногда требуется больше методов отладки.
Ниже приведены несколько распространенных стратегий, которые не указаны в определенном порядке.Часто одна из этих стратегий или их комбинация приводит к прорыву в сложных сеансах отладки.
Используйте терминал
Сначала попробуйте запустить исполняемый файл из терминала, чтобы увидеть весь вывод.
Не забудьте удалить флаг -w build, чтобы увидеть весь стандартный вывод в окне консоли. Часто вы увидите исключения ImportError, если зависимость отсутствует.
Файлы отладки
Проверьте файл build/cli/warn-cli.txt на наличие проблем. PyInstaller создает множество выходных данных, чтобы помочь вам понять, что именно он создает. Копание в папке build/ — отличное место для начала.
Используйте режим распространения —onedir для создания папки распространения вместо одного исполняемого файла. Опять же, это режим по умолчанию. Сборка с помощью —onedir дает вам возможность проверить все включенные зависимости вместо того, чтобы все было скрыто в одном исполняемом файле.
—onedir полезен для отладки, но —onefile обычно легче понять пользователям. После отладки вы можете переключиться в режим —onefile, чтобы упростить распространение.
Дополнительные параметры интерфейса командной строки
PyInstaller также имеет параметры для управления объемом информации, печатаемой в процессе сборки. Перестройте исполняемый файл с параметром —log-level=DEBUG в PyInstaller и просмотрите вывод.
PyInstaller создаст много вывода при увеличении детализации с помощью —log-level=DEBUG. Полезно сохранить этот вывод в файл, к которому вы можете обратиться позже, вместо того, чтобы прокручивать его в Терминале. Для этого вы можете использовать функцию перенаправления вашей оболочки. Вот пример:
$ pyinstaller --log-level=DEBUG cli.py 2> build.txt
Используя указанную выше команду, вы получите файл build.txt, содержащий множество дополнительных сообщений DEBUG.
Вот пример того, как может выглядеть ваш файл build.txt:
67 INFO: PyInstaller: 3.4 67 INFO: Python: 3.6.6 73 INFO: Platform: Darwin-18.2.0-x86_64-i386-64bit 74 INFO: wrote /Users/realpython/pyinstaller/reader/cli.spec 74 DEBUG: Testing for UPX ... 77 INFO: UPX is not available. 78 DEBUG: script: /Users/realptyhon/pyinstaller/reader/cli.py 78 INFO: Extending PYTHONPATH with paths ['/Users/realpython/pyinstaller/reader', '/Users/realpython/pyinstaller/reader']
В этом файле будет много подробной информации о том, что было включено в вашу сборку, почему что-то не было включено и как был упакован исполняемый файл.
Вы также можете перестроить свой исполняемый файл с помощью параметра —debug в дополнение к параметру —log-level для получения дополнительной информации.
Дополнительные документы PyInstaller
PyInstaller GitHub Wiki содержит множество полезных ссылок и советов по отладке. В первую очередь это разделы о том, , и что делать, если что-то пойдет не так.
Помощь в обнаружении зависимостей
Наиболее частая проблема, с которой вы столкнетесь, — это исключения ImportError, если PyInstaller не может правильно определить все ваши зависимости. Как упоминалось ранее, это может произойти, если вы используете , импорт внутри функций или другие типы .
Многие из этих типов проблем можно решить с помощью —hidden-import параметр CLI PyInstaller. Это указывает PyInstaller включить модуль или пакет, даже если он не обнаруживает их автоматически. Это самый простой способ обойти множество магических действий динамического импорта в вашем приложении.
Другой способ обойти проблемы — файлы перехвата. Эти файлы содержат дополнительную информацию, которая поможет PyInstaller упаковать зависимость. Вы можете написать свои собственные хуки и указать PyInstaller использовать их с параметром CLI —additional-hooks-dir.
Файлы ловушек — это то, как сам PyInstaller работает внутри, поэтому вы можете найти множество примеров файлов ловушек в исходном коде PyInstaller.
Перезагрузка библиотеки
За один сеанс модуль можно импортировать только один раз. Если программист после импорта, изменит в файле, который импортировал что-либо, а потом снова его импортирует, основная программа не будет видеть этих изменений.
Всё потому, что при импорте библиотека кешируется, когда её пытаются импортировать снова, интерпретатор Python просто использует сохранённую в кэше копию.
Пример:
import my_name, time print(my_name.name) # Выведет Сергей time.sleep(10) # пауза во время которой изменяем # значение name в файле my_name.py # с Сергей на Александр import my_name print(my_name.name) # Выведет Сергей
Если всё же необходимо перезагрузить модуль, на помощью приходит функция из стандартной библиотеки importlib. Перезагрузка не влияет на объекты, ссылающиеся на импортированный модуль, и позволяет реализовать динамическую перезагрузку компонентов программы.
Вот пример:
from importlib import reload import my_name, time print(my_name.name) # Выведет Сергей time.sleep(10)# меняем значение с Сергей на Александр my_name = reload(my_name) print(my_name.name) # Выведет Александр
Подключение из другой папки
Библиотеки подключаются очень просто, когда интерпретатор Python знает, где их искать. Python ищет модули:
- В папке исполняемого скрипта.
- Во встроенных модулях (built-in).
- В директориях, определённых в sys.path (также содержит переменную PYTHONPATH).
Чтобы импортировать модуль из другой папки в Python 3, можно сделать следующее:
- Добавить путь к папке с модулем с помощью команды библиотеки sys —
import sys path.insert(0, "/путь/папка_модуля") import модуль
- Или переместить модуль в папку, определённую в путях поиска интерпретатора Python.
Для того чтобы директория, содержащая файлы, определялась как пакет, в неё необходимо добавить файл __init__.py. Он показывает интерпретатору Python, что папка — это пакет с модулями.
Начиная с версии Python 3.3, добавлять файл __init__.py в директорию больше не нужно, интерпретатор Python считает все папки пакетами.
Не стоит путать понятия «пакет» и «модуль». Модуль — это отдельный файл, а пакет — это папка, в которой содержится несколько отдельных скриптов.
Веб-разработка
Python это популярный язык для веб-разработки.
Все пакеты Python, перечисленные в этом
разделе, делают жизнь веб-разработчика
гораздо проще.
Beautiful Soup. Библиотека Python для быстрого парсинга HTML- и XML-файлов.
scrape. Модуль Python для веб-браузинга и скрапинга.
mechanize. Очень полезный модуль, благодаря которому вы получаете эмулятор браузера для взаимодействия с веб-страницами.
libgmail. Обеспечивает доступ к гугловскому сервису Gmail.
Google Maps. Благодаря этому модулю можно использовать веб-сервисы платформы Google Maps в своем приложении на Python.
Requests позволяет невероятно легко отсылать HTTP/1.1-запросы.
Selenium. При помощи этого модуля разработчики могут программными методами открывать веб-страницы, заполнять поля, кликать по кнопкам и отсылать формы.
pyquery позволяет делать jQuery-запросы в XML-документах. API этой библиотеки максимально приближен к jQuery. Для быстрой манипуляции с XML и HTML pyquery использует LXML.
Подключение модуля
Это можно сделать разными способами, выбор зависит только от нужд и желаний программиста.
Модули в Python — это файлы с расширением «.py». При импорте расширение опускается, интерпретатор и так знает, что после команды import следует имя модуля.
Программист может без проблем подключить любой модуль, который есть в стандартной библиотеке Python 3. Для подключения специфичных пользовательских инструментов сначала нужно их скачать. Обычно для этого используется пакетный менеджер pip.
Обычное подключение — import
Подключать модули желательно в самом вверху скрипта, используя ключевое слово «import», например .
После подключения программа получает доступ ко всем функциям, методам и классам, содержащимся в нём.
Программист может вызвать любую функцию из подключенной библиотеки используя префикс ««. Пример: где — это библиотека, которую мы подключили, а — имя функции, которая в ней описана.
Этот способ не допускает пересечения имён, то есть программист может использовать одно и то же имя функции в скрипте, точно такое же, как и в подключаемой библиотеке и не бояться, что после её подключения, функция будет переопределена.
Вот полный пример использования инструкции import в Python 3:
import random a = random.randint(1, 15) print(a)
Использование псевдонимов — as
Некоторые модули имеют длинное и неудобное название. Для удобства и сокращения количества кода программист может заменить его на своё.
Например, если написать ««, то вместо длинного для обращения к функциям библиотеки можно будет использовать короткое .
Импорт компонентов — from
Чтобы не захламлять программу большим количеством неиспользуемых инструментов, можно подключать не весь модуль, а какую-то его часть.
Например, программист хочет использовать только одну функцию из математической библиотеки . Если он подключит всю библиотеку, то в скрипт добавится более 40 функций, которые будут занимать место. Чтобы добавить в проект какую-то часть, используют ключевое слово :
from <имя подключаемого модуля> import <название функции>
Таким образом, основной скрипт получает доступ только к определённой функции. Кроме того, при таком подключении при вызове функций из подключённого модуля не используется префикс
Важно не забывать об этом, чтобы не допустить конфликта имён
Можно подключить несколько функций сразу в одной строке. Для этого их надо перечислить через запятую.
Если после import написать символ звёздочки «*», подключится все содержимое модуля. Это считается плохим тоном, потому что может привести к совпадению имён из основного скрипта с именами из подключаемого. Но если программист уверен, что использовал уникальные названия для функций и переменных, теоретически он может использовать этот способ.
Создание своего модуля на Python
Теперь пришло время создать свой модуль. Создадим файл mymodule.py, в которой определим какие-нибудь функции:
def hello(): print('Hello, world!') def fib(n): a = b = 1 for i in range(n - 2): a, b = b, a + b return b
Теперь в этой же папке создадим другой файл, например, main.py:
import mymodule mymodule.hello() print(mymodule.fib(10))
Выведет:
Hello, world! 55
Поздравляю! Вы сделали свой модуль! Напоследок отвечу ещё на пару вопросов, связанных с созданием модулей:
Как назвать модуль?
Помните, что вы (или другие люди) будут его импортировать и использовать в качестве переменной. Модуль нельзя именовать также, как и ключевое слово (их список можно посмотреть тут). Также имена модулей нельзя начинать с цифры. И не стоит называть модуль также, как какую-либо из встроенных функций. То есть, конечно, можно, но это создаст большие неудобства при его последующем использовании.
Куда поместить модуль?
Туда, где его потом можно будет найти. Пути поиска модулей указаны в переменной sys.path. В него включены текущая директория (то есть модуль можно оставить в папке с основной программой), а также директории, в которых установлен python. Кроме того, переменную sys.path можно изменять вручную, что позволяет положить модуль в любое удобное для вас место (главное, не забыть в главной программе модифицировать sys.path).
Можно ли использовать модуль как самостоятельную программу?
Можно. Однако надо помнить, что при импортировании модуля его код выполняется полностью, то есть, если программа что-то печатает, то при её импортировании это будет напечатано. Этого можно избежать, если проверять, запущен ли скрипт как программа, или импортирован. Это можно сделать с помощью переменной __name__, которая определена в любой программе, и равна «__main__», если скрипт запущен в качестве главной программы, и имя, если он импортирован. Например, mymodule.py может выглядеть вот так:
def hello(): print('Hello, world!') def fib(n): a = b = 1 for i in range(n - 2): a, b = b, a + b return b if __name__ == "__main__" hello() for i in range(10): print(fib(i))
Основы управления памятью в ctypes
Одно из главных преимуществ перехода из С в Python заключается в том, что вам больше не нужно тратить время на управление памятью вручную. Золотое правило использования ctypes – или любого инструмента кросс-языковой сортировки гласит:
В предыдущем примере это сработало хорошо, так как Python выделил буферы строк, которые мы передавали, после чего освобождал память за ненадобностью. Однако, часто возникает необходимость выделить память под С, затем передать её Python для различных манипуляций. Это работает, но для этого нужно проделать несколько шагов, чтобы убедиться в том, что вы можете передать указать памяти обратно в С, чтобы он мог её освободить по окончанию работы.
Для следующего примера я использую эти две С функции:
- alloc_C_string
- free_C_string
В этом примере обе функции выведут указатель памяти, который они используют, чтобы понять то, что в данный момент происходит. Как было сказано выше, нам нужно быть в состоянии хранить актуальный указатель памяти, который выделяет функция alloc_C_string, чтобы мы могли передать её обратно в free_C_string. Для этого нам нужно дать понять ctype, что alloc_C_string должна вернуть ctypes.POINTER нашему ctypes.c_char. Мы уже видели это раньше. Объекты ctypes.POINTER не слишком эффективны в использовании, но их можно конвертировать в другие, более полезные объекты. После того, как мы конвертируем строку в ctypes.c_char, мы можем получить доступ к её атрибуту значения, для получения битов в Python.
Связав все это вместе, мы получаем следующий код:
C
alloc_func = libc.alloc_C_string
# Это объект ctypes.POINTER, который содержит адрес данных
alloc_func.restype = ctypes.POINTER(ctypes.c_char)
print(«Allocating and freeing memory in C»)
c_string_address = alloc_func()
# Отлично, у нас есть объект POINTER.
# Нам нужно конвертировать его в что-то, что мы
# сможем использовать в Python
phrase = ctypes.c_char_p.from_buffer(c_string_address)
print(«Bytes in Python {0}».format(phrase.value))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
alloc_func=libc.alloc_C_string alloc_func.restype=ctypes.POINTER(ctypes.c_char) print(«Allocating and freeing memory in C») c_string_address=alloc_func() phrase=ctypes.c_char_p.from_buffer(c_string_address) print(«Bytes in Python {0}».format(phrase.value)) |
После того, как мы использовали данные, выделенные в С, нам нужно освободить память. Процесс очень похожий, мы определим атрибут argtypes вместо restype:
Python
free_func = libc.free_C_string
free_func.argtypes =
free_func(c_string_address)
1 2 3 |
free_func=libc.free_C_string free_func.argtypes=ctypes.POINTER(ctypes.c_char), free_func(c_string_address) |
Как Вручную Добавить Python В ПУТЬ Windows
Во-первых, если вы не установили Python на свой компьютер, перейдите на веб- сайт python.org, чтобы загрузить и установить предпочитаемую версию.
После успешной установки Python на ваш компьютер проверьте, не добавлен ли он в PATH Windows. Откройте свой терминал и введите python , затем нажмите клавишу Enter . Команда может вернуть ошибку, в которой говорится, что «python не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл», что означает, что Python еще не добавлен в переменную PATH вашего компьютера.
Чтобы запускать программы Python из командной строки, выполните шаги, выделенные ниже.
Найдите Путь Установки Python На Вашем ПК
Чтобы добавить Python в ваш Windows PATH, вам нужно получить путь его установки. Для этого откройте панель поиска Windows и введите python.exe (не нажимайте клавишу Enter ). Затем щелкните правой кнопкой мыши Python.exe, который появляется в появившемся меню, и выберите опцию Открыть расположение файла .
В открывшихся окнах проводника щелкните длинную панель каталогов слева от строки поиска. Выделите и скопируйте весь текст пути в буфер обмена с помощью Ctrl + c . Затем перейдите к следующим шагам ниже.
Далее: Добавить Python В PATH В Пользовательских Переменных
Чтобы добавить Python в PATH в пользовательских переменных , щелкните правой кнопкой мыши « Этот компьютер» и выберите « Свойства» . Оказавшись в меню свойств, нажмите на опцию Advanced system settings . В следующем окне выберите вкладку Advanced и выберите Environment Variables .
Environment Variables меню состоит из двух отдельных частей: верхняя часть называется Пользовательские переменные , а нижняя часть имени системных переменных . Однако в этом случае мы сосредоточимся на пользовательских переменных .
В меню пользовательских переменных найдите переменную с именем Path . Затем вставьте путь, который вы скопировали ранее, в параметр «Значение переменной», используя Ctrl + v, и нажмите « ОК» .
Однако, если вы не можете найти эту переменную, вам может потребоваться ее создать. Для этого нажмите New . Затем в форме имени переменной введите путь и вставьте свой путь Python в поле значения переменной .
Вернитесь в папку пути установки Python и дважды щелкните Scripts, чтобы открыть этот каталог. Затем скопируйте его путь из панели пути в верхней части окон (помимо панели поиска), как вы это делали ранее для пути установки Python.
Скопировав путь к скриптам, вернитесь к переменным среды . Затем выберите переменную Path и нажмите Edit . Введите точку с запятой после пути к исполняемому файлу Python и вставьте после него путь скриптов, который вы только что скопировали. Затем нажмите ОК .
Добавление Python В PATH С Помощью Параметра Системных Переменных
Вы также можете добавить Python в системную переменную PATH. Хотя это всего лишь альтернатива, и в ней нет необходимости, если вы уже добавили ее в переменные Users .
Чтобы использовать параметр « Системные переменные» , выполните шаги, выделенные выше, для копирования пути Python и его сценария. Затем вернитесь в переменные среды . Затем в сегменте системных переменных найдите переменную с именем Path . Щелкните эту переменную и щелкните Изменить .
В следующем появившемся окне нажмите New и вставьте путь, который вы скопировали ранее, в открывшееся пространство. Повторите этот процесс и для пути скриптов . Затем нажмите ОК и закройте окно переменных среды .