Dịch chương trình python sang exe

Hướng dẫn cách đóng gói chương trình python với Pyinstaller. Bạn sẽ học được cách dùng Pyinstaller để chuyển file python sang exe và đóng gói chương trình python sau bài học này.

Vì sao chúng ta cần đóng gói chương trình python?

Trong bài viết Cách viết, lưu và chạy chương trình python, chúng ta đã biết để chạy chương trình python, bạn cần phải tạo môi trường chạy python trong máy, cài các module cần thiết phục vụ chương trình v.v.. Sau đó bạn cũng cần phải lưu mã nguồn chương trình vào file py và chạy file này trên Anaconda hoặc DOS.

Nếu như bạn chỉ cần chạy chương trình python đã viết trên máy của mình, bạn không cần thiết phải đóng gói chương trình python. Tuy nhiên trong trường hợp bạn cần đưa chương trình này cho một người thứ 3 sử dụng, hay là muốn sử dụng chương trình trong một máy tính khác chẳng hạn, sẽ là rất rắc rối cho việc cài đặt và chuẩn bị môi trường python để chạy chương trình này.

Để tiết kiệm công sức và thoát khỏi hầu hết các công việc phức tạp ở trên, chúng ta cần chuyển file python sang exeđóng gói chương trình python thành một chương trình độc lập có khả năng chạy ở các máy khác nhau mà không cần phải cài đặt môi trường python.

Có rất nhiều phương pháp để đóng gói chương trình python, trong đó phải kể đến 3 phương pháp tiêu biểu với ưu và nhược điểm kể đến như sau:

Phương phápƯu điểmNhược điểm
PyInstaller Độ phổ biến cao
Đang được phát triển thêm
Tương thích với hầu hết các phiên bản mới của python
Có thể tạo gộp một file exe
Chương trình sau đóng gói khá nặng
Tốc độ chạy file exe chậm
Py2exe Tốc độ chạy file exe nhanh Không phổ biến
Không còn phát triển
Không thể tạo gộp một file exe
cx_Freeze Chương trình sau đóng gói cực nhẹ
Tốc độ chạy file exe nhanh<Đang được phát triển thêm>
Không thể tạo gộp một file exe
Không thể đóng gói các thư viện của 3rd-parties như NumPy, SciPy, OpenCV, matplotlib, PyQT

Bạn có thể tham khảo so sánh độ phổ biến giữa PyInstaller và Py2exe sau đây:

Khi so sánh các phương pháp chuyển file python sang exe đóng gói chương trình python này, chúng ta có thể thấy Py2exe đã quá cũ và không còn phổ biến. cx_Freeze thì nhanh hơn PyInstaller cũng như chương trình sau đóng gói thì nhẹ hơn, tuy nhiên cx_Freeze không thể đóng gói các thư viện của 3rd-parties như NumPy, SciPy, OpenCV, matplotlib, PyQT.

Do đó, khi cần đóng gói các chương trình đơn giản trong python, bạn nên sử dụng tới cx_Freeze, và khi cần đóng gói các chương trình có liên quan tới các thư viện thứ ba như ở trên, bạn nên dùng PyInstaller.

Về cách sử dụng cx_Freeze, Kiyoshi đã chia sẻ trong bài đóng gói chương trình python với cx_Freeze rồi. Trong khuôn khổ bài này, chúng ta sẽ tìm hiểu về cách sử dụng Pyinstaller để đóng gói chương trình python nhé.

Pyinstaller trong python là gì

Theo như website chính thức PyInstaller Manual thì:

PyInstaller gói một ứng dụng Python và tất cả các phần phụ thuộc của nó vào một gói duy nhất. Người dùng có thể chạy ứng dụng đóng gói mà không cần cài đặt trình thông dịch Python hoặc bất kỳ mô-đun nào. PyInstaller hỗ trợ Python 3.6 hoặc mới hơn và đóng gói chính xác các gói Python chính như numpy, PyQt, Django, wxPython và các gói khác.

