2013-04-17 26 views
5

Nếu tôi hiểu đúng, các tệp biên dịch Python là nền tảng chéo. Vậy tại sao hầu hết các thư viện được phát hành yêu cầu xây dựng và cài đặt?Tại sao thư viện python không được cung cấp dưới dạng pyc?

Đó có phải là sự lười biếng trên một phần của nhà phân phối không, hoặc tôi sai khi nói rằng họ có thể phân phối đơn giản các tệp pyc? Nếu đây không phải là trường hợp, làm cách nào để phân phối tệp tập lệnh python có thư viện làm tài khoản chính mà không yêu cầu người dùng xây dựng và cài đặt các thư viện?

+5

Và, đáng lưu ý là tăng hiệu suất duy nhất bạn nhận được bằng cách "biên dịch" là trong 'import' ban đầu. Nếu không, mọi thứ sẽ chạy với cùng tốc độ AFAIK. Nói cách khác, bạn sẽ không nhận thấy sự khác biệt về hiệu năng chạy từ 'pyc' hoặc' py'. – mgilson

Trả lời

7

Bởi vì định dạng của mã có thể thay đổi với mỗi bản phát hành Python (chính), trong khi mã nguồn ít nhất có thể tương thích. Định dạng cũng có thể khác nhau giữa hiện thực (trong đó có một số, hai nổi tiếng nhất là CPython and PyPy.

Xem this article để biết thêm thông tin về cấu trúc bên trong của file pyc.

4

Họ là nền tảng chéo, Nói cách khác, các phiên bản CPython khác nhau có thể gặp sự cố với một tệp .pyc và

Và nếu bạn xem các triển khai khác như PyPy, IronPython, Jython, v.v. , bạn sẽ không có bất kỳ may mắn nào với các tệp .pyc cả.

Bên cạnh đó, các tệp .pyc tương ứng với một tệp .py. Những gì bạn (có thể) có trong tâm trí là các thư viện bao gồm một phần được viết bằng C. Chúng phải được biên dịch thành các tệp phụ thuộc vào nền tảng (.pyd, .dll, .so, v.v.) để hoạt động. Vì không có nhiều nhà phát triển có tất cả các nền tảng được hỗ trợ, chúng cung cấp cho nó như là nguồn và để nó cho hệ thống của người dùng để biên dịch nó.

+0

Lưu ý ở phần cuối: Phân phối nhị phân các mô-đun mở rộng là tiêu chuẩn trên Windows, nơi hiếm khi có ai có trình biên dịch. – delnan

0

Quá trình tạo tệp .pyc từ tệp .py được thực hiện một cách minh bạch bởi trình thông dịch. Lý do một số trình cài đặt tạo ra chúng trong thời gian cài đặt hoàn toàn là tránh chúng phải được tạo lần đầu tiên tập lệnh được chạy - thường vì lý do tốc độ, nhưng cũng để .pyc có thể kết thúc trong một hệ thống toàn diện (không phải người dùng -writable) thư mục. Không giống như các ngôn ngữ biên soạn, hoặc thậm chí là các mô-đun Python được viết bằng C, nó là không phải yêu cầu kỹ thuật mà các tệp này tồn tại ngay từ đầu - nếu có, bạn sẽ không thể đặt trực tiếp các tập lệnh của mình vào python và yêu cầu chúng chạy mà không cần một bước biên dịch.

Bất kỳ thư viện nào yêu cầu nghiêm ngặt một bước xây dựng trước khi cài đặt chắc chắn có thành phần biên dịch thành mã gốc - chắc chắn không phải là nền tảng chéo. Đối với bất kỳ thư viện pure-python nào, luôn luôn đủ để đưa cây thư mục nguồn của mô-đun vào đâu đó trong PYTHONPATH của bạn, đã sao chép nó trực tiếp từ kho lưu trữ mà bạn đã tải xuống.

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