2011-09-27 24 views
42

Tôi có một số tập lệnh tiện ích nhỏ được viết bằng Python mà tôi muốn sử dụng được trên cả Windows và Linux. Tôi muốn tránh phải gọi một cách rõ ràng trình thông dịch Python. Có cách nào dễ dàng để trỏ ký hiệu shebang đến đúng vị trí trên cả Windows và Linux? Nếu không, có cách nào khác để cho phép yêu cầu ngầm của trình thông dịch Python trên cả Windows và Linux mà không phải sửa đổi kịch bản khi chuyển giữa các hệ điều hành?Ký hiệu Shebang: Kịch bản Python trên Windows và Linux?

Chỉnh sửa: Hỗ trợ shebang trên Windows được cung cấp Cygwin, nhưng tôi muốn sử dụng trình thông dịch Windows Python gốc trên Windows, chứ không phải trình Cygwin.

Chỉnh sửa # 2: Có vẻ như ký hiệu shebang sẽ ghi đè liên kết tệp trong thiết bị đầu cuối Cygwin. Tôi đoán tôi chỉ có thể gỡ bỏ cài đặt Cygwin Python và symlink/usr/bin/python thành Windows-native Python.

+6

Tôi không nghĩ rằng các cửa sổ có bất kỳ loại hỗ trợ công việc. Bạn có thể thử tạo một liên kết tệp với trình thông dịch python cho các tệp .py. –

+0

Theo dõi bình luận của Nic ODell: Bất cứ lúc nào tôi đã cài đặt Python trên một hộp Windows, quá trình cài đặt sẽ giúp bạn tạo liên kết tệp cho các tệp .py. Điều này đã luôn luôn được sử dụng trình cài đặt Python cho Windows từ trang python.org. – GreenMatt

+0

@eryksun Cảm ơn. –

Trả lời

0

Không phải với shebang ... nhưng bạn có thể thiết lập liên kết tệp, xem this SO question đề cập đến Perl và câu trả lời được liên kết cũng sẽ thích hợp vì có sự cố đã biết với Windows và chuyển hướng stdin/out ..

31

Trừ khi bạn đang sử dụng Cygwin, các cửa sổ không hỗ trợ shebang. Tuy nhiên, khi bạn cài đặt python, nó sẽ thêm vào liên kết tệp cho các tệp .py. Nếu bạn chỉ đặt tên kịch bản của bạn trên dòng lệnh, hoặc nhấp đúp vào nó trong cửa sổ thám hiểm, sau đó nó sẽ chạy qua python.

Điều tôi làm là bao gồm số #!/usr/bin/env python shebang trong tập lệnh của mình. Điều này cho phép hỗ trợ shebang trên Linux. Nếu bạn chạy nó trên một cửa sổ máy với python cài đặt, sau đó hiệp hội tập tin nên có, và nó sẽ chạy là tốt.

+4

Thật tuyệt khi bao gồm số phiên bản python. "python" không liên kết đến "python2.7" trong mọi bản phân phối. –

+0

@mid_kid đó là lý do tại sao tôi sử dụng env để lấy phiên bản python mà người dùng đã chỉ định làm mặc định của họ. –

+1

Quan điểm của tôi là không phải lúc nào cũng đúng. Đặc biệt là khi phân phối kịch bản của bạn. –

2

Cài đặt pywin32. Một trong những điều tốt đẹp là nó thiết lập các liên kết tập tin của * .py cho trình thông dịch python.

23

Đọc về số Python Launcher for Windows trong tài liệu, bước đầu được mô tả trong PEP 397. Nó cho phép bạn xác định cấu hình shebang tùy chỉnh trong ini (ví dụ: sử dụng pypy), nhưng ngoài hộp, bạn có thể sử dụng các shebang ảo chẳng hạn như #!/usr/bin/env python3 hoặc shebang với đường dẫn thực như #!C:\Python33\python.exe. Bạn cũng có thể thêm các tùy chọn dòng lệnh vào một shebang. Ví dụ, sau đây shebang thêm tùy chọn để vào chế độ tương tác sau khi kịch bản kết thúc: #!/usr/bin/python3 -i.

Python 3.3 liên kết các loại tệp tập lệnh .py (console) và .pyw (GUI) với các trình khởi chạy tên tương ứng, py.exe và pyw.exe, để bật hỗ trợ shebang cho các tập lệnh trên Windows. Các bệ phóng mới được cài đặt vào thư mục gốc của Windows (ví dụ: %SystemRoot%) khi cài đặt cho tất cả người dùng. Nếu không, bạn sẽ muốn thêm thư mục cài đặt vào PATH để sử dụng py.exe trong trình bao cmd. Sau đó, từ dòng lệnh, bạn có thể chạy py -2, py -3, py -2.6, py -3.3-32 (32-bit), v.v. Trình chạy thuận tiện khi được kết hợp với -m để chạy mô-đun dưới dạng tập lệnh, ví dụ: py -3 -m pip install.

Ngoài ra còn có một phiên bản của pylauncher có thể được cài đặt riêng rẽ nếu bạn chỉ sử dụng Python 2.

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