Позволяет скомпилировать блок кода для выполнения в exec().
Синтаксис:
compile(source, filename, mode, flag, dont_inherit, optimize)
Параметры:
- source — обязательный параметр. Может быть обычной строкой, байтовой строкой, либо объектом абстрактного синтаксического дерева.
- filename — обязательный параметр. Имя файла, из которого будет читается код. Если код не будет считан из файла, вы можете написать в качестве параметра любую строку .
- mode — обязательный параметр. Может принимать 3 значения:
- eval , если источником является одно выражение;
- exec ,если источником является блок операторов;
- single , если код состоит из одного оператора;
- -1 — использовать настройки интерпретатора (регулируются опцией -O);
- 0 — не оптимизировать, включить debug;
- 1 — убрать инструкции asserts, выключить debug;
- 2 — то, что делает 1 + убрать строки документации.
Возвращаемое значение:
- объекта кода, готовый к выполнению.
Описание:
Функция compile() возвращает переданный, в качестве аргумента источник, в виде объекта кода, готового к выполнению. Объекты кода, полученные в результате выполнения функции compile() могут быть выполнены с помощью exec() или eval() .
Как скомпилировать программы на Python
Функция compile() бросает исключение SyntaxError , если скомпилированный источник недопустим и ValueErrorесли , если источник содержит нулевые байты.
Заметка:
При компиляции строки с многострочным кодом в режиме single или eval , ввод должен заканчиваться хотя бы одним символом новой строки ‘n’ . Это должно облегчить обнаружение неполных и полных операторов в модуле code .
Предупреждение:
При компиляции в объект AST(абстрактного синтаксического дерева) возможен сбой интерпретатора Python с большой(сложной) строкой из-за ограничений глубины стека в компиляторе AST Python.
Изменено в Python 3.5: Ранее TypeError вызывалось, когда в источнике встречались нулевые байты.
Новое в Python 3.8: ast.PyCF_ALLOW_TOP_LEVEL_AWAIT теперь можно передать через необязательный параметр flag , чтобы обеспечить поддержку await и async .
Пример компиляции строки кода с последующем выполнением.
# выполнение в exec >>> x = compile(‘x = 1nz = x + 5nprint(z)’, ‘test’, ‘exec’) >>> exec(x) # 6 # выполнение в eval >>> y = compile(«print(‘4 + 5 =’, 4+5)», ‘test’, ‘eval’) >>> eval(y) # 4 + 5 = 9
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа.
- Функция all(), все элементы True.
- Функция any(), хотя бы один элемент True.
- Функция ascii(), преобразует строку в ASCII.
- Функция bin(), число в двоичную строку.
- Класс bool(), логическое значение объекта.
- Функция breakpoint(), отладчик кода.
- Класс bytearray(), преобразует в массив байтов.
- Класс bytes(), преобразует в строку байтов.
- Функция callable(), проверяет можно ли вызвать объект.
- Функция chr(), число в символ Юникода.
- Класс classmethod, делает функцию методом класса.
- Функция compile() компилирует блок кода Python.
- Класс complex(), преобразует в комплексное число.
- Функция delattr(), удаляет атрибут объекта.
- Класс dict() создает словарь.
- Функция dir(), все атрибуты объекта.
- Функция divmod(), делит числа с остатком.
- Функция enumerate(), счетчик элементов последовательности.
- Функция eval(), выполняет строку-выражение с кодом.
- Функция exec(), выполняет блок кода.
- Функция filter(), фильтрует список по условию.
- Класс float(), преобразует в вещественное число.
- Функция format(), форматирует значение переменной.
- Класс frozenset(), преобразует в неизменяемое множество.
- Функция getattr(), значение атрибута по имени.
- Функция globals(), переменные глобальной области.
- Функция hasattr(), наличие атрибута объекта.
- Функция hash(), хэш-значение объекта.
- Функция help(), справка по любому объекту.
- Функция hex(), число в шестнадцатеричную строку.
- Функция id(), идентификатор объекта.
- Функция input(), ввод данных с клавиатуры.
- Класс int(), преобразует в тип int.
- Функция isinstance(), принадлежность экземпляра к классу.
- Функция issubclass(), проверяет наследование класса.
- Функция iter(), создает итератор.
- Функция len(), количество элементов объекта.
- Класс list(), преобразовывает в список.
- Функция locals(), переменные локальной области.
- Функция map(), обработка последовательности без цикла.
- Функция max(), максимальное значение элемента.
- Класс memoryview(), ссылка на буфер обмена.
- Функция min(), минимальное значение элемента.
- Функция next(), следующий элемент итератора.
- Класс object(), возвращает безликий объект.
- Функция oct(), число в восьмеричную строку.
- Функция open(), открывает файл на чтение/запись.
- Функция ord(), число символа Unicode.
- Функция pow(), возводит число в степень.
- Функция print(), печатает объект.
- Класс property(), метод класса как свойство.
- Класс range(), генерирует арифметические последовательности.
- Функция repr(), описание объекта.
- Функция reversed(), разворачивает последовательность.
- Функция round(), округляет число.
- Класс set(), создает или преобразовывает в множество.
- Функция setattr(), создает атрибут объекта.
- Класс slice(), шаблон среза.
- Функция sorted(), выполняет сортировку.
- Декоратор staticmethod(), метод класса в статический метод.
- Класс str(), преобразует объект в строку.
- Функция sum(), сумма последовательности.
- Функция super(), доступ к унаследованным методам.
- Класс tuple(), создает или преобразует в кортеж.
- Класс type(), возвращает тип объекта.
- Функция vars(), словарь переменных объекта.
- Функция zip(), объединить элементы в список кортежей.
- Функция __import__(), находит и импортирует модуль.
- Функция aiter(), создает асинхронный итератор.
- Функция anext(), следующий элемент асинхронного итератора.
Источник: docs-python.ru
Как скомпилировать python в exe | Полноценная компиляция с помощью NUITKA
не могу скомпилировать python 3.4 в exe
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.
Валентин
Пользователь
Ноя 13, 2020 113 0 16
Операционная система windows 10. Написал программу на python 3.4 Когда дело дошло до компиляции всё пошло в тупик. Pyinstaller не устанавливается на эту версию python, а cx_Freeze создаёт огромную библиотеку. Использовать другую версию python не могу. Теперь незнаю как скомпилировать всё что сделал(
stud_55
Модератор
Команда форума
Модератор
Апр 3, 2020 1 522 671 113
Pyinstaller не устанавливается на эту версию python
Попробуйте установить версию 3.0 pyinstaller`a: ссылка.
regnor
Модератор
Команда форума
Модератор
Июл 7, 2020 2 421 430 83
питон не компилируемый язык (за исключением Cython, который можно скомпилировать), а почему нельзя использовать другую версию питон? почему Pyinstaller не устанавливается что пишет? и зачем вообще компилировать интерпретируемый язык?
Валентин
Пользователь
Ноя 13, 2020 113 0 16
питон не компилируемый язык (за исключением Cython, который можно скомпилировать), а почему нельзя использовать другую версию питон? почему Pyinstaller не устанавливается что пишет? и зачем вообще компилировать интерпретируемый язык?
Вот что выдаёт при установке Pyinstaller:
Command python setup.py egg_info failed with error code 1 in C:UsersCOMPSAppDataLocalTemppip_build_COMPSpyinstaller
Storing debug log for failure in C:UsersCOMPSpippip.log
Валентин
Пользователь
Ноя 13, 2020 113 0 16
Попробуйте установить версию 3.0 pyinstaller`a: ссылка.
Exception:
Traceback (most recent call last):
File «C:Python34libsite-packagespipbasecommand.py», line 122, in main
status = self.run(options, args)
File «C:Python34libsite-packagespipcommandsinstall.py», line 257, in run
InstallRequirement.from_line(name, None))
File «C:Python34libsite-packagespipreq.py», line 172, in from_line
return cls(req, comes_from, url=url, prereleases=prereleases)
File «C:Python34libsite-packagespipreq.py», line 70, in __init__
req = pkg_resources.Requirement.parse(req)
File «C:Python34libsite-packagespip_vendorpkg_resources.py», line 2606, in parse
reqs = list(parse_requirements(s))
File «C:Python34libsite-packagespip_vendorpkg_resources.py», line 2532, in parse_requirements
raise ValueError(«Missing distribution spec», line)
ValueError: (‘Missing distribution spec’, ‘==’)
Storing debug log for failure in C:UsersCOMPSpippip.log
regnor
Модератор
Команда форума
Модератор
Июл 7, 2020 2 421 430 83
Вот что выдаёт при установке Pyinstaller:
Command python setup.py egg_info failed with error code 1 in C:UsersCOMPSAppDataLocalTemppip_build_COMPSpyinstaller
Storing debug log for failure in C:UsersCOMPSpippip.log
Источник: itfy.org
Функция compile() в Python
Функция compile() в Python используется для компиляции исходного кода в объект кода или объект модуля AST. Возвращенный объект кода может быть выполнен с использованием функции exec() или eval() в зависимости от предоставленного режима для создания объекта кода.
Компиляция
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
Давайте посмотрим на аргументы функции compile():
- source: Источник для создания объекта кода. Это может быть строка, байтовая строка или объект модуля AST.
- filename: Если вы читаете строку кода из файла, вы должны указать здесь его имя для справки. Он не используется при создании объекта кода, скорее он используется для обеспечения читабельности кода.
- mode: этот аргумент указывает тип кода. Допустимые значения: exec, eval и single. Используйте exec, если источник содержит несколько операторов Python. Используйте eval, если источник – это одно выражение. Используйте один, если источник состоит из одного интерактивного оператора.
- Необязательные аргументы flags и dont_inherit управляют тем, какие будущие операторы влияют на компиляцию исходного кода. Если ни один из них не присутствует (или оба равны нулю), код компилируется с теми будущими операторами, которые действуют в коде, вызывающем compile().
- Аргумент optimize указывает уровень оптимизации компилятора.
Примеры
Давайте посмотрим на пример функции compile() с разными исходниками.
Компиляция источника строки в код
# compile() with string source code_str = ‘x=5ny=10nprint(«sum EnlighterJSRAW» data-enlighter-language=»python»> sum = 15
Обратите внимание, что тип возвращаемого значения функции компиляции – это объект «код». Кроме того, здесь мы используем exec(), потому что исходная строка содержит несколько операторов python. Обратите внимание, что объект кода выполняется функцией exec(), и в консоли печатается «sum = 15».
Чтение кода из файла и компиляция
Допустим, у нас есть файл my_code.py со следующим содержимым.
x = 10 y = 20 print(‘Multiplication = ‘, x * y)