Compilarea programelor în clădire în Python - 3 august 2018 - programare de la zero

Compilarea sau mai degrabă asamblarea programelor pentru a le rula pe mașini în care nu există un interpret Python instalat.

Folosind py2exe și cx_Freeze.







Cu siguranță, toată lumea avea o dorință irezistibilă și, uneori, o nevoie reală, de a-și compila fișierul .py într-un .exe executabil. Astăzi, pe internet, puteți găsi o mulțime de descrieri detaliate ale procedurilor, dar aproape toate dintre ele sunt scrise off, cuvânt cu cuvânt dintr-o sursă nu foarte de încredere, astfel încât într-un timp scurt, adepții acestor metode se oprește (testat pe sine).

Am ceva experiență în acest domeniu, pe care intenționați să picteze un lucru .py reteta de compilare a exe, nu uitați să menționați modalitățile de a rezolva cele mai frecvente probleme sborki.Naskolko știu eu, singurul instrument care poate succesul mult sau mai puțin stabil compilarii (și pe care am folosit-o de aproape un an acum) este cx_Freeze. Găsiți-o și descărcați-o, cred că o puteți face singură. Și așa - creăm într-un director convenabil un folder dist distr. Într-un director creăm un fișier setup.py:

din setarea de import cx_Freeze, executabil
import sys

baza = Niciuna
dacă sys.platform == 'win32':
base = 'Win32GUI'

setup (nume = 'FirstScript',
versiunea = '0.18',
executabile = [executabil (script = 'main.py', base = base)])

și transferați fișierul principal.py în același folder.

Deschideți linia de comandă și executați compilația:

D: [enter] D: # 92; cd # 92; dist [enter] D: # 92;

Ca rezultat, vom obține folderul exe.win32-2.7, iar scriptul care rulează scriptul nostru este fișierul principal.exe

În dosarul specificat trebuie să copiați toate fișierele grafice și multimedia legate de programul nostru.

Când apar erori de tip: Fișierul "main.py", rândul 36, în __init__
pygame.error: Nu s-a putut deschide b2.gif - motivul este exact acest lucru.

Dacă erorile de tip:

Compilarea programelor în clădire în Python - 3 august 2016 - programare de la zero

trebuie să adăugați importul modulului specificat în fișierul cu programul: import pygame._view

Dacă utilizați py2exe, organizați folderul în care ați pus fișierul cu programul și fișierul setup.py:

de la configurația de import distutils.core
import py2exe

Compilarea de la linia de comandă python setup.py py2exe [enter]

Colectarea de codificare:
În primul rând, atunci când compilați scripturi foarte des, există probleme cu datele caracterului, în special, toate literele rusești devin așa-numitele krakozyabry. Pentru a rezolva această eroare, la începutul fiecărui script compilat scrieți două comenzi:







Principalul lucru aici este, desigur, parametrul pictogramei. cu care nu este atât de dificil.

Închirierea modulelor terțe:
Există întotdeauna probleme cu programatorii cu acest punct. Până acum nu am văzut o metodă de lucru pentru rezolvarea situației, așa că am găsit-o eu însumi. Soluția este pur și simplu elementară. Ca și în cazul imaginilor, trebuie doar să copiați modulul terță parte în dosarul cu fișierul .exe. Verificat pe axa virtuală și pe computerul cunoștinței: ambele nu au interpretul Python. Paged pachetul Pmw - a luat întregul dosar python33 / lib / Pmw.

În acest caz, nu există nimic surprinzător, deoarece, așa cum am spus mai sus, cx_Freeze creează întregul interpret Python. care este capabil să execute un cod Python necomplicat. Rețineți că modulele rămân deschise, ceea ce înseamnă că orice atacator care cunoaște sintaxa Python. poate modifica cu ușurință un modul terț pentru scopurile sale rele.

Desigur, o astfel de compilație este departe de a fi ideală și nu este întotdeauna posibilă compilarea scriptului de lucru din prima oară, astfel încât să funcționeze în modul "pentru utilizator". Prin compilarea unuia dintre primele mele programe pentru "masele largi", am întâmpinat următoarea eroare când lansez programul meu compilat:

Traceback (ultimul ultim apel ultimul):
Fișierul "C: # 92; Python33 # 92; lib # 92; site-packages # 92; cx_Freeze # 92; initscripts # 92; Console.py", linia 27; exec (cod, m .__ dict__)
Fișierul "PrintQualityDocs_V1_1.py", rândul 35, în
Fișierul "X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py", linia 1565, în fișier _find_and_load
Fișier «X: # 92; Python33-X32 # 92; lib # 92; importlib # 92; _bootstrap.py», linia 1532, în _find_and_load_unlocked
Fișier «X: # 92; Python33-X32 # 92; lib # 92; importlib # 92; _bootstrap.py», linia 584, în _check_name_wrapper
Fișierul "X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py", linia 495, în set_package_wrapper
Fișierul "X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py", linia 508, în set_loader_wrapper
Fișierul "X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py", linia 1132, în load_module
Fișier «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», linia 313, în _call_with_frames_removed
Fișierul "_mssql.pyx", linia 53, în init _mssql (_mssql.c: 21719)
Fișierul "X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py", linia 1565, în fișier _find_and_load
Fișier «X: # 92; Python33-X32 # 92; lib # 92; importlib # 92; _bootstrap.py», linia 1529, în _find_and_load_unlocked
ImportError: Niciun modul numit "uuid"

A doua opțiune (pentru viitor) este de a corecta scriptul și de a prescrie modulul lipsă în el, astfel încât acesta să se potrivească imediat la compilarea:

import sys
din setarea de import cx_Freeze, executabil

build_exe_options = <«packages». [ «os». «uuid» ]> # Aici specificăm "uuid", iar la compilare acest modul va fi automat tras în sus
base = "Console" # Simptom al programului de consolă - programul nostru va fi rulat în interpretul de comandă
setup (nume = "ProgramName". # Aici puteți specifica numele programului dvs.

versiunea = "ProgrmaVersion". # Aici puteți specifica versiunea programului dvs.
descriere = "ProgramDescription". # Aici puteți specifica o descriere a programului dvs.
opțiuni = <«build_exe». build_exe_options>,
executables = [Executable ("FileName.py". base = base)]) # Aici, în loc de FileName.py, specificați scriptul pe care îl compilam.

Cred că dacă aveți o problemă similară, atunci trebuie să vorbesc mai multe despre cum să compilați cu cx_Freeze, nu mai am nevoie


Construiți fișierul de instalare:
Din aceasta, poate, a fost necesar să înceapă. Pentru migrarea / transferul ușor, aplicația compilată poate fi imediat amestecată într-un fișier .msi. Acesta este un fișier standard de instalare Windows, care, atunci când vi se solicită, îi va cere utilizatorului să selecteze directorul de instalare și să despacheteze toate datele de acolo. Totuși, acest lucru nu oferă posibilitatea de a compila întreaga aplicație într-un singur fișier .exe (pentru a fi sincer, nici măcar nu știu de ce este necesar acest lucru). Puteți crea un fișier .msi executând următoarea comandă din consola:







Articole similare

Trimiteți-le prietenilor: