Courses
Trong bài viết này, tôi sẽ hướng dẫn bạn một số tình huống hợp lý để chuyển đổi tệp Python của bạn thành tệp thực thi. Tôi cũng sẽ minh họa cách chuyển một tệp Python thành tệp thực thi bằng ba thư viện Python: Pyinstaller, Nuitka và auto-py-to-exe.
Clone kho GitHub này để làm theo hướng dẫn.
Tại sao chuyển Python sang .exe?
Các tệp thực thi - tệp được lưu với phần mở rộng .exe - được dùng để cài đặt hoặc chạy ứng dụng phần mềm trên máy tính chạy hệ điều hành Windows. Tệp cho phép máy tính Windows chạy một ứng dụng chính là tệp .exe.
Có một số lý do bạn có thể muốn chuyển một chương trình Python thành tệp thực thi. Hãy cùng xem qua một vài lý do:
Hoạt động độc hại
Đáng tiếc là có những người trên internet thích phát tán phần mềm độc hại để lây nhiễm thiết bị của người khác và đánh cắp thông tin của họ. Một cách để đối phó là không rơi vào bẫy của họ – điều này có nghĩa là không tải xuống hoặc mở bừa bãi các tệp .exe không đến từ nguồn đáng tin cậy.
Khả năng tiếp cận
Một lý do khác là bạn muốn chia sẻ ứng dụng với người dùng khác. Một chương trình Python điển hình có thể gồm nhiều phụ thuộc mà người dùng khác cần cài đặt trước khi chạy được chương trình. Nếu người đó không biết lập trình thì sao? Trong những trường hợp như vậy, kỳ vọng người dùng học lập trình trước khi sử dụng ứng dụng là điều không hợp lý. Chuyển đổi tệp Python thành tệp thực thi cho phép người dùng sử dụng chương trình của bạn mà không cần biết Python.
Bảo vệ mã nguồn
Ngay cả khi họ biết lập trình, chuyển đổi tệp Python thành tệp thực thi có thể là lựa chọn tốt để ngăn mã của bạn bị đánh cắp. Tệp thực thi giúp bảo vệ mã vì nó tạo ra phiên bản đã biên dịch của mã nguồn, khiến việc hiểu được nội dung khó hơn so với mã nguồn gốc.
Lập lịch tác vụ
Bạn cũng có thể muốn lập lịch một tác vụ trên máy tính để chạy tệp .exe vào thời điểm cụ thể.
Cách chuyển đổi một script Python thành tệp .exe
Bây giờ bạn đã biết tệp .exe là gì và vì sao có thể muốn chuyển đổi tệp Python thành tệp .exe, hãy xem cách thực hiện trong Python. Phần này sẽ đề cập đến ba framework: pyinstaller, nuitka và auto-py-to-exe.
Một điều cần lưu ý là auto-py-to-exe được biết là có vấn đề tương thích với Python 3.11 trở lên, và nói chung chỉ đáng tin cậy đến Python 3.10 trừ khi bạn dùng các phiên bản mới cụ thể và phụ thuộc được khớp cẩn thận.
Nói vậy để rõ, chúng ta hãy bắt đầu.
Chuẩn bị script
Minh họa này sẽ dùng bộ dữ liệu New York City Airbnb open data.
Trước khi các nhà khoa học dữ liệu có thể phân tích một bộ dữ liệu, dữ liệu phải được định dạng tương thích với các công cụ họ dùng. Do đó, tạo một lược đồ kiểm tra sẽ định nghĩa hiệu quả tất cả các kiểm tra áp dụng cho từng trường một cách khai báo. Quy trình này có thể khá lặp đi lặp lại. Để tránh việc các nhà khoa học dữ liệu phải làm tác vụ lặp lại, chúng tôi đã tạo một script kiểm tra tự động chạy định kỳ.
Lưu ý: Hãy cực kỳ cẩn thận khi dùng đường dẫn tương đối nếu script của bạn phải đọc dữ liệu. Tốt hơn là dùng đường dẫn tuyệt đối để đảm bảo tệp thực thi hoạt động như mong đợi.
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
Lưu ý: chúng tôi đã sao chép script này vào các thư mục pyinstaller, nuitka và auto-py-to-exe.
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Mỗi thư mục có môi trường ảo riêng mà trong đó chúng tôi đã cài đặt các yêu cầu: xem yêu cầu cho pyinstaller hoặc yêu cầu cho auto-py-to-exe. Nếu bạn đang làm theo mã, hãy nhớ tạo môi trường ảo trong thư mục pyinstaller và thư mục auto-py-to-exe.
Ở mức khái quát, script trên chứa một hàm – tìm hiểu thêm về viết hàm trong Python – đọc vào một bộ dữ liệu rồi định nghĩa định dạng kỳ vọng của các trường cụ thể trong dữ liệu. Bước tiếp theo là chuyển script Python này thành tệp thực thi có thể chạy định kỳ để tạo bộ dữ liệu đã định dạng.
Phương pháp 1: Pyinstaller
Pyinstaller cho phép bạn nhanh chóng chuyển một tệp Python thành tệp thực thi từ terminal. Sau khi bạn tạo môi trường ảo và cài đặt các yêu cầu cho script (bao gồm pyinstaller), chỉ cần mở terminal và điều hướng đến thư mục chứa tệp Python bạn muốn chuyển đổi.
Bước tiếp theo là chạy lệnh sau:
pyinstaller --onefile validation.py
Lúc đầu, bạn sẽ thấy nhiều log và dòng cuối cùng sẽ thông báo đại loại như “completed successfully” – nếu tệp thực thi được tạo thành công.

