Привет, Мир, Вы когда-нибудь восхищались тем, что такое язык Python? Python компилируется, интерпретируется или и то, и другое? Давайте поближе разберемся в этом и почему……..
Python Компилируется, интерпретируется или И то, и Другое?
Распространенный вопрос: “Компилируется ли Python, интерпретируется или и то, и другое?”.
Типы языков программирования
Любой высокоуровневый язык программирования преобразуется в машинный язык двумя способами:
- Компиляторы
- Переводчики
Компиляторы:
Преобразуйте высокоуровневую программу в ее машинные или процессорные наборы команд, то есть машинный байт-код. Поэтому компилятор сначала проверяет свой синтаксис и преобразует всю программу в машинный или процессорный байт-код.
компилируемый язык – это язык программирования, реализации которого обычно href=”https://en.wikipedia.org/wiki/Compiler”>компиляторы (переводчики, генерирующие машинный код из href=”https://en.wikipedia.org/wiki/Source_code”>исходный код). И href=”https://en.wikipedia.org/wiki/Interpreter_(computing)”>интерпретаторы являются пошаговыми исполнителями исходного кода, где не происходит предварительного перевода во время выполнения. href=”https://en.wikipedia.org/wiki/Compiler”>компиляторы (переводчики, генерирующие машинный код из href=”https://en.wikipedia.org/wiki/Source_code”>исходный код). И href=”https://en.wikipedia.org/wiki/Interpreter_(computing)”>интерпретаторы являются пошаговыми исполнителями исходного кода, где не происходит предварительного перевода во время выполнения. href=”https://en.wikipedia.org/wiki/Source_code”>исходный код). И href=”https://en.wikipedia.org/wiki/Interpreter_(computing)”>интерпретаторы являются пошаговыми исполнителями исходного кода, где не происходит предварительного перевода во время выполнения. href=”https://en.wikipedia.org/wiki/Interpreter_(computing)”>интерпретаторы являются пошаговыми исполнителями исходного кода, где не происходит предварительного перевода во время выполнения.
Как скомпилировать Python в мобильное приложение
Например: c, c++, Java
Переводчики:
Интерпретаторы работают по-разному: они берут каждое выражение или строку программы, преобразуют их в машинный код и выполняют. Следовательно, если в определенной строке есть ошибка, она будет показана во время выполнения.
Интерпретируемый язык – это тип языка программирования, для которого большинство его реализаций выполняют инструкции непосредственно и свободно. Без предварительной компиляции программы в инструкции машинного языка. href=”https://en.wikipedia.org/wiki/Interpreter_ интерпретатор теперь выполняет программу, переводя каждое утверждение в последовательность одной или нескольких подпрограмм, а затем на другой язык (часто машинный код). href=”https://en.wikipedia.org/wiki/Interpreter_ интерпретатор теперь выполняет программу, переводя каждое утверждение в последовательность одной или нескольких подпрограмм, а затем на другой язык (часто машинный код).
Компиляция Python в EXE? | Nuitka, Pyinstaller, InnoSetup
Пример: оболочка Unix
Интерпретируется ли Python?
Это немного странно с точки зрения компиляции, приходя к Python, запомните это слово.
Python-это “СКОМПИЛИРОВАННЫЙ ИНТЕРПРЕТИРУЕМЫЙ” язык.
Это означает, что при запуске программы Python,
- Сначала Python проверяет синтаксис программы
- Компилирует и преобразует его в байт-код, а непосредственно байт-код загружается в системную память.
- Затем скомпилированный байт-код интерпретируется из памяти для его выполнения.
В то время как другие языки, такие как c, преобразуют программы в машинный код и сохраняют их как исполняемые файлы на диске. И тогда пользователь может запустить его как.out
Компиляция на Python кода Python
Возможно ли из программы Python компилирования кода на том же Python? То есть, предположим, что программа откуда-то получила код (например, считала из файла). Можно ли как-то изнутри программы скомпилировать этот код?
Отслеживать
11.5k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
задан 25 дек 2012 в 1:25
Егор Беликов Егор Беликов
61 8 8 бронзовых знаков
Т.е. из .py сделать .pyc? А кто мешает?
25 дек 2012 в 1:31
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если нужен запуск плученного в виде текста Python кода то eval
Отслеживать
ответ дан 25 дек 2012 в 5:38
3,018 12 12 серебряных знаков 14 14 бронзовых знаков
Только помните, что это небезопасно, если исходный код приходит извне.
25 дек 2012 в 14:28
Мда, незначительная такая оговорочка: «помните, что это небезопасно». )))
7 июн 2020 в 14:02
Чтобы скомпилировать Питон код в байт-код, не запуская его на выполнение, можно использовать compile() для кода в строке, py_compile для модуля в файле, compileall для дерева директорий с кодом.
Скомпилированный код можно отдать на выполнение в exec(), eval() функции. Скомпилированные .pyc / .pyo файлы могут быть выполнены напрямую python командой.
# Don’t blink! This is where the user’s code gets run. exec(compile(example.source, filename, «single», compileflags, 1), test.globs)
Как правило компилировать вручную нет необходимости: exec() , eval() , python также принимают Питон код напрямую.
Чтобы создать AST представление кода, можно использовать ast.parse() , что может быть полезно, к примеру, для вычисления простых арифметических выражений.
Источник: ru.stackoverflow.com
Взаимодействие с кодом Python
Язык программирования Python обладает большими возможностями, имеет богатый функционал и библиотеки, написание которых на языке Си может занять продолжительное время, особенно это касается сферы машинного обучения. И было бы неплохо просто взять готовую функциональность на Python и инкорпорировать в программу на C. И Python позволяет это сделать, предоставляя такую функциональность, как Embedded Python (встраиваемый Python). То есть мы можем встроить в программу на C интерпретатор Python и выполнять в программе на C код на языке Python. Рассмотрим, как это сделать.
Настройка и компиляция на Windows
Для работы на ОС Windows прежде всего нам нужно узнать путь к установленному интерпретатору Python. Например, в моем случае это путь C:UserseugenAppDataLocalProgramsPythonPython311 . Для упрощения работу установим в переменных среды переменную PYTHONHOME . Она должна указывать на путь к каталогу, где учстановлен Python. Эта переменная будет использоваться для поиска нужных библиотек:
Определим файл app.c со следующей программой на языке C:
#include int main()
Прежде всего, чтобы встроить Python в программу, подключаем заголовочный файл Python.h . Этот файл устанавливается вместе с другими файлами интерпретатора Python по умолчанию. Мы его можем найти в папке интерпретатора Python в каталоге include
В программе сначала вызываем функцию Py_Initialize() . Эта функция инициализирует интерпретатор Python, таблицу модулей и устанавливает путь к модулям.
Чтобы выполнить некоторый код Python, применяется функция PyRun_SimpleString() , в которую передается код Python
PyRun_SimpleString(«print(‘Hello METANIT.COM’)»);
Здесь код Python представляет вывод строки на консоль с помощью функции print()
После выполнения кода Python вызываем функцию Py_Finalize() , которая освобождает память, выделенную для интерпретатора Python.
Для компиляции в Windows используем компилятор gcc . Выполним команду
gcc -Wall -I %PYTHONHOME%include -L %PYTHONHOME%libs -o app.exe app.c -lpython311 gcc -Wall -I %PYTHONHOME%include -L %PYTHONHOME%libs -o app app.c -lpython311
При этом в программе могут быть и другие инструкции на языке C:
#include #include int main()
Компиляция на Linux
Компиляция на Linux несколько отличается. Для компиляции на Ubuntu применяется следующая команда:
gcc -Wall $(python3-config —cflags) -o app app.c $(python3-config —embed —ldflags)
Использование библиотек Python
Подобным образом можно использовать более сложный код Python. В том числе с использованием сторонних библиотек Python. Например, нарисуем произвольный график с помощью библиотек numpy и matplotlib . Соответственно нам надо вначале установить данные библиотеки с помощью пакетного менеджера pip:
pip install numpy pip install matplotlib
Для создания графика определим на С следующую программу:
#include int main()
В данном случае сначала подключаем функционал библиотек numpy и matplotlib .
import numpy as np import matplotlib.pyplot as plt
Далее генерируем значения, которые отображаются по оси X:
x = np.array(range(0, 8))
Для генерации применяется функция np.array() библиотеки Numpy, которая создает набор чисел от 0 до 7.
Далее по значениям X получаем значения Y по определенной формуле. Здесь мы рисуем график функции y = 2x + 1 . И для вычисления значений Y применяем встроенную функцию eval() , которая есть в языке Python и которая вычисляет произвольное выражение.
y = eval(‘2 * x + 1’)
Затем устанавливаем заголовок графика
plt.title(‘y = 2x + 1’)
Устанавливаем текстовые метки для осей X и Y:
plt.xlabel(‘x’) plt.ylabel(‘y’)
И в конце отрисовываем график и отображаем его на экране:
plt.plot(x,y) plt.show()
Выполнение файла с кодом Python
Если инструкций на Python много, то их проще определить в отдельный файл. Затем в программе на языке С этот файл можно выполнить с помощью функции PyRun_SimpleFile() , которая имеет следующее определение:
int PyRun_SimpleFile(FILE *fp, const char *filename)
В качестве первого параметра передается дескриптор файла, а в качестве второго — имя файла.
Например, определим в одной папке с программой файл main.py со следующим кодом на языке Python:
print(«Hello Python in C»)
Здесь код просто выводит строку на консоль.
В главном файле программы на C (допустим, он называется app.c ) выполним этот скрипт Python:
#include int main() < char filename[] = «main.py»; Py_Initialize(); FILE* fp = fopen(filename, «rb»); // открываем файл и if(fp) PyRun_SimpleFile(fp, filename); // выполняем программу python Py_Finalize(); return 0; >
Здесь сначала открываем файл в бинарном режиме для чтения и получаем указатель на файл с помощью функции fopen() , затем выполняем файл с кодом Python. В итоге консоль должна вывести
Источник: metanit.com