PyInstaller được thử nghiệm trên Windows, Mac OS X và GNU / Linux. Tuy nhiên, nó không phải là một trình biên dịch chéo: để tạo một ứng dụng Windows, bạn chạy PyInstaller trong Windows; để tạo ứng dụng GNU / Linux, bạn chạy ứng dụng đó trong GNU / Linux, v.v. PyInstaller đã được sử dụng thành công với AIX, Solaris, FreeBSD và OpenBSD nhưng thử nghiệm đối với chúng không phải là một phần trong các thử nghiệm tích hợp liên tục của chúng tôi.

Hiểu một cách đơn giản, Pyinstaller trong python là một module có chức năng tạo một tệp thực thi độc lập (exe) duy nhất từ một ứng dụng python và các thành phần phụ thuộc của nó. Chúng ta sử dụng Pyinstaller để chuyển file python sang exe và đóng gói chương trình python.

Đóng gói chương trình python bằng Pyinstaller

Cài đặt Pyinstaller

Chúng ta cài đặt Pyinstaller vào python bằng lệnh sau đây:

pip install pyinstaller

Python sẽ tiến hành cài Pyinstaller và nếu dòng Successfully installed hiện ra, quá trình cài đặt đã thành công.

Dịch chương trình python sang exe

Chuẩn bị chương trình python cần đóng gói

Chúng ta ghi mã nguồn của chương trình python cần đóng gói và lưu vào file py trước khi tiến hành đóng gói.

Ví dụ, chúng ta cần đóng gói chương trình quay và ghi video bằng OpenCV như sau:

import cv2


capture = cv2.VideoCapture(0)

while True:
ret, frame = capture.read()
if not ret:
continue
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

capture.release()
cv2.destroyAllWindows()

Trong chương trình trên, chúng ta cần sử dụng tới module cs2 trong thư viện OpenCV, do đó hãy đảm bảo bạn đã cài OpenCV trong máy bằng lệnh cài sau đây:

pip install opencv-python

Hãy lưu lại mã nguồn chương trình với tên file là video_capture.py và tiến hành các bước tiếp theo.

  |data/
  |--video_capture.py

Tiến hành chuyển file python sang exe và đóng gói chương trình

Sau khi chuẩn bị xong xuôi, chúng ta tiến hành chuyển file python sang exe và đóng gói chương trình bằng cách chỉ định đường dẫn của file python đằng sau lệnh pyinstaller như dưới đây:

pyinstaller video_capture.py

Pyinstaller sẽ tiến hành build các file và thư mục cần thiết để chạy chương trình cần đóng gói như sau:

Dịch chương trình python sang exe

Nếu như dòng chữ Building EXE from EXE-00.toc completed successfully. xuất hiện thì bạn đã đóng gói phần mềm python thành công rồi đấy.

Lại nữa, nếu bạn muốn đóng gói phần mềm python và tất cả các phần phụ thuộc của nó vào một file exe duy nhất, hãy sử dụng tới lệnh sau đây:

pyinstaller video_capture.py --onefile