Hình 1: Các log cho thấy tệp thực thi đang được tạo và đã hoàn tất thành công.
Khi hoàn tất, quá trình này sẽ tạo hai thư mục mới, build và dist, trong cùng thư mục với tệp Python. Trong thư mục dist, bạn sẽ thấy script validation.exe.

Hình 2: GIF minh họa việc chạy validation.exe trên một bộ dữ liệu.
Để chạy script, chỉ cần nhấp đôi vào nó. Một cửa sổ console sẽ xuất hiện yêu cầu bạn nhập tên tệp dữ liệu mà bạn muốn chạy kiểm tra. Khi bạn nhập tên tệp, console sẽ đóng lại và dữ liệu đã kiểm tra sẽ được tạo trong cùng thư mục với tệp validation.exe – xem Hình 2.
Phương pháp 2: Nuitka
Nuitka là một cách tiếp cận đáng cân nhắc khác. Khác với PyInstaller, vốn đóng gói script Python của bạn cùng với trình thông dịch Python, Nuitka thực sự biên dịch mã Python của bạn sang mã C. Kết quả là khả năng bảo vệ mã nguồn tốt hơn, có thể chạy nhanh hơn và thường có kích thước tệp nhỏ hơn. Đổi lại là thời gian biên dịch lâu hơn và thiết lập phức tạp hơn.
Cài đặt và thiết lập
Sau khi bạn tạo môi trường ảo và cài đặt Nuitka bằng pip install nuitka, bạn cần đảm bảo hệ thống có sẵn một trình biên dịch C. Trình biên dịch bạn cần phụ thuộc vào hệ điều hành:
-
Windows: Tải và cài Microsoft Visual C++ Build Tools (miễn phí) từ trang web Visual Studio, hoặc dùng MinGW
-
macOS: Cài Xcode Command Line Tools với
xcode-select --install -
Linux: GCC thường được cài sẵn; nếu chưa có, hãy cài qua trình quản lý gói
Sau khi cài đặt, Nuitka sẽ tự động phát hiện trình biên dịch. Nếu gặp vấn đề, hãy đảm bảo trình biên dịch đã có trong biến môi trường PATH của hệ thống.
Chuyển đổi script kiểm tra bằng Nuitka
Hãy chuyển cùng script kiểm tra NYC Airbnb bằng Nuitka, giống như với PyInstaller và auto-py-to-exe. Để biên dịch script thành tệp thực thi, chạy:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
Giải thích các cờ:
-
--onefile: Tạo một tệp thực thi duy nhất (thay vì một thư mục với nhiều tệp và phụ thuộc) -
--follow-imports: Tự động bao gồm tất cả các mô-đun mà script của bạn import -
--include-package=pandas: Chỉ định đưa gói pandas vào (một số gói không được tự động phát hiện, vì vậy cờ này đảm bảo nó được đóng gói)
Khác với PyInstaller, vốn hoàn tất trong khoảng 30 giây, Nuitka sẽ mất lâu hơn đáng kể — thường 5–15 phút tùy độ phức tạp mã và tốc độ hệ thống. Bạn sẽ thấy đầu ra biên dịch trong terminal hiển thị tiến trình qua giai đoạn biên dịch C.
Khi hoàn tất, bạn sẽ thấy thông báo thành công cho biết tệp thực thi đã được tạo. Tệp thực thi được tạo trong cùng thư mục với tệp validation.py.
Nhấp đôi validation.exe hoặc chạy từ dòng lệnh. Một cửa sổ console sẽ mở và yêu cầu bạn nhập tên tệp, giống như với PyInstaller. Sau khi gõ AB_NYC_2019.csvvà nhấn Enter, quá trình kiểm tra sẽ chạy, console đóng lại và tệp mới validated_ab_nyc_2019.csv được tạo trong cùng thư mục, y hệt phiên bản PyInstaller.
Phương pháp 3: auto-py-to-exe
Bước đầu tiên để tạo tệp thực thi bằng auto-py-to-exe là chạy nó với lệnh sau:
auto-py-to-exe
Thao tác này sẽ mở một giao diện người dùng đồ họa (GUI) giúp chúng ta chuyển tệp Python thành tệp thực thi.

