Làm thế nào để biên dịch một tập tin python?


57

Tôi đã bắt đầu học python và tôi cũng là người dùng mới cho Ubuntu. Tôi cần biết cách biên dịch các .pytập tin. Tôi đã thử với lệnh

python "hello.py"

Những cách khác để biên dịch trăn là gì?

Câu trả lời:


58

Thêm vào câu trả lời của Bryan, nếu bạn chỉ đơn giản muốn biên dịch một tệp hoặc một loạt các tệp từ một thiết bị đầu cuối, py_compilemô-đun có thể được thực thi như một tập lệnh theo cách sau:

python -m py_compile fileA.py fileB.py fileC.py ...


9
Nếu bạn đang biên dịch vì bạn muốn tốc độ, bạn cũng có thể thêm -Ocờ, như thế python -O -m py_compile …, nó sẽ bật tính năng tối ưu hóa cơ bản. Nó chủ yếu loại bỏ các assertcâu lệnh và if __debug__mã, vì vậy đối với hầu hết các mã, nó không có hiệu lực. Xem man pythonvà trên mạng Tối ưu hóa Python làm gì? Để biết chi tiết.
Rory O'Kane

26

Cũng lưu ý rằng bạn không cần phải biên dịch một .pytệp để chạy nó. Python là ngôn ngữ được diễn giải và bạn có thể chạy các tập lệnh trực tiếp bằng cách sử dụng:

python hello.py

Hoặc làm cho tập lệnh của bạn có thể thực thi được bằng cách thêm #!/usr/bin/env pythonvào đầu tập lệnh, làm cho tập tin có thể thực thi được chmod +x hello.pyvà sau đó chạy:

./hello.py

Thực tế là Python biên dịch nội bộ .pytập lệnh của bạn thành .pyccác tệp mã byte vì lý do hiệu năng là một chi tiết triển khai và trừ khi bạn có lý do chính đáng để làm như vậy, hãy để python tự quyết định khi nào và nếu biên dịch.


Tôi bối rối không biết tại sao nó lại hoạt động. Không phải trình thông dịch Python cần có khả năng đọc tập lệnh để chạy nó? Nếu bạn chỉ cho phép thực thi ( chmod +x), trình thông dịch đọc tập lệnh như thế nào?
màu vàng01

@ yellow01: khi bạn thực thi tập lệnh chứa "shebang", tức là dòng đầu tiên bắt đầu bằng #!/path/to/interpreter, kernel thực sự thực thi bất cứ điều gì được khai báo ở đó, chuyển đường dẫn kịch bản thành đối số. Trong ví dụ của tôi, khi bạn chạy ./hello.pynhững gì thực sự được thực thi là /usr/bin/env python ./hello.py. Xem en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion

@ yellow01 bạn đúng rằng trình thông dịch sẽ cần quyền đọc khi bắt đầu thông qua quy trình MestreLion mô tả. Tuy nhiên, chmod +xcác khoản tài trợ thực thi và không chạm vào các quyền hiện có nên có lẽ nó có thể đọc được ngoài việc có thể thực thi được.
quang phổ

11

Kiểm tra liên kết này Biên dịch bằng Python

Ở giữa trang, nó nói về mô-đun py_compile có thể được nhập. Cú pháp như sau:

import py_compile

py_compile.compile("file.py")

Phương pháp biên dịch này sẽ không thực thi mô-đun giống như chạy python file.py.

Ngoài ra còn có một phương thức biên dịch toàn bộ cây thư mục nhưng tôi sẽ cho phép bạn kiểm tra liên kết để xem cách nó được thực thi.

Hi vọng điêu nay co ich.



4

Bạn có thể biên dịch tập lệnh Python thành mã nhị phân bằng nhiều phương thức khác nhau, nhưng tôi đã phát hiện ra rằng sử dụng Nuitka hiệu quả hơn.

Nuitka là trình biên dịch Python-to-C ++, hỗ trợ hầu hết tất cả các phiên bản của python.

Cú pháp lệnh dễ như

nuitka hello.py

Goto http://nuitka.net/doc/user-manual.html để biết thêm thông tin.


6
Hiệu quả hơn thế nào? Tại sao mọi người muốn sử dụng nó?
muru

nuitka thực sự rất hữu ích - ví dụ, nó cho phép bạn gửi các chương trình Python đến các máy tính không cài đặt Python. Nhưng khi nuitka biên dịch các chương trình Python thành mã máy C ++, bạn có thể phá vỡ điều đó.
dùng258532
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.