2012-04-03 39 views
6

Có cách nào để chạy tập lệnh python từ một trình bao mà không cần viết đường dẫn đầy đủ của nó không?Làm thế nào để chạy một kịch bản Python một cách dễ dàng mà không chỉ định đường dẫn đầy đủ của nó

Ví dụ trong Linux, tôi muốn khi trong thư mục chính của tôi

cd ~ 

để có thể chạy một kịch bản python gọi run.py đó là trong tiếng nói, ~/dài/path/to/chạy py, nhưng tôi muốn chạy nó bằng cách đơn giản gõ

python run.py 

thay vì

python ~/long/path/to/run.py 

tôi hy vọng đối với một số loại se danh sách đường dẫn vòm có chứa một số thư mục giống như biến PATH, do đó runthon python chạy run.py đầu tiên nó gặp trong một trong các thư mục.

Tôi đã xem xét việc chuyển run.py thành một tệp thực thi và thêm thư mục của nó vào biến hệ thống PATH, nhưng không thể tìm thấy cách thức thực hiện một tập lệnh python có thể thực thi được.

EDIT

Một năm sau sau khi yêu cầu nó, tôi là một chút ít noob, và tôi thấy rằng câu hỏi của tôi là không phải là rất rõ ràng và không có ý nghĩa nhiều, vì vậy sau khi một câu hỏi upvote tôi sẽ làm rõ một số điều.

1) Di động.

Khi tôi hỏi điều này, tôi đã nói di động. Tuy nhiên, phương tiện di động không rõ ràng trong trường hợp này, và tôi đã không nhấn mạnh nhiều đến nó.

  • các nền tảng: nên làm việc trên POSIX (Linux, hệ điều hành MacOS, vv) và Windows

  • điều này vẫn không có ý nghĩa nhiều từ cửa sổ sử dụng cmd.exe, và POSIX sử dụng sh, vì vậy mỗi người có thể chạy các lệnh với một cú pháp khác. Vì vậy, chúng ta hãy nói rằng điều di động nhất có thể sẽ là nạp cùng một đầu vào cho cả hai shcmd.exe, chạy tập lệnh python trong cả hai trường hợp. Trong trường hợp này, bạn có thể chạy cùng lệnh từ một hàm ANSI C system, sử dụng sh trên POSIX và cmd trên Windows. ANSI C là một trong số ít những thứ phổ biến đối với Windows và POSIX, câu hỏi có ý nghĩa trong trường hợp đó.

2) thực thi

Tiếp theo, các cụm từ turning run.py into an executable, không phải là rất rõ ràng. Bằng cách đó tôi đã nói về chiến lược Linux của chmod +x run.py, thêm một shebang #!/usr/bin/env python và thêm thư mục của nó hệ thống thêm ~/long/path/to/biến môi trường PATH. Nhưng sau đó điều này sẽ không làm việc cho các cửa sổ vì các cửa sổ không hỗ trợ một tệp siêu dữ liệu tệp thực thi như Linux và vì/usr/bin/env không nhất thiết tồn tại trong Windows.

3) mở rộng

Cuối cùng, trong đầu tôi, tôi đã hy vọng cho một giải pháp mà không xác định loại tập tin chạy, do đó, rằng nếu một ngày nào đó chúng tôi quyết định để làm cho nó, nói rằng, một file perl, không giao diện sẽ thay đổi.

Do đó, viết run.py sẽ không hợp lệ vì nó sẽ chỉ định loại tệp; nó sẽ được tốt hơn để có thể viết chỉ run

Trả lời

14

Nếu thư mục chứa run.py đang trên con đường tìm kiếm mô-đun (ví dụ, PYTHONPATH biến môi trường), bạn sẽ có thể chạy nó như thế này:

python -m run 

Dưới đây là tài liệu trên dòng -m lệnh tùy chọn:

-mmodule-name
kiếm sys.path cho mô đun được đặt tên và chạy tệp .py tương ứng dưới dạng tập lệnh.

+0

Cảm ơn FJ, đây là chính xác những gì tôi đang tìm kiếm, tôi cảm thấy rằng nó có hai ưu điểm so với '#!' cách tiếp cận: 2 –

+0

