Trong bài viết này tôi sẽ hướng dẫn bạn sử dụng PyInstaller.
Đây là công cụ được sử dụng rộng rãi nhất. Nó có thể đóng gói hầu hết các ứng dụng Python thành một tệp .exe duy nhất hoặc một thư mục chứa tất cả các tệp cần thiết.
PyInstaller khá dễ sử dụng và hỗ trợ nhiều nền tảng (Windows, macOS, Linux).
Cách hoạt động cơ bản
Các công cụ này hoạt động bằng cách:
Thu thập các dependency: Chúng sẽ quét mã Python của bạn để tìm tất cả các thư viện và mô-đun mà chương trình của bạn sử dụng.
Đóng gói vào một tệp: Sau đó, chúng sẽ đóng gói mã Python của bạn, trình thông dịch Python và tất cả các thư viện cần thiết vào một tệp thực thi (.exe) duy nhất hoặc một thư mục phân phối.
Ví dụ sử dụng PyInstaller (công cụ phổ biến nhất)
Giả sử bạn có một tệp Python đơn giản tên là hello.py như sau:
print("Chào mừng đến với chương trình Python đã được đóng gói!")
input("Nhấn Enter để thoát...")
Để biến nó thành .exe bằng PyInstaller, bạn sẽ làm theo các bước sau:
1. Cài đặt PyInstaller:
Mở Command Prompt hoặc Terminal và chạy lệnh:
pip install pyinstaller
2. Đóng gói chương trình:
Điều hướng đến thư mục chứa tệp hello.py trong Command Prompt hoặc Terminal và chạy lệnh:
pyinstaller hello.py
Lệnh này sẽ tạo ra một thư mục dist và một thư mục build trong cùng thư mục với tệp hello.py của bạn. Trong thư mục dist, bạn sẽ tìm thấy tệp hello.exe có thể chạy được.
3. Tùy chọn đóng gói thành một tệp duy nhất:
Nếu bạn muốn có một tệp .exe duy nhất thay vì một thư mục, bạn có thể thêm tùy chọn --onefile:
pyinstaller --onefile hello.py
Lưu ý quan trọng
- Kích thước tệp: Tệp .exe được tạo ra thường có kích thước lớn hơn so với tệp Python gốc, vì nó chứa cả trình thông dịch Python và tất cả các thư viện cần thiết.
- Dependencies ẩn: Đôi khi, các công cụ đóng gói có thể bỏ sót một số dependency ẩn (ví dụ: các tệp cấu hình, dữ liệu, hình ảnh...). Bạn có thể cần phải thêm chúng vào quá trình đóng gói một cách thủ công thông qua các tùy chọn của công cụ.
- Môi trường ảo: Nên sử dụng môi trường ảo (virtual environment) khi phát triển và đóng gói ứng dụng. Điều này giúp đảm bảo rằng bạn chỉ đóng gói các thư viện thực sự cần thiết cho dự án của mình, tránh việc đóng gói các thư viện thừa thãi từ môi trường toàn cục.