Khi đó, phần mềm python cần đóng gói và tất cả các thành phần liên quan sẽ được gói cả vào một file exe trong folder dist > video_capture. Bạn có thể đổi tên file exe này cho phù hợp và sử dụng nó độc lập như là một chương trình trong máy tính của mình.

  |data/
  |--dist
  |    |--video_capture
  |           |--video_capture.exe
  |--video_capture.py

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách đóng gói chương trình python bằng Pyinstaller rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại &lt;a title="Bạn được tự do chia sẻ bài viết nhưng phải để lại đường link bài viết từ laptrinhcanban.com. Bạn không được sử dụng tài liệu cho mục đích thương mại. Không được phép chỉnh sửa nội dung được phát hành trên website của chúng tôi" style="color:#fff;background-color:silver" rel="license noopener" target="_blank" href="https://creativecommons.org/licenses/by-nc-nd/4.0/"&gt;Creativecommons&lt;/a&gt;&amp;nbsp;và &lt;a title="Bạn được tự do chia sẻ bài viết nhưng phải để lại đường link bài viết từ laptrinhcanban.com. Bạn không được sử dụng tài liệu cho mục đích thương mại. Không được phép chỉnh sửa nội dung được phát hành trên website của chúng tôi" style="color:#fff;background-color:silver" target="_blank" rel="noopener" href="https://www.dmca.com/Protection/Status.aspx?ID=1631afcd-7c4a-467d-8016-402c5073e5cd" class="dmca-badge"&gt;DMCA&lt;/a&gt;&lt;script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"&gt;</p><h3 style="font-size:15px">Bài viết liên quan</h3><ul class="popular-posts"><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-cx-freeze/" title="Đóng gói chương trình python với cx_Freeze" rel="bookmark">Đóng gói chương trình python với cx_Freeze</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/goi-lenh-hoac-ung-dung-ben-ngoai-tu-python/" title="Subprocess trong Python và gọi một lệnh hoặc ứng dụng khác từ Python" rel="bookmark">Subprocess trong Python và gọi một lệnh hoặc ứng dụng khác từ Python</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/bien-trong-python/bien-trong-python-la-gi/" title="Biến trong python là gì" rel="bookmark">Biến trong python là gì</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/bien-trong-python/nhap-bien-trong-python/" title="Nhập biến trong python" rel="bookmark">Nhập biến trong python</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/bien-trong-python/gan-bien-trong-python/" title="Gán biến trong python" rel="bookmark">Gán biến trong python</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/bien-trong-python/khai-bao-bien-trong-python/" title="Cách khai báo, khởi tạo và gán biến trong python" rel="bookmark">Cách khai báo, khởi tạo và gán biến trong python</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/csv-excel-json-xml-pdf/doc-file-excel-trong-python/" title="Đọc file excel trong python" rel="bookmark">Đọc file excel trong python</a></h3></div></li><li class="popular-posts-item"><div class="popular-posts-title"><h3><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/csv-excel-json-xml-pdf/doc-file-csv-trong-python/" title="Đọc file csv trong python" rel="bookmark">Đọc file csv trong python</a></h3></div></li></ul></div><div id="keugoi"><span>Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!</span></div><section class="icon-bar-2" style="border-bottom:dotted grey .3px!important"><a target="_blank" title="chia sẻ qua facebook" rel="noopener noreferrer" href="https://www.facebook.com/sharer/sharer.php?u=https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-pyinstaller/" class="facebook"><i class="fa fa-facebook"></i></a> <a target="_blank" rel="noopener noreferrer" href="https://twitter.com/intent/tweet?url=https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-pyinstaller/" title="chia sẻ qua twitter" class="twitter"><i class="fa fa-twitter"></i></a> <a target="_blank" rel="noopener noreferrer" href="https://getpocket.com/edit?url=https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-pyinstaller/" title="chia sẻ qua pocket" class="pocket"><i class="fa fa-get-pocket"></i></a> <span class="zalo-share-button" title="chia sẻ qua zalo" style="margin-left:18px;margin-bottom:-3px" data-href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-pyinstaller/" data-oaid="579745863508352884" data-layout="3" data-color="blue" data-customize="false"></span></section><p class="ico-folder"><a target="_blank" href="https://laptrinhcanban.com/"><span itemprop="HOME">HOME</span></a><span class="sya"></span>&gt;&gt; <a target="_blank" class="article-category-link" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/">python cơ bản - lập trình python cho người mới bắt đầu</a>&gt;&gt;<a target="_blank" class="article-category-link" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/">18. đóng gói chương trình python</a></p><nav id="article-nav"><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/dong-goi-chuong-trinh-python-cx-freeze/" id="article-nav-older" class="article-nav-link-wrap" style="float:left;text-align:right;padding-right:20px"><strong class="article-nav-caption">Bài sau</strong><div class="article-nav-title">Đóng gói chương trình python với cx_Freeze</div></a><a target="_blank" href="https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/dong-goi-chuong-trinh-python/goi-lenh-hoac-ung-dung-ben-ngoai-tu-python/" id="article-nav-newer" class="article-nav-link-wrap" style="float:right;text-align:left;padding-left:20px"><strong class="article-nav-caption">Bài tiếp</strong><div class="article-nav-title">Subprocess trong Python và gọi một lệnh hoặc ứng dụng khác từ Python</div></a><span id="ezoic-pub-ad-placeholder-611" class="ezoic-adpicker-ad"></span></nav><div id="recent_posts_down"><div class="widget_athemes_tabs"><ul id="widget-tab" class="clearfix widget-tab-nav"><li class="active">Bài viết mới nhất</li></ul><div class="widget"><ul><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-chuoi-trong-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban45.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-chuoi-trong-php/">Tách chuỗi trong PHP (explode, preg_split)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/cat-chuoi-trong-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban21.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/cat-chuoi-trong-php/">Cắt chuỗi trong PHP (substr, mb_substr)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-chuoi-thanh-mang-trong-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban57.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-chuoi-thanh-mang-trong-php/">Tách chuỗi thành mảng trong PHP (explode)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tim-kiem-chuoi-trong-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban43.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tim-kiem-chuoi-trong-php/">Tìm kiếm chuỗi trong PHP (strpos)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/dem-so-lan-xuat-hien-cua-ky-tu-trong-chuoi-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban52.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/dem-so-lan-xuat-hien-cua-ky-tu-trong-chuoi-php/">Đếm số lần xuất hiện của ký tự và chuỗi trong chuỗi PHP (substr_count)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/chuyen-chuoi-thanh-mang-trong-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban47.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/chuyen-chuoi-thanh-mang-trong-php/">Chuyển chuỗi thành mảng trong PHP (str_split, mb_str_split)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-tung-ky-tu-trong-chuoi-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban47.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/tach-tung-ky-tu-trong-chuoi-php/">Tách từng ký tự trong chuỗi PHP (substr, preg_split)</a></span> <span>tháng 9 17, 2022</span></div></li><li class="clearfix"><div class="widget-entry-thumbnail"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/xoa-ky-tu-trong-chuoi-php/"><img width="60px" height="60px" class="ezlazyload attachment-thumb-small size-thumb-small wp-post-image" alt="" ezimgfmt="rs rscb2 src ng ngcb2" data-ezsrc="/css/images/thumbnail_img/laptrinhcanban15.webp"></a></div><div class="widget-entry-summary"><span style="margin:0"><a target="_blank" href="https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/chuoi-trong-php/xoa-ky-tu-trong-chuoi-php/">Xóa ký tự trong chuỗi PHP</a></span> <span>tháng 9 15, 2022</span></div></li></ul></div></div></div><footer class="entry-meta entry-footer"></footer><hr class="entry-footer-hr"></div><div id="profiletitle2">Profile</div><div id="profileblock2"><div id="profilephoto2"><a target="_blank" rel="noopener" href="https://www.facebook.com/mr.nchita"><img width="100" height="100" alt="きよしです!笑" ezimgfmt="rs rscb2 src ng ngcb2" class="ezlazyload" data-ezsrc="/css/images/kiyoshi.webp"></a></div><div id="profiletext2"><p>Tác giả : <a href="https://www.facebook.com/mr.nchita" target="_blank" rel="nofollow noopener">Kiyoshi (Chis Thanh)</a></p><p>Kiyoshi là một <a href="https://www.youtube.com/c/ChisThanh" target="_blank" rel="nofollow noopener">cựu du học sinh tại Nhật Bản</a>. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.<span id="ezoic-pub-ad-placeholder-196" class="ezoic-adpicker-ad"></span></p></div></div></div></article><aside id="sidebar"><div id="sidebar_first"><div class="search" style="margin-top:-30px"><div id="fb-root"></div><script async defer crossorigin="anonymous" src="https://connect.facebook.net/vi_VN/sdk.js#xfbml=1&version=v12.0&appId=3084959888222500&autoLogAppEvents=1" nonce="KPkvxeh4">

Dịch chương trình python sang exe