Python pyc исполняемый файл

1. Модули¶

Импорт модуля – относительно дорогостоящее мероприятие, поэтому Python предпри- нимает некоторые трюки для ускорения этого процесса. Один из способов – создать байт-компилированные файлы (или байткод) с расширением .pyc, которые являются некой промежуточной формой, в которую Python переводит программу (помните раздел “Введение” о том, как работает Python?). Такой файл .pyc полезен при импорте модуля в следующий раз в другую программу – это произойдёт намного быстрее, поскольку зна- чительная часть обработки, требуемой при импорте модуля, будет уже проделана. Этот байткод также является платформо-независимым.

Обычно файлы .pyc создаются в том же каталоге, где расположены и соот- ветствующие им файлы .py. Если Python не может получить доступ для записи файлов в этот каталог, файлы .pyc созданы не будут.

1.2. Оператор from … import …¶

Чтобы импортировать переменную argv прямо в программу и не писать всякий раз sys. при обращении к ней, можно воспользоваться выражением “from sys import argv”. Для импорта всех имён, использующихся в модуле sys, можно выполнить команду “from sys import * ”. Это работает для любых модулей. В общем случае вам следует избегать использования этого оператора и использовать вместо этого оператор import, чтобы предотвратить конфликты имён и не затруднять чтение программы.

from math import * n = input("Введите диапазон:- ") p = [2, 3] count = 2 a=5 while (count  n): b=0 for i in range(2,a): if ( i  sqrt(a)): if (a % i == 0): print("a neprost",a) b=1 else: pass if (b != 1): print("a prost",a) p = p + [a] count = count + 1 a=a+2 print p 

1.3. Имя модуля – __name__¶

У каждого модуля есть имя, и команды в модуле могут узнать имя их модуля. Это полез- но, когда нужно знать, запущен ли модуль как самостоятельная программа или импорти- рован. Как уже упоминалось выше, когда модуль импортируется впервые, содержащийся в нём код исполняется. Мы можем воспользоваться этим для того, чтобы заставить мо- дуль вести себя по-разному в зависимости от того, используется ли он сам по себе или импортируется в другую программа. Этого можно достичь с применением атрибута мо- дуля под названием __name__.

if __name__ == '__main__': print('Эта программа запущена сама по себе.') else: print('Меня импортировали в другой модуль.') 

В каждом модуле Python определено его имя – __name__ . Если оно равно „__main__“, это означает, что модуль запущен самостоятельно пользователем, и мы можем выполнить соответствующие действия.

1.4. Создание собственных модулей¶

Создать собственный модуль очень легко. Да вы всё время делали это! Ведь каждая про- грамма на Python также является и модулем. Необходимо лишь убедиться, что у неё уста- новлено расширение .py. Следующий пример объяснит это.

# mymodule.py def sayhi(): print('Привет! Это говорит мой модуль.') __version__ = '0.1' 

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

# mymodule_demo.py import mymodule mymodule.sayhi() print ('Версия', mymodule.__version__) 

Обратите внимание, что мы используем всё то же обозначение точкой для до- ступа к элементам модуля. Python повсеместно использует одно и то же обо- значение точкой, придавая ему таким образом характерный «Python-овый» вид и не вынуждая нас изучать всё новые и новые способы делать что-либо.

Вот версия, использующая синтаксис from..import

# mymodule_demo2.py from mymodule import sayhi, __version__ sayhi() print('Версия', __version__) 

Обратите внимание, что если в модуле, импортирующем данный модуль, уже было объ- явлено имя __version__, возникнет конфликт. Это весьма вероятно, так как объявлять версию любого модуля при помощи этого имени – общепринятая практика. Поэтому всегда рекомендуется отдавать предпочтение оператору import, хотя это и сделает вашу программу немного длиннее.

Вы могли бы также использовать from mymodule import *

Это импортирует все публичные имена, такие как sayhi, но не импортирует __version__, потому что оно начинается с двойного подчёркивания

© Copyright 2020, Oleg Kishinskii Revision 87b11443 .

Versions latest Downloads pdf html epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Источник

py_compile — Compile Python source files¶

The py_compile module provides a function to generate a byte-code file from a source file, and another function used when the module source file is invoked as a script.

Though not often needed, this function can be useful when installing modules for shared use, especially if some of the users may not have permission to write the byte-code cache files in the directory containing the source code.

exception py_compile. PyCompileError ¶

Exception raised when an error occurs while attempting to compile the file.

py_compile. compile ( file , cfile = None , dfile = None , doraise = False , optimize = — 1 , invalidation_mode = PycInvalidationMode.TIMESTAMP , quiet = 0 ) ¶

