Installa Python 3 su Cloudready / Chromium / Chrome OS senza installare contenitori / ambienti Linux
Recentemente ho installato la versione Neverware di Chromium OS, chiamata Cloudready, su VirtualBox 6.1, per sviluppare app Python per Chromebook. Questa versione di Chromium OS è 48.0.2564.116 build per sviluppatori (le versioni più recenti non verranno installate a causa di incompatibilità grafiche). Poiché non ho un account Google, accedo a Chromium OS come utente Guest (in qualche modo ho poteri amministrativi come Guest, il che è positivo per i miei scopi di sviluppo).
Ho scoperto che Python 2.7.3 era preinstallato. Ho provato a installare Python 3.6 e, per farlo, ho provato a trovare il gestore di pacchetti preinstallato, che alla fine ho trovato. Il gestore di pacchetti preinstallato (portage), non installa nulla, perché dà errori simili a questo:
chronos@localhost / $ sudo emerge dev-lang/python:3.6
!!! PORTAGE_BINHOST unset, but use is requested.
!!! Problem with sandbox library. Disabling...
Calculating dependencies... done!
WARNING: A requested package will not be merged because it is listed in
package.provided:
dev-lang/python:3.6 pulled in by 'args'
>>> Auto-cleaning packages...
>>> No outdated packages were found on your system.
chronos@localhost / $
Ho provato a installare Python PIP per Python 2 dallo get-pip.pyscript fornito qui e ha funzionato. Poiché voglio creare interfacce grafiche per i miei programmi per Chromebook, volevo installare il tkintermodulo e poiché non volevo che gli utenti dei miei programmi dovessero utilizzare il Terminale per eseguire i miei programmi Python e installare i moduli Python, volevo per installare PyInstaller. Volevo installare PyInstaller tramite PIP, ma PIP genera il seguente errore per qualsiasi tentativo di installazione del modulo:
/usr/local/lib64/python2.7/site-packages/pip/_vendor/urllib3/util/ssl_.py:387: SNIMissingWarning: An HTTPS requ
est has been made, but the SNI (Server Name Indication) extension to TLS is not available on this platform. Thi
s may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can up
grade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/l
atest/advanced-usage.html#ssl.warnings
SNIMissingWarning,
/usr/local/lib64/python2.7/site-packages/pip_vendor/urllib3/util/ssl_.py:142: InsecurePlatformWarning: A true
SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause cert
ain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information,
see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecurePlatformWarning,
Quando si tenta di installare PyInstaller, PIP è effettivamente riuscito a raccogliere il pyinstaller-4.0.tar.gzpacchetto, ma non riesce durante l'installazione perché il programma di installazione di PyInstaller genera un'eccezione / errore BackendUnavailable, quindi PIP genera InsecurePlatformWarningnuovamente l' errore. Come sottolineato da @BryanOakley, non posso installare Tkinter da PIP, cosa che ho dimenticato mentre stavo usando Chromium OS (ad esempio, il comando per installare Tkinter su Ubuntu è sudo apt-get install python3-tk), il che rende le cose ancora più complicate.
Dagli errori sollevati, sembra che devo installare una versione più recente di Python (che ho già provato, inutilmente). Ho provato a installare Python 3 installando Anaconda 3 e poi Miniconda 3, ma entrambi forniscono lo stesso errore, e ho persino esaminato Stack Overflow e ciò che le persone avevano votato come risposta ancora non funzionava per me. I seguenti comandi ...
$ mkdir ~/Downloads/TMP
$ TMPDIR=~/Downloads/TMP sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/miniconda3
... alla fine risulta in questo output:
/usr/local/miniconda3/conda.exe: error while loading shared libraries: libz.so.1: failed to segment from sh
ared object: Operation not permitted
/usr/local/miniconda3/conda.exe: error while loading shared libraries: libz.so.1: failed to segment from sh
ared object: Operation not permitted
Finora niente ha funzionato. Come posso installare con successo Python 3.6 con Tkinter e PyInstaller su Chromium OS versione 48 senza installare contenitori / ambienti Linux (come l'opzione per installare Linux (Beta) o Crouton ufficiali) o installare qualcosa dal Google Play Store?
Risposte
Ci possono essere 2 possibilità:
1). Il python3.6 è già installato.
WARNING: A requested package will not be merged because it is listed in
package.provided:
Per verificare che prova:
which python3
o semplicemente prova a correre
python3.
2). La disinstallazione di python2 in modo che l'unione non sia nemmeno necessaria può anche aiutarti.
La risposta che spiega perché Miniconda non si installa era corretta che /tmpè montata come noexec(montata senza autorizzazione eseguibile). Sfortunatamente, il loro approccio suggerito per risolverlo (specificare una TMPDIRdirectory diversa per l'installazione) non ha funzionato per me. Tuttavia, alla fine sono riuscito a trovare un approccio diverso.
Quindi, riavvia il Chromebook e accedi alla modalità sviluppatore. Apri Crosh ( C h ro me Developer Sh ell) e digita il comando shellper accedere alla shell Bash nascosta (poiché sto usando la build per sviluppatori di Chromium OS, non Chrome OS, non ho bisogno di entrare in una modalità sviluppatore per accedere a Bash conchiglia).
Ora, invece di specificare una TMPDIRdirectory diversa come suggerito nella risposta a cui ho fatto riferimento in precedenza, rimonta tmpcome exec(con autorizzazione eseguibile):
sudo mount /tmp -o remount,exec
Quando viene richiesta una password, digitare la password per l'utente chronos. Ci sono (apparentemente) più password predefinite diverse per chronos, tra cui facepunch, password, chrome, localhost, test0000, e una password vuota (nulla). Nel mio caso lo era chrome. Se stai utilizzando un Chromebook ufficiale e hai avviato la modalità sviluppatore, dovresti aver impostato una password con chromeos-setdevpasswdquando attivi la modalità sviluppatore (per maggiori informazioni fai clic qui ).
Successivamente, scarica lo script di installazione di Miniconda per Linux dal sito Web di Conda (ricordati di scaricare la versione a 64 bit), cambia la directory di lavoro nella posizione del file di script di installazione di Miniconda scaricato, eseguilo e cambia il percorso di installazione in una posizione con privilegi di scrittura (nel mio caso /usr/local/conda3).
cd ~/Downloads
sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/conda3
Al termine dell'installazione, è necessario aggiungere l'installazione di Conda a PATH:
echo "PATH=/usr/local/conda3/bin:$PATH" >> ~/.bashrc
Riavvia il Crosh ed entra di nuovo nel guscio Bash. Verifica che la directory dei binari di Conda installati sia in PATH con echo $PATHe se /usr/local/conda3/binè in PATH, verifica che Python sia installato con python3 --version.
Ora è il momento di installare altri moduli. L'installazione di Miniconda include il gestore di pacchetti Conda che installa specificamente i pacchetti Python (tuttavia, ci sono altri pacchetti disponibili in Conda, come GCC). Usando Conda, puoi installare Tkinter, PyInstaller e molti altri pacchetti Python:
conda install -c anaconda tk
conda install -c anaconda pyinstaller
Installazione PyInstaller funziona, ma sembra che su Chromium OS, non esiste strumento come objcopy, nel senso che PyInstaller non può compilare gli script Python, e, come spiegato nei requisiti PyInstaller, ldd, objcopy, e objdumpdeve essere installato per PyInstaller a lavorare su installazioni di Linux . La soluzione alternativa è compilare gli script Python con PyInstaller su un altro computer Linux e quindi eseguire lo script compilato su Chrome / Chromium OS.
Inoltre, sulle versioni più recenti del sistema operativo Chromium, le applicazioni grafiche Python (realizzate con Tkinter, PyQt, ecc.) Non vengono eseguite perché non riconoscono la variabile d'ambiente DISPLAY del sistema. Il problema è che l'intera visualizzazione grafica di Chrome / Chromium OS è controllata dal programma browser web Google Chrome e il browser web funziona senza variabile DISPLAY, il che significa che qualsiasi programma GUI avviato nel sistema operativo dall'utente (il che significa che sarebbe avviato dal browser Chrome) inizierebbe senza alcuna variabile DISPLAY.
La soluzione alternativa è impostare la variabile DISPLAY per il browser Chrome. Per fare ciò, dovrai accedere come root con il comando sudo su, in quanto Crosh non consente la modifica del file che dovrai modificare, anche con il sudocomando. Dopo aver effettuato l'accesso come root con sudo su, dovrai eseguire i seguenti comandi:
mount -o remount,rw /dev/root /
echo "DISPLAY=:0" >> /etc/chrome_dev.conf
Quindi riavvia e ora dovresti essere in grado di eseguire programmi Python grafici e programmi Python della console.