(cụ thể Xin lỗi, một nửa bình luận đã hoàn thành) ... Cảm ơn F.J, đây là những gì tôi đang tìm kiếm, tôi cảm thấy rằng nó có hai ưu điểm so với '#!' cách tiếp cận: 1) không lộn xộn script 2) không lộn xộn biến toàn cầu PATH, và sử dụng PYTHONPATH cụ thể hơn để thay thế. Nhược điểm là tất nhiên phải gõ "python -m" mọi lúc, chiếm không gian và tệ hơn, có thể có nghĩa là viết lại mã nếu bạn quyết định một ngày để biến đổi các kịch bản lệnh python thành, bash script. –

+0

Tôi đã thử python -m chạy nhưng nó không hoạt động ... Tôi chắc chắn rằng run.py là trong PYTHONPATH kể từ khi tôi có thể nhập nó và nó cho thấy khi tôi nhập khẩu sys; print sys.path ... Tôi có thiếu cái gì không? –

4

Bạn có thể làm cho một con trăn kịch bản thực thi bằng cách thêm

#!/usr/bin/env python 

đến đầu của tập tin, và làm cho nó thực thi với chmod +x.

+0

Cảm ơn alberge, tôi đã không chắc chắn điều này hoạt động trên cửa sổ, nhưng có vẻ như #!/Usr/bin/env python sẽ được coi là một bình luận, và cài đặt python tự động liên kết chạy file .py với trình thông dịch python. Điều này đặc biệt tuyệt vời nếu bạn đặt .py trong EXTPATH, vì vậy bạn có thể chạy các tệp python đơn giản bằng cách gõ "run" thay vì "run.py", có nghĩa là nếu bạn quyết định chuyển đổi các script python của bạn thành Perl, bạn sẽ không cần phải viết lại các cuộc gọi script. Nó sẽ là tuyệt vời nếu có một cách đơn giản để chạy các kịch bản trong Linux mà không cần viết phần mở rộng và không thêm #! ... –

+0

Điều này làm việc tuyệt vời với virtualenv – Henrik

0
  1. Make file python thực thi (như "alberge" đã nêu ở trên)
  2. Tạo một số thư mục và đặt thư mục này vào PATH của bạn biến
  3. Trong thư mục này, tạo ra các liên kết đến các kịch bản python của bạn
1

Trả lời sau khi chỉnh sửa làm rõ

Tôi thích như sau phương pháp tiếp cận được đề xuất bởi @ F.J. vì nó không yêu cầu người dùng chỉ định loại tệp. Xin lưu ý rằng điều này không được xác định trong câu hỏi gốc, do đó câu trả lời của anh cho câu hỏi ban đầu là chính xác.

Cho phép gọi tệp pytest.py để tránh xung đột với chương trình có thể có hiện tại run.

On POSIX (hệ điều hành MacOS, Linux) làm những gì @Petr nói, mà là dựa vào những gì @alberge nói:

  • chmod +x
  • thêm công việc #!/usr/bin/env python
  • tạo một thư mục và thêm nó vào con đường . vị trí thường lệ trên Linux là: ~/bin/cho một người sử dụng duy nhất, /usr/local/bin/ cho tất cả người dùng
  • liên kết tượng trưng (cp -s) các tập tin dưới PATH của bạn với basename pytest thay vì pytest.py

Trên cửa sổ:

  • tạo một thư mục và thêm nó vào PATH. AFAIK, không có nơi thông thường cho điều đó, vậy tại sao không phải C:\bin\~\bin\?
  • thêm .PY vào biến PATHEXT môi trường do đó, Windows sẽ nhận ra các file với phần mở rộng python như file Runnable mà không đòi hỏi bạn phải gõ phần mở rộng
  • file python
  • liên kết với các python.exe phiên dịch (Windows Explorer> nhấn chuột phải> kiểm tra "Luôn sử dụng chương trình đã chọn "). Có một tùy chọn trên trình cài đặt python thực hiện điều này cho bạn.
  • liên kết tượng trưng pytestvới phần mở rộng vào dir dưới PATH (sử dụng liên kết Shell Extension từ Windows Explorer hoặc mklink name dest từ cmd)

Bây giờ system("pytest"); nên làm việc trong cả hai hệ thống (sh dưới Linux, cmd trong môi trường Windows)

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