Trong bài viết này, chúng ta sẽ tìm hiểu về các loại tệp Python .pyc, .pyd và .pyo và cách chúng được sử dụng để lưu trữ mã bytecode được sử dụng bởi các chương trình Python khác nhau.
Mục lục
Trình tự giới thiệu
Bạn đã từng làm việc với các tệp .py chứa mã Python, nhưng bạn cũng muốn biết về các loại tệp khác này và chúng được sử dụng như thế nào. Để hiểu điều này, chúng ta sẽ xem xét cách Python chuyển đổi mã mà bạn viết thành một cấu trúc mà máy tính có thể thực thi trực tiếp.
Python cung cấp một trình thông dịch có thể được sử dụng như một REPL (read-eval-print-loop), một cách tương tác trên dòng lệnh. Ngoài ra, bạn có thể gọi Python bằng cách sử dụng các tập lệnh chứa mã Python. Trong cả hai trường hợp, trình thông dịch sẽ phân tích dữ liệu đầu vào và sau đó biên dịch chúng thành mã bytecode (tương đương lệnh máy cấp thấp), sau đó được thực thi bởi máy ảo Python.
Tuy nhiên, máy ảo Python khác biệt so với các máy ảo khác như máy ảo Java hoặc máy ảo Erlang trong việc giao tiếp với hệ điều hành và phần cứng để thực thi các lệnh.
Các loại tệp .pyc, .pyo và .pyd
Khi bạn gặp các tệp .pyc, .pyo và .pyd, hãy nhớ rằng chúng là các tệp được tạo ra bởi trình thông dịch Python khi chuyển đổi mã thành mã bytecode. Việc biên dịch mã nguồn Python thành mã bytecode là một bước trung gian cần thiết trong quá trình chuyển đổi các lệnh từ ngôn ngữ có thể đọc được bởi con người sang các lệnh máy mà hệ điều hành có thể thực thi.
Tệp .pyc
Đầu tiên, hãy xem xét loại tệp .pyc. Các tệp thuộc loại này được trình thông dịch Python tự động tạo khi bạn nhập một mô-đun, giúp tăng tốc độ nhập mô-đun đó trong tương lai. Do đó, các tệp này chỉ được tạo từ tệp .py nếu nó được nhập bởi một tệp hoặc mô-đun .py khác.
Giả sử chúng ta có một mô-đun Python ví dụ, chẳng hạn math_helpers.py, mô-đun này tính toán giai thừa. Khi chúng ta chỉ chạy mô-đun này từ dòng lệnh bằng lệnh python math_helpers.py, không có tệp .pyc nào được tạo ra. Nhưng khi chúng ta nhập nó vào một mô-đun khác, như được hiển thị trong ví dụ, mô-đun tính toán nhập mô-đun math_helpers, và trình thông dịch sẽ tự động tạo tệp bytecode cho chúng ta.
Tệp .pyo
Tệp .pyo cũng được tạo ra bởi trình thông dịch khi một mô-đun được nhập. Tuy nhiên, tệp .pyo được tạo ra khi trình tối ưu hóa được bật.
Trình tối ưu hóa có thể được bật bằng cách thêm cờ “-O” khi chúng ta gọi trình thông dịch Python. Bằng cách này, chúng ta có thể tạo ra các tệp bytecode nhỏ hơn so với khi không sử dụng trình tối ưu hóa. Trình tối ưu hóa sẽ xóa các câu lệnh không cần thiết khỏi mã bytecode của bạn.
Tệp .pyd
Loại tệp thứ ba, .pyd, là đặc biệt cho hệ điều hành Windows. Trong hệ sinh thái Windows, tệp .pyd là một thư viện chứa mã Python có thể được gọi và sử dụng bởi các ứng dụng Python khác. Nó được đóng gói dưới dạng thư viện liên kết động để cung cấp cho các chương trình Python khác.
Kết luận
Mặc dù có những điểm tương đồng, nhưng các tệp .pyc, .pyo và .pyd cũng có những khác biệt đáng kể. .pyc và .pyo chứa mã bytecode của Python, nhưng .pyo nhỏ hơn nhờ các tối ưu hóa từ trình thông dịch. .pyd, trái ngược, là một thư viện liên kết động dành riêng cho nền tảng Windows.
Mong rằng bài viết này đã giúp bạn hiểu rõ hơn về sự khác biệt giữa các loại tệp này trong Python.
Nguồn: Differences between .pyc, .pyd, and .pyo Python Files