2012-01-11 28 views

Trả lời

343
  1. .py: Đây thường là mã nguồn đầu vào bạn đã viết.
  2. .pyc: Đây là bytecode được biên dịch. Nếu bạn nhập một mô-đun, python sẽ xây dựng một tệp tin *.pyc chứa mã byte để thực hiện nhập lại sau này dễ dàng hơn (và nhanh hơn).
  3. .pyo: Đây là tệp *.pyc đã được tạo trong khi tối ưu hóa (-O) đã được bật.
  4. .pyd: Về cơ bản đây là tệp dll cửa sổ. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Ngoài ra đối với một số thảo luận thêm về .pyc vs .pyo, hãy xem tại địa chỉ: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (Tôi đã sao chép một phần quan trọng dưới đây)

  • 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 câu lệnh khẳng định. Khi -O được sử dụng, tất cả bytecode đượ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 bytecode được tối ưu hóa.
  • Chuyển hai cờ -O tới trình thông dịch Python (-OO) sẽ làm cho trình biên dịch bytecode thực hiện tối ưu hóa có thể trong một số trường hợp hiếm hoi dẫn đến các chương trình bị hỏng hóc. Hiện tại, chỉ 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 những tính năng này, bạn chỉ nên sử dụng tùy chọn này nếu bạn biết mình đang làm gì.
  • Chương trình không chạy nhanh hơn khi được đọc từ tệp ‘.pyc’ ​​hoặc ‘.pyo’ hơn khi đượ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 độ tải chúng.
  • Khi tập lệnh được chạy bằng cách đặt tê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 xuống bằng cách di chuyển hầu hết mã của nó sang một mô-đun và có một kịch bản khởi động nhỏ để nhập khẩu 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.
+2

có các tập tin dll được tạo ra từ kịch bản python hoặc c/C++ kịch bản? –

+1

@yankitwizzy: Vâng. Chúng phải đượ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. –

+0

"Trình tối ưu hóa hiện không giúp được gì nhiều, nó chỉ loại bỏ các câu lệnh khẳng định." Bạn có chắc về điều này? Hãy thử '' 'def f (x): khẳng định (x ** 5 == x * x * x * x * x); trả lại x; thời gian nhập; in (timeit.repeat ("cho x trong phạm vi (100): f (x)", "từ __main__ nhập f", number = 10000)); '' ' –

155

py - kịch bản Regular
.py3 - (hiếm khi được sử dụng) Python3 kịch bản. Python3 kịch bản thường kết thúc với "py" không" .py3" , nhưng tôi đã thấy rằng một vài lần
pyc - biên soạn kịch bản (bytecode)
.pyo - tối ưu hóa tập tin PYC (Tính đến Python3. 5, Python sẽ chỉ sử dụng pyc thay vì pyo và pyc)
.pyw - Tập lệnh Python cho Windows. Nó được thực hiện với pythonw.exe
.pyx - Cython src được chuyển đổi sang C/C++
.pyd - Python script thực hiện như Windows DLL
.pxd - Cython kịch bản tương đương với C/C++ tiêu đề
.pxi - MyPy còn sơ khai
.pyi - tập Stub (PEP 484)
.pyz - Python script lưu trữ (PEP 441); đây là một tập lệnh chứa các tập lệnh Python nén (ZIP) ở dạng nhị phân sau tiêu đề tập lệnh Python chuẩn
.pywz - Lưu trữ tập lệnh Python cho MS-Windows (PEP 441); đây là một tập lệnh chứa các tập lệnh Python nén (ZIP) ở dạng nhị phân sau tiêu đề tập lệnh Python 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 ".

Một danh sách lớn hơn thêm Python tập tin mở rộng (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 phải là nguồn Python khá được chuyển đổi thành C, mà đúng hơn là mã nguồn Cython (nghĩa là: chờ chuyển đổi thành C) –

+3

Danh sách tuyệt vời, hãy nhớ nếu tôi mượn nó để thuyết trình Tôi có tại FreeCodeCamp? –

+2

@DwightSpencer, chắc chắn rồi. –

Các vấn đề liên quan