Hình 3: Giao diện người dùng đồ họa sau khi chạy lệnh auto-py-to-exe.
Lưu ý: nếu không chạy được, hãy đảm bảo bạn đã tạo môi trường ảo trong thư mục auto-py-to-exe và cài đặt requirements.txt trong môi trường ảo bằng lệnh: pip install -r requirements.txt.
GUI có một số trường chúng ta cần điền. Hãy xem từng trường và phân tích:
- Specific Location: Trong trường này, bạn phải thêm vị trí script của tệp Python bạn muốn chuyển thành tệp thực thi.
- Onefile: Đây là nơi bạn chọn tạo một thư mục hay một tệp duy nhất. Một thư mục sẽ chứa tất cả phụ thuộc cần thiết để chạy script và một tệp thực thi, còn chọn “One File” sẽ tạo một tệp thực thi duy nhất.
- Console Window: Quyết định giữa “Console Based” hay “Window Based” phụ thuộc vào những gì script trả về. Ví dụ, script ở trên yêu cầu người dùng nhập tên tệp. Do đó, nên chọn “Console Based” vì tùy chọn này sẽ mở console sau khi chạy tệp thực thi. Nếu không cần hiển thị đầu ra console sau khi chạy tệp thực thi thì “Window Based” là lựa chọn tốt.
Chúng ta cũng có các tùy chọn khác để cấu hình việc tạo tệp thực thi (ví dụ: thêm biểu tượng, tệp bổ sung, v.v.). Ở phần này, ta cũng có thể chỉnh đường dẫn nơi xuất các tệp do tệp thực thi tạo ra: để làm điều này, chọn công tắc “Settings” và duyệt đến thư mục đầu ra bạn muốn. Bước cuối là chọn “Convert .py to .exe” để chuyển đổi tệp Python.
Xem GIF ở Hình 4 để biết cách chúng tôi cấu hình tệp thực thi.

Hình 4: GIF minh họa cấu hình cho auto-py-to-exe
Khi quay lại thư mục auto-py-to-exe, sẽ có thư mục tên là output: đây là nơi tệp validation.exe nằm. Chọn tệp để chạy, một console sẽ xuất hiện yêu cầu bạn nhập tên tệp:

