Tạo script Python tự chạy độc lập bằng `uv`
(blog.dusktreader.dev)- Cách dùng
uvtrong script Python để tạo script tự chứa có thể chạy ngay mà không cần cài phụ thuộc trước - Đây là một cách tiếp cận thực dụng nảy sinh từ tình huống dùng script Python để kiểm thử API trong một dự án Go
Giới hạn của cách làm cũ
- Để chạy một script Python dùng các gói như
httpx,IPython,loguru, trước đây phải chọn một trong các cách sau- Cài trực tiếp gói vào Python hệ thống
- Tạo môi trường ảo rồi cài gói và chạy
- Cả hai cách đều phiền phức, có thể ảnh hưởng tới môi trường hệ thống, và khi chia sẻ cho người khác thì phần hướng dẫn thường trở nên dài dòng
Chạy script đơn giản hơn với uv
uvlà trình quản lý gói Python đồng thời là công cụ thay thế pip, cho phép chạy script Python trong môi trường thực thi cô lập- Có thể khai báo thông tin phụ thuộc ngay bên trong script thông qua chú thích
# /// script# /// script # dependencies = ["ipython", "httpx", "loguru"] # /// - Script có cấu hình như trên có thể chạy bằng lệnh sau:
uv run jam_users.py uvsẽ tự động tạo môi trường ảo tạm thời, cài các gói cần thiết, rồi chạy script trong một lần
Biến thành script có thể thực thi trực tiếp
- Có thể làm cho script chạy được như script Python thông thường bằng
#!/usr/bin/env python, nhưng cách này không nhận biết chú thích script củauv - Thay vào đó, có thể giải quyết bằng cách đặt trực tiếp lệnh
uvtrong shebang như sau#!/usr/bin/env -S uv run --script # /// script # dependencies = ["ipython", "httpx", "loguru"] # /// - Với cách này, sau khi
chmod +xcó thể chạy trực tiếp, và trên các hệ Unix khác cũng sẽ hoạt động nguyên trạng miễn là cóuv:./jam_users.py
Ưu điểm và mức độ ứng dụng
- Cách làm với
uvđặc biệt hữu ích khi cần gửi script cho người khác - Không cần thiết lập trước phức tạp mà vẫn tự động có đủ gói và môi trường cần thiết
- Không làm bẩn Python hệ thống hay môi trường global
- Chỉ với một script là giải quyết được cả việc chạy lẫn quản lý phụ thuộc
Tác giả cho biết trước đây từng gặp cảnh phần hướng dẫn cài đặt trở nên rắc rối khi gửi script Python cho người khác, nhưng giờ có thể giải quyết vấn đề này một cách đơn giản với
uv
- Không chỉ phù hợp cho các script kiểm thử nhỏ mà còn hiệu quả cả với script tự động hóa dùng trong công việc thực tế
Chưa có bình luận nào.