Questo è un po 'complesso e potrebbe richiedere un po' di tempo.cx-freeze, runpy e multiprocessing - più percorsi al fallimento
Il problema di base è che su linux (Ubuntu nel mio caso di test) una versione cx-freeze del mio programma (Omnitool) non è in grado di creare sottoprocessi. Funziona su Windows 7, tuttavia. O quando si esegue direttamente dal codice sorgente. Sfortunatamente non è così semplice come dimenticare freeze_support
.
Il problema
comportamento predefinito di avviare un sottoprocesso, è che il crash del server X. Nello specifico in questo modo:
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
after 23 requests (23 known processed) with 0 events remaining.
[xcb]Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
Omnitool: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
Aborted (core dumped)
Non esiste alcun traceback Python. Ho provato a chiamare manualmente XInitThreads
con ctypes, restituisce 0 per l'impostazione corretta, ma si blocca a prescindere. Poco prima dello schianto, l'interfaccia utente di pygame sviene, quindi mi aspetto che ci siano dei difetti.
Ora, impostando multiprocessing.set_start_method()
cambia problemi in giro: "forkserver" mi dà questa bella traceback, che mi dice nulla:
Impostazione a deporre le uova, invece, rende solo non fare nulla. Il processo inizia e passa attraverso __main__
, come posso provare con le stampe, ma non inserisce mai la funzione di destinazione per il sottoprocesso.
Cercando te
Assicurarsi di avere Ubuntu o Linux comparabili con python 3.4. Poi, per ottenere tutte le dipendenze:
Scarica omnitool come zip o clone da git: https://github.com/Berserker66/omnitool requirements.txt nel seguente codice è da Omnitool.
sudo apt-get update -qq
sudo apt-get install --fix-missing mercurial subversion python3-dev python3-numpy libav-tools libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev python3-pip
pip3 install -r requirements.txt
pip3 install cx_Freeze
di congelare, eseguire omnisetup.py
con l'argomento build
.
Ho anche provato a congelare con pyinstallers python 3 fork, che fallisce molto simile. Tuttavia, il file spec non è tracciato git.
Perché vuoi congelarlo per Linux? – Cyphase
Le dipendenze sono difficili da trovare, richiedono la compilazione e molte di queste vengono utilizzate solo durante la compilazione di pygame. Attualmente i miei utenti linux devono fare diversi passaggi in console per far funzionare il mio programma, mentre gli utenti di Windows eseguono semplicemente una configurazione e fanno clic. Mi piacerebbe fornire la stessa comodità a tutti gli utenti. Mi piacerebbe anche sapere personalmente perché questo non funziona e come risolvere, per curiosità. – Berserker
Due dei pacchetti di dipendenze non sono su pip o apt-get. Pygame-3 e pgu. – Berserker