Tệp PYC là tệp đầu ra được biên dịch được tạo từ mã nguồn được viết bằng ngôn ngữ lập trình Python. Khi tệp PY được chạy bằng trình thông dịch Python, nó sẽ được chuyển thành mã byte để thực thi. Đồng thời, mã byte đã biên dịch cũng được lưu dưới dạng. pyc để sử dụng lại từ bộ đệm sau này nếu có
Cấu trúc của định dạng tệp PYC
Các tệp PYC ở dạng mã byte và thông số kỹ thuật định dạng tệp của chúng không có sẵn công khai. Tuy nhiên, điều tra của một số nguồn cho thấy rằng bao gồm
Tệp pyc trong Python là gì?
Bất cứ khi nào bạn chạy mã Python, có hai bước chính liên quan
- Mã [từ. py] được biên dịch thành mã byte và lưu dưới dạng. tập tin pyc
- Mã byte từ tệp này được diễn giải
Python được gọi là ngôn ngữ lập trình giải thích mã Byte
Toàn bộ quá trình này diễn ra ở chế độ nền nên bạn không nhìn thấy. tập tin pyc
Đây là trường hợp thông thường khi bạn chỉ cần thực thi bất kỳ chương trình Python nào
Python biên dịch. py và lưu dưới dạng. pyc để nó có thể tham chiếu chúng trong các lần gọi tiếp theo. Các. pyc chứa mã byte đã biên dịch của các tệp nguồn Python. Các. pyc chứa mã byte được biên dịch của tệp nguồn Python, đây là mã mà trình thông dịch Python biên dịch nguồn thành. Mã này sau đó được thực thi bởi máy ảo của Python. Không có hại gì trong việc xóa chúng [. pyc], nhưng chúng sẽ tiết kiệm thời gian biên dịch nếu bạn đang xử lý nhiều
Python là ngôn ngữ được thông dịch, trái ngược với ngôn ngữ được biên dịch, mặc dù sự khác biệt có thể không rõ ràng do có trình biên dịch mã byte. Biên dịch thường có nghĩa là chuyển đổi sang mã máy, đây là thứ chạy nhanh nhất. Nhưng các phiên dịch viên lấy văn bản có thể đọc được của con người và thực thi nó. Họ có thể làm điều này với giai đoạn trung gian
Ví dụ: Khi bạn chạy myprog. py, thì trình thông dịch python trước tiên sẽ xem liệu có bất kỳ tệp 'myprog. pyc' [là phiên bản biên dịch mã byte của 'myprog. py'] tồn tại và nếu nó mới hơn 'myprog. py'. Nếu vậy, trình thông dịch chạy nó. Nếu nó không tồn tại, hoặc 'myprog. py' mới hơn nó [có nghĩa là bạn đã thay đổi tệp nguồn], trước tiên, trình thông dịch sẽ biên dịch 'myprog. py' thành 'myprog. pyc'
Có một ngoại lệ đối với ví dụ trên. Nếu bạn đặt '#. /usr/bin/env python' trên dòng đầu tiên của 'myprog. py', làm cho nó có thể thực thi được rồi chạy 'myprog. py' của chính nó
Khi nào. tập tin pyc được tạo?
Chúng tôi nhập các mô-đun trong chương trình của mình. Nếu bạn nhập mô-đun lần đầu tiên, Python sẽ biên dịch mã mô-đun và tạo tệp .pyc
. Nó không là gì ngoài tệp mã byte
Trong một trường hợp khác, nếu có bất kỳ thay đổi nào trong mã, python sẽ biên dịch mã và lưu dưới dạng mã byte [tệp ____1_______] trước khi chạy tập lệnh python
Các. pyc được tạo trong cùng một thư mục nơi tệp. tập tin py tồn tại
Đây là tất cả những cách thông thường, Python biên dịch và tạo. tập tin pyc
Tại sao biên dịch. py đến. pyc không xảy ra?
Trong một số trường hợp nhất định, Python không tạo tệp .pyc
Điều này có thể xảy ra trong trường hợp bạn không có quyền ghi đối với thư mục mà bạn đang biên dịch mã. Điều này cũng có thể xảy ra khi bạn không có đủ dung lượng để lưu trữ mã byte [tệp _______1_______]
Trong trường hợp này, nếu bạn đang chạy mã Python, mã này có thể chạy mã byte [cũ] .pyc
hiện có. Đây là hành vi tồi tệ nhất để theo dõi
Tôi vẫn nhớ khi tôi đối mặt với vấn đề này. Tôi đang cập nhật mã của mình trong tập lệnh python, nhưng khi tôi chạy mã, tôi rất ngạc nhiên khi không thấy bất kỳ thay đổi nào ở đầu ra ngay cả sau khi thực hiện các thay đổi trong tập lệnh Python
Và đây là một cách để thoát khỏi nó
Chuyển đổi py thành pyc trong Python bằng cách Biên dịch mà không cần Thực thi
Vì vậy, hãy xem làm thế nào để tạo một. pyc chỉ bằng một lệnh đơn giản
Đối với điều này, bạn có thể sử dụng hai mô-đun để biên dịch tập lệnh Python- mô-đun py_compile
và compileall
Phương pháp 1. sử dụng mô-đun py_compile
Nhập py_compile
trong mã python của bạn. Có một chức năng được gọi là compile[]
. Truyền tên tệp Python mà bạn muốn biên dịch làm đối số. Nó sẽ chuyển đổi tập lệnh Python thành mã byte [tệp có phần mở rộng tệp _____1_______0]
.pyc
1.pyc
2.pyc
3.pyc
4.pyc
5
Thao tác này sẽ biên dịch tệp .pyc
6 và lưu mã byte đã biên dịch trong tệp .pyc
7. Python lưu trữ mã byte trong cùng thư mục nơi tệp .pyc
6 tồn tại
Phương pháp 2. sử dụng biên dịch tất cả các mô-đun
Đôi khi bạn có thể cần biên dịch tất cả tập lệnh python trong một thư mục nhất định. Thế thì cách này hay hơn là biên dịch độc lập từng file
Trong trường hợp đó, hãy chạy lệnh sau trong một thư mục nhất định
python -m compileall
Nó sẽ biên dịch tất cả các tệp trong thư mục hiện tại
Nếu bạn không cung cấp bất kỳ thư mục nào trong lệnh, nó sẽ biên dịch tất cả tập lệnh python có trong sys. đường dẫn