python - Kan jeg styre arkitekturen (32bit vs 64bit), når du opretter en pyinstaller eksekverbar?---------- Kort spørgsmål

Indlæg af Hanne Mølgaard Plasc

Problem

Kort spørgsmål
Er der nogen måde at kontrollere / garantere arkitekturen (32bit vs 64bit), når du opretter en pyinstaller eksekverbar? Baggrund
Jeg migrerede fra py2exe til pyinstaller på grund af manglen på 64bit support sammen med en lang række små ting, som jeg har svært ved at kigge forbi. Så jeg vil gerne ikke for at gå tilbage til det. Jeg har udviklet to applikationer ved hjælp af Python 2,7 64bit og har ydeevne problemer, når de kører på dem 32 bit maskiner. Den første er en simpel wxPython GUI (version 2.9) og forbinder til en Windows DLL-fil til en USB-driver. Denne synes ret 'sikker' at køre som 32 bit, fordi der ikke er nogen moduler, der kun er 64bit. Men denne applikation, når du kører på 32bit Windows XP, har forfærdelige præstationsproblemer, når du taler til USB-enheden. Den anden ansøgning er meget større, og jeg har ikke forsøgt at bygge og køre endnu på grund af frygten for arkitekturproblemer. Denne applikation har et antal 64bit kun moduler (psycopg2 for en), der anvendes i den. Jeg vil gerne være væk fra at forsøge at bygge dette, hvis det umuligt skal køre som en 32bit eksekverbar. Nuværende tanker
Jeg føler, at dette kunne være muligt (hvis modulerne har 32bit support) ved at køre build.py med Python tvunget i 32bit mode. Gør det noget fornuftigt? Opdater
Jeg havde flere gennembrud på det første program, jeg byggede. Det viser sig, at præstationsproblemerne udelukkende var baseret på hastigheden af ​​de to maskiner. Min dev-maskine havde nok strøm til at undersøge USB-enheden hurtigt nok, og den meget langsommere testplatform (Windows XP) gjorde det ikke. Jeg løste dette problem ved at ændre den måde, hvorpå jeg pollede USB-porten. Nu da dette blev løst, kunne jeg køre exe på begge systemer. Et nyt problem var opstået, da man forsøgte at bygge den eksekverbare som en enkelt fil. Når du kører pyinstallerens Build.py, trækker den i alle de nødvendige DLL'er, som appen skal køre. Dette syntes at fungere godt i starten, men da jeg forsøgte at køre single exe, som jeg byggede på Windows 7 64bit, ville det ikke køre på Windows XP, fordi USB dongle'ens DLL ikke blev anerkendt som en gyldig DLL. For at få single exe til at køre på begge systemer forsøgte jeg først at fjerne DLL fra .spec filen (som synes at være et python script). Det var praktisk, fordi jeg var i stand til at ændre listen over inkluderede forud for build-kommandoen med ordinære pythonlistemodifikatorer. Jeg håbede, at hvis DLL'en ikke blev fundet i exe's temp-mappe, ville den finde den på systemet PATH. Mens denne fremgangsmåde måske kunne arbejde, kunne jeg ikke få det til at køre uden at kaste masser af fejl. Mit andet forsøg var at bygge applikationen på Windows XP-maskinen (forlader DLL'en indlejret) i håb om, at Win XP DLL'en ville fungere i Windows 7. Succes! Denne konfiguration fungerer godt; men jeg tror stærkt på, at dette ikke er den bedste løsning, som det kun afhænger af den ældre DLL, der kører på et nyere OS.

Bedste reference

Pyinstaller producerer et binært afhængigt af pythonen, du plejede at bygge den. Så hvis du bruger python 2,7 64 bit, er det ikke muligt, så vidt jeg ved, at producere en 32 bit eksekverbar. Dette skyldes, at Pyinstaller arkiverer alle moduler og deres afhængigheder (dlls, pyds osv.), Som er 64 bit på grund af pythoninstallationen. Som det allerede er sagt, er det bedre at bygge 32-bit binære filer på grund af kryds kompatibilitetsproblemer. Sandsynligvis kan du angive mere dit spørgsmål.

Andre referencer 1

Hvis du bygger en applikation, og den kører fint på 32-bit Windows, er der ikke behov for at oprette en 64-bit version. Bare lav en 32-bit version og kør den på begge arkitekturer. Hvad er hvad WOW64 er til. Hvis du skal bruge et bibliotek eller en funktion, der kun er 64-bit, skal du bare opbygge en 64-bit version. Der er ingen mening om at opbygge en 32-bit version, hvis funktionen kun er 64-bit. Den eneste grund til at bygge en 64-bit og 32-bit version begge er at drage fordel af øget adresserum på 64-bit windows. Dvs. hvis du har til hensigt at allokere mere end 1 eller 2 GB hukommelse. Et eksempel kan være et billedredigeringsprogram eller et data manipulationsprogram. Derefter kan du køre på 32-bit platforme inden for rammerne af platformen, men rediger større billeder eller større mængder data på 64-bit platforme. IOW, for din sag følger forslaget til @Velociraptors og bygg i 32-bit python, hvis du bygger en 32-bit exe.