Was bedeuten diese Python-Dateierweiterungen?
- .pyc
- .pyd
- .pyo
Was sind die Unterschiede zwischen ihnen und wie werden sie aus einer * .py-Datei generiert?
Was bedeuten diese Python-Dateierweiterungen?
Was sind die Unterschiede zwischen ihnen und wie werden sie aus einer * .py-Datei generiert?
Antworten:
.py
: Dies ist normalerweise der eingegebene Quellcode, den Sie geschrieben haben..pyc
: Dies ist der kompilierte Bytecode. Wenn Sie ein Modul importieren, erstellt Python eine *.pyc
Datei, die den Bytecode enthält, um den späteren Import einfacher (und schneller) zu machen..pyo
: Dies war ein Dateiformat, das vor Python 3.5 für *.pyc
Dateien verwendet wurde, die mit dem -O
Flag optimizations ( ) erstellt wurden. (siehe Hinweis unten).pyd
: Dies ist im Grunde eine Windows-DLL-Datei. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllWeitere Informationen zu .pyc
vs .pyo
finden Sie unter: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (Ich habe den wichtigen Teil unten kopiert.)
- Wenn der Python-Interpreter mit dem Flag -O aufgerufen wird, wird optimierter Code generiert und in '.pyo'-Dateien gespeichert. Das Optimierungsprogramm hilft derzeit nicht viel. Es werden nur Assert-Anweisungen entfernt. Wenn -O verwendet wird, wird der gesamte Bytecode optimiert. .pyc-Dateien werden ignoriert und .py-Dateien werden zu optimiertem Bytecode kompiliert.
- Wenn Sie zwei -O-Flags an den Python-Interpreter (-OO) übergeben, führt der Bytecode-Compiler Optimierungen durch, die in einigen seltenen Fällen zu fehlerhaften Programmen führen können. Derzeit werden nur
__doc__
Zeichenfolgen aus dem Bytecode entfernt, was zu kompakteren '.pyo'-Dateien führt. Da einige Programme möglicherweise darauf angewiesen sind, dass diese verfügbar sind, sollten Sie diese Option nur verwenden, wenn Sie wissen, was Sie tun.- Ein Programm wird beim Lesen aus einer '.pyc'- oder' .pyo'-Datei nicht schneller ausgeführt als beim Lesen aus einer '.py'-Datei. Das einzige, was bei '.pyc'- oder' .pyo'-Dateien schneller ist, ist die Geschwindigkeit, mit der sie geladen werden.
- Wenn ein Skript ausgeführt wird, indem sein Name in der Befehlszeile angegeben wird, wird der Bytecode für das Skript niemals in eine '.pyc'- oder' .pyo'-Datei geschrieben. Daher kann die Startzeit eines Skripts reduziert werden, indem der größte Teil seines Codes in ein Modul verschoben wird und ein kleines Bootstrap-Skript vorhanden ist, das dieses Modul importiert. Es ist auch möglich, eine '.pyc'- oder' .pyo'-Datei direkt in der Befehlszeile zu benennen.
Hinweis:
Am 15.09.2015 implementierte die Python 3.5-Version PEP-488 und eliminierte .pyo
Dateien. Dies bedeutet, dass .pyc
Dateien sowohl nicht optimierten als auch optimierten Bytecode darstellen.
def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
.pyo
Dateien. Selbst optimierter Bytecode endet dann mit der .pyc
Erweiterung Python 3.5.
sys.path
. Siehe site
Modul.Eine größere Liste zusätzlicher Python-Dateierweiterungen (meist selten und inoffiziell) finden Sie unter http://dcjtech.info/topic/python-file-extensions/
.pth
Dateien diskutieren .