Tôi đang xây dựng một ứng dụng Python và không muốn buộc khách hàng của mình cài đặt Python và các mô-đun.
Vì vậy, có cách nào để biên dịch tập lệnh Python thành tệp thực thi độc lập không?
Tôi đang xây dựng một ứng dụng Python và không muốn buộc khách hàng của mình cài đặt Python và các mô-đun.
Vì vậy, có cách nào để biên dịch tập lệnh Python thành tệp thực thi độc lập không?
Câu trả lời:
Bạn có thể sử dụng py2exe như đã trả lời và sử dụng cython để chuyển đổi các .py
tệp chính của mình trong .pyc
, các tệp được biên dịch C, như .dll
trong Windows và .so
trong linux, khó hoàn nguyên hơn nhiều so với các tệp thông thường .pyo
và .pyc
(cũng có hiệu suất!)
Bạn có thể sử dụng PyInstaller để đóng gói các chương trình Python dưới dạng thực thi độc lập. Nó hoạt động trên Windows, Linux và Mac.
Khởi động nhanh PyInstaller
Cài đặt PyInstaller từ PyPI:
pip install pyinstaller
Chuyển đến thư mục của chương trình của bạn và chạy:
pyinstaller yourprogram.py
Điều này sẽ tạo ra gói trong thư mục con được gọi
dist
.Để biết hướng dẫn chi tiết hơn, xem hướng dẫn .
Bạn có thể muốn điều tra Nuitka . Nó lấy mã nguồn python và chuyển đổi nó thành các lệnh gọi API C ++. Sau đó, nó biên dịch thành một nhị phân thực thi (ELF trên Linux). Nó đã xuất hiện được vài năm và hỗ trợ nhiều phiên bản Python.
Bạn cũng có thể sẽ có được một cải tiến hiệu suất nếu bạn sử dụng nó. Đề nghị.
Tôi muốn biên dịch một số thông tin hữu ích về việc tạo các tệp độc lập trên windows bằng Python 2.7.
Tôi đã sử dụng py2exe và nó hoạt động, nhưng tôi đã gặp một số vấn đề.
Nó đã chỉ ra một số vấn đề khi tạo các tệp đơn trong Windows 64 bit: Sử dụng bundle_files = 1 với py2exe không hoạt động ;
Nó là cần thiết để tạo một tập tin setup.py để nó hoạt động. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Tôi đã gặp vấn đề với các phụ thuộc mà bạn phải giải quyết bằng cách nhập các gói trong tệp cài đặt;
Tôi đã không thể làm cho nó hoạt động cùng với PyQt ..
Lý do cuối cùng này khiến tôi cố gắng PyInstaller http://www.pyinstaller.org/ .
Theo tôi, nó tốt hơn nhiều vì:
Tôi đề nghị tạo một tệp .bat với các dòng sau chẳng hạn (pyinstaller.exe phải có trong Windows Path):
pyinstaller.exe --onefile MyCode.py
Bạn có thể tạo một tệp duy nhất, trong số các tùy chọn khác ( https://pyinstaller.readthedocs.io/en/urdy/usage.html#options ).
Tôi chỉ có một vấn đề khi sử dụng gói PyInstaller và đa xử lý đã được giải quyết bằng cách sử dụng công thức này: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Vì vậy, tôi nghĩ rằng, ít nhất là đối với python 2.7, một tùy chọn tốt hơn và đơn giản hơn là PyInstaller.
--onefile
lá cờ sẽ không giúp bạn để làm cho nó di động trên Windows, bởi vì vẫn thực thi muốn liên kết với các api-ms-win-crt-runtime-l1-1-0.dll
thư viện (hoặc / và những người khác) mà phải được cài đặt thông qua các vcredist
gói. Vì vậy, một phụ thuộc vẫn còn đó và phải được cài đặt trước khi chạy.
Có, có thể biên dịch tập lệnh Python thành tệp thực thi độc lập.
PyInstaller có thể được sử dụng để chuyển đổi các chương trình Python thành các tệp thực thi độc lập, trong Windows , Linux , Mac OS X , FreeBSD , Solaris và AIX . Đây là một trong những bộ chuyển đổi được đề nghị.
py2exe chuyển đổi các tập lệnh Python thành chỉ thực thi trong nền tảng Windows.
Cython là một trình biên dịch tĩnh cho cả ngôn ngữ lập trình Python và ngôn ngữ lập trình Cython mở rộng.
Và một lựa chọn thứ ba là cx_Freeze
, đó là đa nền tảng.
cx_Freeze
bản phát hành nào được liệt kê trên pypi kể từ cuối năm 2017. Dự án này có bị bỏ không?
bạn có thể thích py2exe . bạn cũng sẽ tìm thấy trong đó infos để làm điều đó trên linux
Sử dụng py2exe .... sử dụng bên dưới để thiết lập tệp:
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import matplotlib
setup(
console=['PlotMemInfo.py'],
options={
'py2exe': {
'packages' : ['matplotlib'],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll']
}
},
data_files = matplotlib.get_py2exe_datafiles()
)
Tôi thích pyinstaller - đặc biệt là biến thể "cửa sổ":
pyinstaller --onefile --windowed myscript.py
Nó sẽ tạo một tập tin * .exe duy nhất trong một thư mục dist /.
Tôi cũng khuyên dùng pyinstaller
để tương thích ngược tốt hơn như python 2.3 - 2.7.
Đối với py2exe , bạn phải có python 2.6
Đối với các kịch bản Python 3.2, sự lựa chọn duy nhất là Cxfreeze. Xây dựng nó từ các nguồn nếu không nó sẽ không hoạt động.
Đối với python 2.x tôi đề xuất pyinstaller vì nó có thể gói một chương trình python trong một tệp thực thi duy nhất, không giống như CxFreeze xuất ra các thư viện.
py2exe sẽ tạo tệp exe mà bạn muốn nhưng bạn cần có cùng phiên bản MSVCR90.dll trên máy bạn sẽ sử dụng exe mới của mình. Xem http://www.py2exe.org/index.cgi/Tutorial để biết thêm thông tin.
Bạn có thể tìm thấy danh sách các tiện ích phân phối được liệt kê @ https://wiki.python.org/moin/DistributionUtilities .
Tôi sử dụng bbfreeze và nó đã hoạt động rất tốt (chưa có hỗ trợ python 3).
.so
tệp hoặc sao chép trực tiếp các tệp .egg và tất cả chúng sẽ có mặt trong một thư mục (hoặc dưới dạng một tệp). Không cần cài đặt.
Sử dụng pyinstaller, tôi tìm thấy một phương pháp tốt hơn bằng cách sử dụng phím tắt đến .exe thay vì thực hiện --onefile
. Dù sao, có thể có một số tệp dữ liệu xung quanh và nếu bạn đang chạy một ứng dụng dựa trên trang web thì chương trình của bạn cũng phụ thuộc vào các tệp html, js, css. Không có điểm nào trong việc di chuyển tất cả các tệp này ở đâu đó .. thay vào đó, nếu chúng ta di chuyển đường dẫn làm việc lên.
Tạo một lối tắt đến exe, di chuyển nó lên trên cùng và đặt các đường dẫn đích và khởi động theo chỉ định, để có các đường dẫn tương đối đi tới thư mục dist \:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
Có thể đổi tên lối tắt thành bất cứ thứ gì để đổi tên thành "GTFS-Manager"
Bây giờ khi tôi nhân đôi -nhấp vào phím tắt, như thể tôi trăn-chạy tệp! Tôi thấy cách tiếp cận này tốt hơn phương pháp --onefile
như:
Oh, hãy nhớ xóa thư mục xây dựng sau khi xây dựng, sẽ tiết kiệm kích thước.
Sử dụng Cython để chuyển đổi sang c, biên dịch và liên kết với gcc. Một cách khác có thể là, tạo các hàm cốt lõi trong c (những hàm bạn muốn làm khó để đảo ngược), biên dịch chúng và sử dụng python boost để nhập mã được biên dịch (cộng với bạn có được thực thi mã nhanh hơn nhiều). sau đó sử dụng bất kỳ công cụ được đề cập để phân phối.
Tôi đã nói rằng PyRun, https://www.egenix.com/products/python/PyRun/ , cũng là một tùy chọn.