Phần mở rộng tệp python, .pyc .pyd .pyo là viết tắt của từ gì?


435

Những phần mở rộng tập tin python có nghĩa là gì?

  • .pyc
  • .pyd
  • .pyo

Sự khác biệt giữa chúng và cách chúng được tạo từ tệp * .py là gì?

Câu trả lời:


480
  1. .py: Đây thường là mã nguồn đầu vào mà bạn đã viết.
  2. .pyc: Đây là mã byte được biên dịch. Nếu bạn nhập một mô-đun, python sẽ xây dựng một *.pyctệp có chứa mã byte để làm cho việc nhập lại nó sau này dễ dàng hơn (và nhanh hơn).
  3. .pyo: Đây là định dạng tệp được sử dụng trước Python 3.5 cho *.pyccác tệp được tạo bằng -Ocờ tối ưu hóa ( ). (xem ghi chú bên dưới)
  4. .pyd: Đây cơ bản là một tập tin dll windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Ngoài ra để biết thêm về thảo luận về .pycvs .pyo, hãy xem: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (Tôi đã sao chép phần quan trọng bên dưới)

  • Khi trình thông dịch Python được gọi với cờ -O, mã được tối ưu hóa được tạo và lưu trữ trong các tệp '.pyo'. Trình tối ưu hóa hiện không giúp được gì nhiều; nó chỉ loại bỏ các tuyên bố khẳng định. Khi -O được sử dụng, tất cả mã byte được tối ưu hóa; Các tệp .pyc bị bỏ qua và các tệp .py được biên dịch thành mã byte được tối ưu hóa.
  • Việc chuyển hai cờ -O cho trình thông dịch Python (-OO) sẽ khiến trình biên dịch mã byte thực hiện tối ưu hóa trong một số trường hợp hiếm hoi dẫn đến các chương trình bị hỏng. Hiện tại chỉ có các __doc__chuỗi được xóa khỏi mã byte, dẫn đến các tệp '.pyo' nhỏ gọn hơn. Vì một số chương trình có thể dựa vào việc có sẵn những thứ này, bạn chỉ nên sử dụng tùy chọn này nếu bạn biết bạn đang làm gì.
  • Một chương trình không chạy nhanh hơn khi nó được đọc từ tệp '.pyc' hoặc '.pyo' so với khi nó được đọc từ tệp '.py'; điều duy nhất nhanh hơn về các tệp '.pyc' hoặc '.pyo' là tốc độ chúng được tải.
  • Khi tập lệnh được chạy bằng cách đặt tên của nó trên dòng lệnh, mã byte cho tập lệnh không bao giờ được ghi vào tệp '.pyc' hoặc '.pyo'. Do đó, thời gian khởi động của một tập lệnh có thể được giảm bằng cách di chuyển hầu hết mã của nó sang một mô-đun và có một tập lệnh bootstrap nhỏ nhập mô-đun đó. Cũng có thể đặt tên tệp '.pyc' hoặc '.pyo' trực tiếp trên dòng lệnh.

Ghi chú:

Vào ngày 2015-09-15, phiên bản Python 3.5 đã triển khai PEP-488 và loại bỏ .pyocác tệp. Điều này có nghĩa là .pyccác tệp đại diện cho cả mã byte không được tối ưu hóa và được tối ưu hóa.


2
Các tập tin dll được tạo từ các tập lệnh python hoặc tập lệnh c / c ++?
Yanki Twizzy

1
@yankitwizzy: Vâng. Chúng nên được tạo từ mã C / C ++. Tệp phải ở trong mã máy, vì vậy nó không thể trực tiếp từ python.
Bill Lynch

"Trình tối ưu hóa hiện không giúp được gì nhiều; nó chỉ loại bỏ các tuyên bố khẳng định." Bạn có chắc về điều này? Hãy thử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));
Jorge Leitao

@ JCLeitão: Tôi có chắc chắn về điều gì không? Bạn có thể giải thích những gì bạn nghĩ rằng ví dụ của bạn cho thấy thay vì chỉ ném mã vào một bình luận.
Bill Lynch

9
Lưu ý rằng trong Python 3.5 , PEP 488 được triển khai, không có khái niệm về .pyotệp. Ngay cả mã byte được tối ưu hóa cũng kết thúc bằng .pycphần mở rộng Python 3.5, sau đó.
Michael Currie

228
  • .py - Kịch bản thông thường
  • .py3 - (hiếm khi được sử dụng) tập lệnh Python3. Các tập lệnh Python3 thường kết thúc bằng ".py" chứ không phải ".py3", nhưng tôi đã thấy điều đó một vài lần
  • .pyc - tập lệnh được biên dịch (mã byte)
  • .pyo - tệp pyc được tối ưu hóa (Kể từ Python3.5, Python sẽ chỉ sử dụng pyc thay vì pyo và pyc)
  • .pyw - Tập lệnh Python để chạy trong chế độ Windowed, không có giao diện điều khiển; thực thi với pythonw.exe
  • .pyx - Cython src được chuyển đổi thành C / C ++
  • .pyd - Tập lệnh Python được tạo dưới dạng Windows DLL
  • .pxd - Tập lệnh Cython tương đương với tiêu đề C / C ++
  • .pxi - cuống MyPy
  • .pyi - Tệp sơ khai ( PEP 484 )
  • .pyz - Lưu trữ tập lệnh Python ( PEP 441 ); đây là tập lệnh chứa tập lệnh Python nén (ZIP) ở dạng nhị phân sau tiêu đề tập lệnh Python tiêu chuẩn
  • .pywz - Lưu trữ tập lệnh Python cho MS-Windows ( PEP 441 ); đây là tập lệnh chứa tập lệnh Python nén (ZIP) ở dạng nhị phân sau tiêu đề tập lệnh Python tiêu chuẩn
  • .py [cod] - ký hiệu ký tự đại diện trong ".gitignore" có nghĩa là tệp có thể là ".pyc", ".pyo" hoặc ".pyd".
  • .pth - một tệp cấu hình đường dẫn; nội dung của nó là các mục bổ sung (một trên mỗi dòng) sẽ được thêm vào sys.path. Xem sitemô-đun.

Một danh sách lớn hơn các phần mở rộng tệp Python bổ sung (chủ yếu là hiếm và không chính thức) có thể được tìm thấy tại http://dcjtech.info/topic/python-file-extensions/


11
Cần lưu ý rằng tệp «.pyx» không hoàn toàn là nguồn Python được chuyển đổi thành C, mà là mã nguồn Cython (nghĩa là: đang chờ để được chuyển đổi thành C)
Fred Osterrath

"Tôi" thể hiện điều gì trong phần mở rộng PYI? "Bao gồm" / "Thực hiện" / "Giao diện"?
ChrisFreeman

1
.pyw có nghĩa là tập lệnh PYthon tạo ra Window chứ không phải Python 4 Windows. .pyw có thể được thực thi trong * nix
Kotauskas

1
Nói chung .pyw là một tập lệnh để chạy trong chế độ Windowed, tức là không có đầu ra giao diện điều khiển. Như @VladislavToncharov nói rằng họ có thể chạy trên hầu hết các nền tảng hỗ trợ python nếu nó được cài đặt .
Steve Barnes

1
Câu trả lời này nên thảo luận về .pthcác tập tin.
wim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.