opbygge en .exe til Windows fra et python 3 script, der importerer theano med pyinstaller

Indlæg af Hanne Mølgaard Plasc

Problem



rediger september, 2, 2017, 1 pm


Jeg formåede efterhånden at bygge en .exe med pyinstaller efter mange episoder.


Desværre har jeg undladt at håndtere 'theano'-modulet (det kræves i mit tilfælde af' pymc3'-modulet), og jeg var nødt til at ændre .py-filer og opgive en del af applikationen. Min beskrivelse nedenfor har to formål: først kan det hjælpe; Andet kan nogen hjælpe mig med at opbygge en .exe til Windows 7+, med 'theano'-modulet?


påmindelse: My python 3 script åbner en simpel GUI lavet med Qt Designer i en '.ui' fil og importerer pyqtgraph (med pyqt5), pymc3 (og dermed theano der kræves af pymc3), scipy, numpy, os, sys. Det vil blive distribueret på maskiner med Windows 7+. Jeg forsøgte at bygge en .exe med py2exe, cx\_freeze, pynsist og pyinstaller (jeg åbnede og opdaterede flere indlæg, denne er stadig åbnet: build a .exe for Windows fra et python 3 script, der importerer pyqtgraph og åbner en GUI) men alle mislykkedes. Mit bedste resultat (med pyinstaller) er beskrevet nedenfor, efter at jeg var nødt til at opgive theano.



  • Kommandolinjen jeg endte med er: pyinstaller —noupx —onefile —add-data “toto.ui;.” toto.py. Men underligt: ​​



1 qt designerfilen 'toto.ui' er ikke inkluderet og skal distribueres sammen med .exe. Ellers er der en fejlmeddelelse, når du kører .exe siger toto.ui ikke fundet;


2 mappen 'platforme' fra biblioteket 'Bibliotek/plugin' i python-miljøet skal også distribueres sammen med .exe. Ellers er der en fejlmeddelelse, når du kører .exe 'denne applikation har ikke startet, fordi den ikke kunne finde qt'en
platform plugin windows '(men der er ingen fejlmeddelelse fra pyinstaller, når du bygger!)


3 .exe er 220MB stor! Det ser ud til, at pyinstaller indeholder en flok ubrugelige ting under bygningen.



  • pyqtgraph problem:



Ved første øjekast synes modulet 'pyqtgraph' at være uforeneligt med pyinstaller. Faktisk, når python-koden importerer pyqtgraph, giver pyinstaller en SyntaxError: ‘yield’ inside async function. Dette forekommer mig meget akavet (er dette en fejl i pyinstaller?), Fordi jeg havde indtryk af fora, er dette relateret til asynkrone generatorer, der kun er kompatible med python 3.6, mens pyinstaller kun virker med python 3,5 - det er ikke kompatibelt med asynkron generatorer ... så hvorfor bruger pyinstaller dette? Det viser sig, at denne fejlfunktion er deaktiveret i en ny version af pyinstaller, der ikke er udgivet (og så ikke installeret som standard): pip install git+https://github.com/pyinstaller/pyinstaller, takket være 9dogs (i kommentarer). Jeg fandt også, at det kan hjælpe med at eksplicit skrive os.environ [['PYQTGRAPH\_QT\_LIB']]='PyQt5 'eller' PyQt4 'før import af pyqtgraph i py filen (er)



  • theano problem:



theano viser sig at foretage flere implicitte import, der ikke er registreret af pyinstaller. Således ser bygningen ud, men når du kører .exe får du fejlmeddelelser som 'no module theano.tensor.shared\_randomstreams'. Desværre har jeg undladt at bruge indstillingen 'skjult import' af pyinstaller, så jeg tilføjede eksplicit importen i py-filerne (i dette eksempel importerer theano.tensor.shared\_randomstreams).


Men dette er ikke enden: efter det mangler filen '... \ AppData \ Local \ Temp\_MEI35682 \ theano \ gpuarray \ blockgemv.c ', hvilket fører til [4128] Failed to execute script. Jeg ved ikke, hvad denne fil er, og fandt ikke oplysninger. Jeg gav op og fjernede en del af GUI'en for at undgå theano. Kan nogen hjælpe mig med at bruge theano med pyinstaller?

Bedste reference