Hình 5: Console sau khi chạy tệp thực thi kiểm tra.
Chỉ cần nhập tên tệp – trong ví dụ này là AB_NYC_2019.csv – và nhấn Enter. Console sẽ đóng lại và tạo một tệp mới trong thư mục output (nơi chứa tệp thực thi) có tên validated_ab_nyc_2019.csv.
PyInstaller so với Nuitka
Đây là so sánh giữa Nuitka và PyInstaller trên cùng script kiểm tra, kèm theo auto-py-to-exe như một lựa chọn GUI:
|
Chỉ số |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
Kích thước tệp thực thi |
trung bình |
trung bình |
nhỏ hơn 20-30% |
|
Thời gian build |
trung bình |
trung bình |
dài hơn 16x |
|
Thời gian khởi động |
~2 giây |
~2 giây |
~1 giây |
|
Thời gian chạy (tác vụ kiểm tra) |
~3 giây |
~3 giây |
~2,5 giây |
|
Bảo vệ mã nguồn |
Trung bình |
Trung bình |
Xuất sắc |
|
Python 3.8–3.10 |
✅ Tuyệt vời |
✅ Tuyệt vời |
✅ Tuyệt vời |
|
Python 3.11+ |
✅ Tuyệt vời |
⚠️ Có vấn đề đã biết |
✅ Tuyệt vời |
PyInstaller và Nuitka đều hỗ trợ đáng tin cậy trên mọi phiên bản Python hiện đại, trong khi auto-py-to-exe có các vấn đề tương thích đã biết với Python 3.11 trở lên. Nuitka tạo ra tệp thực thi nhỏ hơn, nhanh hơn và bảo vệ tài sản trí tuệ vượt trội — nhưng quá trình build chậm hơn khoảng 16 lần so với PyInstaller.
Kết luận
Trong bài viết này, bạn đã học được:
- Tệp Python là gì
- Tệp thực thi là gì và vì sao nó hữu ích
- Cách chuyển một script Python thành tệp thực thi bằng pyinstaller, một công cụ tuyệt vời cho những ai quen thao tác dòng lệnh.
- Cách chuyển một script Python thành tệp thực thi bằng auto-py-to-exe, công cụ cung cấp giao diện người dùng đồ họa (GUI) để cấu hình cách tạo tệp thực thi.
Tìm hiểu thêm về cách bạn có thể tận dụng Python cho khoa học dữ liệu trong lộ trình nghề nghiệp Associate Data Scientist with Python của DataCamp.
Câu hỏi thường gặp
Tôi có thể đưa thêm tệp (ví dụ: hình ảnh, tệp cấu hình) vào tệp thực thi không?
Có, cả ba công cụ đều cho phép bạn đóng gói các tệp bổ sung mà script của bạn cần. Với PyInstaller và Nuitka, bạn có thể dùng tùy chọn --add-data để chỉ định các tệp cần đưa vào. Trong auto-py-to-exe, có tùy chọn trong GUI để thêm tệp ở mục "Additional Files." Hãy đảm bảo bạn chỉ định đúng đường dẫn tương đối hoặc tuyệt đối để tệp thực thi có thể truy cập các tệp này.
Làm thế nào để thêm biểu tượng tùy chỉnh cho tệp thực thi?
Bạn có thể thêm biểu tượng tùy chỉnh cho tệp thực thi bằng cách chỉ định một tệp .ico. Với PyInstaller, dùng cờ --icon theo sau là đường dẫn đến tệp .ico của bạn. Trong auto-py-to-exe, bạn có thể đặt đường dẫn biểu tượng trong trường "Icon" của GUI. Nuitka cũng hỗ trợ cờ --windows-icon-from-ico. Lưu ý tệp biểu tượng phải ở định dạng .ico.
Vì sao tệp thực thi của tôi quá lớn và làm sao giảm kích thước?
Tệp thực thi có thể bao gồm tất cả phụ thuộc, thư viện và cả trình thông dịch Python, khiến kích thước lớn. Để giảm kích thước:
- Dùng tùy chọn
--onefiletrong PyInstaller hoặc Nuitka để đóng gói mọi thứ vào một tệp duy nhất. - Loại trừ các thư viện không cần thiết bằng tùy chọn
--exclude-moduletrong PyInstaller hoặc Nuitka. - Cân nhắc dùng công cụ như UPX để nén tệp thực thi tạo ra (hoạt động với PyInstaller và auto-py-to-exe).
- Cân nhắc dùng Nuitka, vốn thường cho tệp thực thi nhỏ hơn 20–30% so với PyInstaller.
Tôi có thể tạo tệp thực thi cho hệ điều hành khác không?
PyInstaller, auto-py-to-exe và Nuitka đều phụ thuộc nền tảng. Để tạo tệp thực thi cho hệ điều hành khác, bạn cần dùng công cụ biên dịch chéo hoặc thiết lập máy ảo hay container cho hệ điều hành mục tiêu. Ví dụ, để tạo tệp thực thi Windows trên Linux, bạn có thể dùng Wine hoặc Docker với môi trường Windows.
Những lựa chọn thay thế cho pyinstaller và auto-py-to-exe là gì?
Các công cụ khác để tạo tệp thực thi gồm:
- cx_Freeze: Công cụ đa nền tảng để tạo tệp thực thi.
- py2exe: Công cụ dành riêng cho Windows để tạo tệp thực thi từ script Python.