Compile a source file to byte-code and write out the byte-code cache file. The source code is loaded from the file named file. The byte-code is written to cfile, which defaults to the PEP 3147/ PEP 488 path, ending in .pyc . For example, if file is /foo/bar/baz.py cfile will default to /foo/bar/__pycache__/baz.cpython-32.pyc for Python 3.2. If dfile is specified, it is used instead of file as the name of the source file from which source lines are obtained for display in exception tracebacks. If doraise is true, a PyCompileError is raised when an error is encountered while compiling file. If doraise is false (the default), an error string is written to sys.stderr , but no exception is raised. This function returns the path to byte-compiled file, i.e. whatever cfile value was used.

The doraise and quiet arguments determine how errors are handled while compiling file. If quiet is 0 or 1, and doraise is false, the default behaviour is enabled: an error string is written to sys.stderr , and the function returns None instead of a path. If doraise is true, a PyCompileError is raised instead. However if quiet is 2, no message is written, and doraise has no effect.

If the path that cfile becomes (either explicitly specified or computed) is a symlink or non-regular file, FileExistsError will be raised. This is to act as a warning that import will turn those paths into regular files if it is allowed to write byte-compiled files to those paths. This is a side-effect of import using file renaming to place the final byte-compiled file into place to prevent concurrent file writing issues.

optimize controls the optimization level and is passed to the built-in compile() function. The default of -1 selects the optimization level of the current interpreter.

invalidation_mode should be a member of the PycInvalidationMode enum and controls how the generated bytecode cache is invalidated at runtime. The default is PycInvalidationMode.CHECKED_HASH if the SOURCE_DATE_EPOCH environment variable is set, otherwise the default is PycInvalidationMode.TIMESTAMP .

Changed in version 3.2: Changed default value of cfile to be PEP 3147-compliant. Previous default was file + ‘c’ ( ‘o’ if optimization was enabled). Also added the optimize parameter.

Changed in version 3.4: Changed code to use importlib for the byte-code cache file writing. This means file creation/writing semantics now match what importlib does, e.g. permissions, write-and-move semantics, etc. Also added the caveat that FileExistsError is raised if cfile is a symlink or non-regular file.

Changed in version 3.7: The invalidation_mode parameter was added as specified in PEP 552. If the SOURCE_DATE_EPOCH environment variable is set, invalidation_mode will be forced to PycInvalidationMode.CHECKED_HASH .

Changed in version 3.7.2: The SOURCE_DATE_EPOCH environment variable no longer overrides the value of the invalidation_mode argument, and determines its default value instead.

Changed in version 3.8: The quiet parameter was added.

A enumeration of possible methods the interpreter can use to determine whether a bytecode file is up to date with a source file. The .pyc file indicates the desired invalidation mode in its header. See Cached bytecode invalidation for more information on how Python invalidates .pyc files at runtime.

The .pyc file includes the timestamp and size of the source file, which Python will compare against the metadata of the source file at runtime to determine if the .pyc file needs to be regenerated.

The .pyc file includes a hash of the source file content, which Python will compare against the source at runtime to determine if the .pyc file needs to be regenerated.

Like CHECKED_HASH , the .pyc file includes a hash of the source file content. However, Python will at runtime assume the .pyc file is up to date and not validate the .pyc against the source file at all.

This option is useful when the .pycs are kept up to date by some system external to Python like a build system.

Command-Line Interface¶

This module can be invoked as a script to compile several source files. The files named in filenames are compiled and the resulting bytecode is cached in the normal manner. This program does not search a directory structure to locate source files; it only compiles files named explicitly. The exit status is nonzero if one of the files could not be compiled.

Positional arguments are files to compile. If — is the only parameter, the list of files is taken from standard input.

Changed in version 3.2: Added support for — .

Changed in version 3.10: Added support for -q .

Utilities to compile all Python source files in a directory tree.

Источник

Что такое .pyc файлы в Python?

Одним из важных вопросов, с которыми сталкиваются новички в Python, является наличие .pyc файлов в директории исходного кода. Python является интерпретируемым языком, что означает, что он выполняет код построчно. Но при этом в каталогах исходного кода часто можно увидеть файлы с расширением .pyc, которые обозначаются как «скомпилированные файлы Python». Это может вызвать путаницу, ведь обычно компиляция ассоциируется с компилируемыми языками, такими как C или Java.

В случае Python, компиляция очень отличается от процесса компиляции в других языках. Python компилирует исходный код в байт-код для внутреннего использования, который затем интерпретируется виртуальной машиной Python. Этот байт-код сохраняется в .pyc файлах.

Этот процесс обычно происходит автоматически во время выполнения программы. Когда Python запускает файл .py, он сначала проверяет наличие соответствующего .pyc файла в той же директории. Если .pyc файл отсутствует или исходный код был изменен после создания .pyc файла, Python автоматически компилирует исходный код в байт-код и сохраняет его в .pyc файл.

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

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

Таким образом, несмотря на то что Python является интерпретируемым языком, он использует компиляцию в байт-код для увеличения эффективности своего выполнения.

Источник

Читайте также:  Time and date code in java
Оцените статью