#!/usr/bin/env python3: Tại sao nó này quan trọng

Tôi tin rằng nhiều người khi bắt đầu làm việc với Python, đặc biệt là khi đọc code từ các dự án open-source, đều sẽ gặp dòng code trông như một comment ở đầu file: #!/usr/bin/env python3. Nhiều người có thể sẽ bỏ qua, hoặc copy-paste một cách máy móc mà không thực sự hiểu ý nghĩa của nó. Nhưng đây là một chi tiết nhỏ phân biệt một file script đơn thuần và command-line tool được viết đúng cách.

fb575efc-9eee-4ff9-9c19-f0df1fdaebcf

Shebang

Dòng #!... được gọi là shebang hoặc hashbang. Vai trò của nó rất đơn giản: chỉ thị cho hệ điều hành chủ yếu là Linux/macOS biết cần dùng interpreter nào để thực thi file này.

Hãy xét hai cách chạy một script Python tên là tool.py:

  1. python3 tool.py
  2. ./tool.py

Với cách thứ nhất, mọi người đã chỉ định rõ ràng rằng hãy dùng python3 để chạy file. Trong trường hợp này, dòng shebang hoàn toàn vô dụng.

Nhưng với cách thứ hai, mọi người đang yêu cầu hệ điều hành tự thực thi file. Lúc này, hệ điều hành sẽ đọc dòng đầu tiên để tìm shebang. Nếu không có, nó sẽ không biết phải làm gì và báo lỗi. Nếu có, nó sẽ dùng trình thông dịch được chỉ định để chạy script.

#!/usr/bin/env python3#!/usr/bin/python3

Tôi thấy đa số các script chuyên nghiệp lại dùng #!/usr/bin/env python3 thay vì chỉ định thẳng đường dẫn như #!/usr/bin/python3.

  • Cách 1: Đường dẫn tuyệt đối > #!/usr/bin/python3

    Cách này ép hệ điều hành phải tìm trình thông dịch Python 3 tại chính xác đường dẫn /usr/bin/python3. Vấn đề là gì? Nếu Python được cài ở một nơi khác (ví dụ /usr/local/bin/python3), hoặc quan trọng hơn, khi mọi người đang dùng virtual environment, đường dẫn này sẽ sai. Script sẽ không chạy được hoặc chạy sai phiên bản Python. Đây là cách làm thiếu tính di động và dễ gây error trong môi trường production.

  • Cách 2: Dùng env > #!/usr/bin/env python3

    Cách này không trỏ thẳng đến interpreter. Thay vào đó, nó gọi chương trình env, và yêu cầu env tìm python3 trong danh sách các biến môi trường PATH của người dùng hiện tại.

    Lợi ích thực tế: Cách này đảm bảo rằng script sẽ sử dụng đúng phiên bản python3 mà môi trường của người dùng đang được cấu hình để dùng. Nếu họ đã kích hoạt một virtual environment, nó sẽ tìm thấy Python của môi trường đó. Nếu họ có nhiều phiên bản Python, nó sẽ dùng phiên bản được ưu tiên trong PATH.

executable permission

Chỉ thêm dòng shebang là chưa đủ để chạy script theo kiểu ./tool.py. Mọi người cần phải cấp executable permission cho file đó.

Sử dụng lệnh sau trong terminal: chmod +x tool.py

Sau lệnh này, script của mọi người đã thực sự trở thành một tool có thể chạy trực tiếp từ dòng lệnh.

Vậy trên Windows thì sao?

Windows không sử dụng cơ chế shebang. Nó dựa vào phần mở rộng của file (ví dụ .py) để quyết định dùng chương trình nào để mở. Tuy nhiên, trong một môi trường làm việc đa nền tảng, việc thêm shebang vẫn là một thói quen tốt. Script của mọi người có thể cần chạy trên server Linux, trong một Docker container, hoặc qua WSL (Windows Subsystem for Linux). Việc thêm sẵn shebang đảm bảo nó luôn sẵn sàng để được thực thi đúng cách ở bất cứ đâu.

Dòng #!/usr/bin/env python3 không phải là một chi tiết thừa thãi. Nó là một đoan quan trọng, biến một file code đơn giản thành một tool linh hoạt và đáng tin cậy. Việc hiểu và sử dụng đúng cách thể hiện tư duy xây dựng phần mềm có tính di động, dễ dàng tích hợp vào các hệ thống tự động hóa.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận