Fordítsuk le (épít) egy python programot - augusztus 3, 2018 - programozás a semmiből
Összeállítása, vagy inkább épít programokat futtatni a gépeiken, ahol nincs rögzített Pyton.
Segítségével py2exe programok és cx_Freeze.
Bizonyára mindenki van egy ellenállhatatlan vágy, és néha egy valós igény, fordítsd meg .py-fájl egy futtatható .exe. Ma az interneten megtalálható rengeteg részletes leírásokat az eljárások, de szinte mindegyik írják le, szó egy nem túl megbízható forrásból, így rövid idő alatt a követői ezeknek a módszereknek leállása (tesztelt magát).
Én némi tapasztalata ezen a területen kíván festeni egy működő recept összeállítás .py .exe, ne felejtsük el megemlíteni a módját, hogy megoldja a leggyakoribb problémák sborki.Naskolko tudom, az egyetlen eszköz, amely többé-kevésbé stabil siker fordításkor alkalmazások (és amelyet én már a majdnem egy év) - ez cx_Freeze. Megkeresni és letölteni, azt hiszem, akkor lesz képes. És így -, hogy hozzon létre egy felhasználóbarát könyvtár dist mappát létrehozni setup.py mappa:
származó import cx_Freeze telepítést, végrehajtható
import sys
bázis = Nincs
ha sys.platform == 'win32':
base = 'Win32GUI'
setup (name = 'FirstScript'
version = '0.18',
futtatható = [végrehajtható (script = 'main.py', bázis = bázis)])
és ugyanabban a mappában hordozza a fő main.py. fájl
Nyisson meg egy parancssort, és futtassa az összeállítás:
D: [enter] D: # 92; cd # 92; ker [írja] D: # 92; ker> c: # 92; python27 # 92; python setup.py építeni [enter]
Ennek eredményeképpen megkapjuk a mappát exe.win32-2.7 és vney futtatni a szkriptet main.exe
A megadott mappa másolni kívánt összes grafikai és multimédiás fájlok kapcsolatos programunk.
Ha bármilyen hiba jellege: File „main.py”, 36. sor, a __init__
pygame.error: Nem sikerült megnyitni b2.gif - az ok erre.
Ha a hiba jellege:
meg kell adni a fájlt a program importálja a megadott modul: import pygame._view
Ha py2exe szervezni a mappát, amelybe a fájlt a program, és setup.py file:
származó import distutils.core beállítás
import py2exe
Összeállítás parancssori python setup.py py2exe [enter]
Összeszedte a kódolás:
Először is, amikor összeállításában scriptek nagyon gyakran probléma karakteres adat, különösen az összes orosz betűket konvertálják úgynevezett halandzsa. Annak érdekében, hogy ezt a hibát kijavítani, az elején minden összeállított forgatókönyv felírni két csapat:
A lényeg itt az, természetesen, az opció ikonra. kezelni, ami nem is olyan nehéz.
Hire egy harmadik fél modulok:
Hogy ezen a ponton a programozók mindig problémákat. Eddig még nem láttam olyan munkamódszert, hogy megoldja a helyzetet, így találta magát. A döntés csak elemi. Ahogyan az a kép, akkor csak másolni egy harmadik fél modult a mappát az .exe fájlra. Tesztelve virtuális tengely és egy számítógép barátja: mindkét nem a Python. Lamináló csomag pMW - tudomásul az egész mappa python33 / lib / PMW.
Ez egyébként nem meglepő, hiszen mint azt fentebb már említettük, cx_Freeze varr minden a Python. amely képes végrehajtani Python-kódot nem fordított. Megjegyezzük, hogy a modulok nyitva marad, ami azt jelenti, hogy minden támadó, aki ismeri a Python szintaxis. Könnyen előfordulhat, módosítsa a harmadik fél modul gonosz célra.
Természetesen, ez az összeállítás messze nem ideális, és nem mindig működik az első alkalom, hogy összeállítja a szkript fut, így fut a „User” módban. Összeállítása az egyik első programok a „tömegek”, találkoztam a következő hibát, amikor fut az én összeállított program:
Lőfegyverét (legutolsó hívás utolsó):
Fájl «C: # 92; Python33 # 92; lib # 92; site-packages # 92; cx_Freeze # 92; initscripts # 92; Console.py», 27. sor, a
Fájl «PrintQualityDocs_V1_1.py» 35. sor, a
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 1565, a _find_and_load
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 1532-ben _find_and_load_unlocked
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 584, a _check_name_wrapper
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 495, a set_package_wrapper
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 508, a set_loader_wrapper
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 1132, a load_module
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 313, a _call_with_frames_removed
Fájl «_mssql.pyx», 53 vonal, a init _mssql (_mssql.c: 21719)
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 1565, a _find_and_load
Fájl «X: # 92; Python33-x32 # 92; lib # 92; importlib # 92; _bootstrap.py», vonal 1529, a _find_and_load_unlocked
ImportError: Nincs modul neve „uuid”
A második lehetőség (a jövőben) - állítsa be a forgatókönyvet, és azt regisztrálja a hiányzó modul azonnal kihúzta összeállításakor:
import sys
származó import cx_Freeze telepítést, végrehajtható
build_exe_options = <«packages». [ «os». «uuid» ]> # Itt adja «uuid», és össze kell állítani a modul automatikusan megfeszíti
base = «konzol» # Tünet konzol programot - a program fut a parancs interpreter
setup (name = «programname». # megadhatja a program nevét
version = «ProgrmaVersion». # Itt megadhatja a változat a program
description = «ProgramLeírás». # Itt megadhat egy leírást a program
options = <«build_exe». build_exe_options>,
futtatható = [Végrehajtható (base = bázis «FileName.py».)]) # Itt helyett FileName.py megadott szkript, amely összeállítására.
Azt hiszem, ha van egy hasonló probléma, részletesebb beszámolót, hogyan kell összeállítani a cx_Freeze nem volt szükség
Összeszerelése a telepítő fájlt:
Ezzel talán meg kellett kezdeni. Át / átviteli kényelem összeállított kérelmet lehet közvetlenül részt vesznek az MSI-fájl. Ez egy szabványos Windows telepítő fájl, hogy futás közben figyelmezteti a felhasználót, hogy válassza ki a telepítési könyvtár és kivonat minden adatot vissza. Mégis, lehetetlenné teszi, hogy összegyűjti a teljes alkalmazás egyetlen .exe fájlt (hogy őszinte legyek, nem tudom, hogy ez miért van szükség). Make-msi fájlt az parancsot a konzolba: