Chạy các kịch bản Python mà không gọi rõ ràng `python`


39

Tôi đang sử dụng Debian Linux.

Tôi đã tự hỏi nếu có một cách để cấu hình để chạy tất cả các tập lệnh Python trong thiết bị đầu cuối bằng cách gõ script.py(thay vì python script.py).

Câu trả lời:


58

Có hai điều bạn cần làm:

  • Hãy chắc chắn rằng tập tin có thể thực thi được: chmod +x script.py
  • Sử dụng một shebang để cho kernel biết trình thông dịch nào sẽ sử dụng. Dòng trên cùng của tập lệnh nên đọc:

    #!/usr/bin/python
    

    Điều này giả định rằng tập lệnh của bạn sẽ chạy với python mặc định. Nếu bạn cần một phiên bản cụ thể, chỉ cần xác định trong shebang:

    #!/usr/bin/python2.7
    

Bây giờ bạn có thể gõ:

    ./script.py

nếu tập lệnh nằm trong thư mục hiện tại của bạn, hoặc:

    script.py

nếu vị trí của tập lệnh xảy ra trong PATH của bạn, hoặc:

    path/to/script.py

nếu không thì.


32
Nói chung, đó là một ý tưởng tốt hơn để sử dụng #!/usr/bin/env python, trong trường hợp người dùng có một bản dựng python cục bộ (ví dụ: trong /usr/local/bin) mà họ muốn chạy tập lệnh với.
sapi

3
@sapi Không theo Debian, ít nhất là trong chính sách phát triển của họ. Nếu bạn đang viết kịch bản của riêng bạn, bạn có thể chấp nhận rủi ro tất nhiên, tốt hơn hết là nên nói rõ ràng. Nếu bạn muốn một địa phương, chọn nó trong shebang.
Paul

3
Không phải bashlà đọc tệp khi thực thi ...
unperson325680

@progo Điều này là đúng - lưu ý rằng nếu bạn thấy câu trả lời mà bạn nghĩ sẽ có lợi từ cải tiến, hãy tiếp tục và chỉnh sửa nó, những cải tiến luôn được chào đón
Paul

Và bạn sẽ phải làm ./script.py, không phảiscript.py
Paul Draper

33

Trong linux, bạn chỉ cần sử dụng hashbang (còn gọi là shebang). Thêm dòng

#!/usr/bin/python

nếu bạn muốn thực thi trình thông dịch python mặc định.

#!/path/to/python[x.x]

để sử dụng một số phiên bản cụ thể, hoặc

#!/usr/bin/env python

Nếu bạn muốn môi trường tìm python cho bạn.

Bạn cũng sẽ được yêu cầu thực hiện kịch bản

chmod +x script[.py] 

2

Sử dụng:

#!/usr/bin/env python

Điều này sẽ đảm bảo rằng con trăn mà người dùng mong đợi được sử dụng sẽ là con chạy kịch bản. Điều này đặc biệt quan trọng nếu người dùng đang sử dụng virtualenv để có một phiên bản cụ thể của python trong một môi trường nhất định.


0

Sử dụng một dòng shebang ở đầu tập lệnh của bạn như dưới đây:

! / usr / bin / trăn

Cập nhật phiên bản python phù hợp mà bạn muốn thực thi tập lệnh. ví dụ: đối với python 3.6, nó

! /usr/bin/python3.6

cho thông dịch viên mặc định

! / usr / bin / trăn

Lưu ý: Đảm bảo tập lệnh có quyền thực thi.

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.