Permalänk
Medlem

kompilera python?

Så jag har skrivit en kod i python med ett paket. Problemet är att om någon annan användare vill köra koden så kommer den att misslyckas för att de inte har paketen.

Kan jag kompilera koden så att användaren kan köra koden?

Permalänk
Medlem

Behövde göra något liknande för ett par år sedan. Minns inte detaljerna, men har för mig att jag använde PyInstaller för att generera en fristående exekverbar fil, och att det funkade bra. Notera dock att PyInstaller inte kompilerar programmet i den mening att den producerar binär kod, utan den bundlar bara upp och komprimerar ens script med alla dependencies och Python-interpretern i en enda körbar fil.

Sidenote: Har du kikat på Go? I vissa situationer kan det gå väldigt smidigt att bara översätta sitt Python-program till Go för att få mer prestanda och binär-kompilering utan mycket tjafs. Go är inte ett drop-in replacement för Python förstås, men jag finner att det finns ett vanligt subset av Python som många kodar i som översätter till Go nästan 1-till-1.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Hedersmedlem

Citerar mig själv från en äldre konversation:

Skrivet av phz:

Ett annat tips angående att du nämner att göra en "exe" av ditt program: detta är ofta smärtsamt i Python-världen så fort man börjar blanda in resursfiler och tredjepartsmoduler som ofta inte alls tar höjd för att köra i "frysta" miljöer. Pyinstaller, py2exe, cx_Freeze, m fl, projekt finns, men det är i verkligheten sällan så enkelt som det beskrivs i tillrättalagda exempel i dokumentationen just pga tredjepartsmoduler. Personligen föredrar jag bland dessa cx_Freeze, då det inte känns som att det aktivt motarbetar dig så fort du hamnar i en situation där default-inställningarna inte duger.

Börja med att få ditt program att köra genom en Python-tolk, och lägg till stöd för att kompilera till plattformsberoende binär i slutet, om det fortfarande är aktuellt.

PyInstaller som även nämndes tidigare i denna tråd skulle vara min första ansats. Ifall ens kod är ren Python-kod som inte har några särdeles krångliga paketberoenden så brukar detta flyga direkt.

Om det krånglar så finns det ofta möjlighet att lösa det inom PyInstallers ramar ändå, men min erfarenhet av PyInstaller är som jag skrev i citatet att när saker väl börjar krångla så finns det ingen ände på hur mycket man behöver slåss för att lyckas. I mer komplexa fall har jag haft bättre lycka med cx_Freeze.

Utöver vad jag skrev i citatet så finns numera även Nuitka som ett alternativ. Jag har inte testat det till något skarpt projekt ännu, men projektet låter onekligen intressant.

Kan också nämna att det gängse sättet att installera Python-program med beroenden är att låta användaren skapa en virtuell miljö ("virtual environment") och däri dra ner beroenden med PIP, men det kräver en Python-tolk och en del Python-vana hos mottagaren, så detta ska mer ses som ett alternativ för utvecklare än generella slutanvändare vad gäller distribution.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

@Bryal
Kolla på Golang. Mer som C och ser lite jobbigt att starta men allt Func etc i början. Men jag hitta inget bra exsempel på SSH anslutning så det får vara.

@phz
Tanken bara var att inte behöva ladda ner packet då viss okunniga kommer att få problem.

Tackar för hjälpen jag kan se vilket som funkar.