在 Cloudready/Chromium/Chrome OS 上安装 Python 3 而不安装 Linux containers/environments
Install Python 3 on Cloudready/Chromium/Chrome OS without installing Linux containers/environments
最近我在 VirtualBox 6.1 上安装了 Neverware 的 Chromium OS 版本,称为 Cloudready,用于为 Chromebook 开发 Python 应用程序。此版本的 Chromium OS 是 48.0.2564.116 开发人员版本(由于图形不兼容,无法安装较新版本)。因为我没有 Google 帐户,所以我以访客用户身份登录 Chromium OS(我以访客身份拥有管理权限,这对我的开发目的很有帮助)。
我发现预装了 Python 2.7.3。我尝试安装 Python 3.6,为此,我尝试找到预安装的包管理器,最终找到了。预装的包管理器 (portage) 没有安装任何东西,因为它给出了类似于这个的错误:
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 / $
我尝试从 here 提供的 get-pip.py
脚本为 Python 2 安装 Python PIP,它成功了。因为我想为我的 Chromebook 程序创建图形界面,所以我想安装 tkinter
模块,因为我不希望我的程序的用户必须使用终端来执行我的 Python 程序并安装 Python 模块,我想安装 PyInstaller。我想通过 PIP 安装 PyInstaller,但 PIP 对任何尝试的模块安装都会抛出以下错误:
/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,
尝试安装 PyInstaller 时,PIP 实际上设法收集了 pyinstaller-4.0.tar.gz
包,但安装失败,因为 PyInstaller 安装程序引发 exception/error BackendUnavailable
,然后 PIP 引发再次出现 InsecurePlatformWarning
错误。正如@BryanOakley 所指出的,我无法从 PIP 安装 Tkinter,我在使用 Chromium OS 时忘记了这一点(例如,在 Ubuntu 上安装 Tkinter 的命令是 sudo apt-get install python3-tk
),这让事情变得更加棘手。
从出现的错误看来,我必须安装更新版本的 Python(我已经尝试过,但无济于事)。我尝试通过安装 Anaconda 3 然后安装 Miniconda 3 来安装 Python 3,但两者都提供相同的错误,我什至查看了 Stack Overflow 以及人们投票认为 仍然无效的内容为了我。以下命令...
$ mkdir ~/Downloads/TMP
$ TMPDIR=~/Downloads/TMP sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/miniconda3
...最终导致此输出:
/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
到目前为止没有任何效果。如何在Chromium OS Version 48上用Tkinter和PyInstaller成功安装Python 3.6而不安装Linux containers/environments(比如安装官方Linux的选项(测试版)或 Crouton)或从 Google Play 商店安装任何东西?
有两种可能:
1). python3.6 已经安装。
WARNING: A requested package will not be merged because it is listed in
package.provided:
要检查,请尝试:
which python3
或者干脆尝试 运行
python3
.
2).卸载 python2 这样甚至不需要合并也可以帮助您。
是正确的,/tmp
挂载为 noexec
(没有可执行权限挂载)。不幸的是,他们建议的修复方法(指定不同的 TMPDIR
安装目录)对我不起作用。但是,我最终设法找到了不同的方法。
因此,重新启动 Chrome本书并进入开发者模式。打开 Crosh (Chrome Developer Shell) 然后输入命令 shell
访问隐藏的 Bash shell(因为我使用的是 Chromium OS 开发人员构建,而不是 Chrome OS,我不需要输入开发人员模式访问 Bash shell).
现在,不要像我之前引用的答案中建议的那样指定不同的 TMPDIR
目录,而是将 tmp
重新挂载为 exec
(具有可执行权限):
sudo mount /tmp -o remount,exec
当提示输入密码时,输入用户 chronos
的密码。 chronos
有(显然)几个不同的默认密码,包括 facepunch
、password
、chrome
、localhost
、test0000
和一个空白密码(无)。在我的例子中是 chrome
。如果您使用的是官方 Chrome 书籍并且已启动进入开发者模式,则您应该在启用开发者模式时使用 chromeos-setdevpasswd
设置密码(有关更多信息,请单击 here)。
之后,从 Conda website 下载 Linux 的 Miniconda 安装脚本(记得下载 64 位版本),将工作目录更改为下载的 Miniconda 安装位置脚本文件,运行 它,并将安装位置更改为具有写入权限的位置(在我的例子中 /usr/local/conda3
)。
cd ~/Downloads
sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/conda3
安装完成后,您必须将 Conda 安装添加到 PATH:
echo "PATH=/usr/local/conda3/bin:$PATH" >> ~/.bashrc
重启Crosh,再次进入Bashshell。验证已安装的 Conda 二进制文件的目录是否在带有 echo $PATH
的 PATH 中,如果 /usr/local/conda3/bin
在 PATH 中,请验证 Python 是否已安装 python3 --version
.
现在是时候安装其他模块了。 Miniconda 的安装包括专门安装 Python 包的包管理器 Conda(但是,Conda 中还有一些其他可用的包,例如 GCC)。使用 Conda,您可以安装 Tkinter、PyInstaller 和许多其他 Python 软件包:
conda install -c anaconda tk
conda install -c anaconda pyinstaller
安装 PyInstaller 有效,但在 Chromium OS 上似乎没有 objcopy
这样的工具,这意味着 PyInstaller 无法编译任何 Python 脚本,并且如前所述在 PyInstaller 要求中,必须安装 ldd
、objcopy
和 objdump
,PyInstaller 才能在 Linux 安装上运行。解决方法是在另一台 Linux 计算机上使用 PyInstaller 编译 Python 脚本,然后 运行 在 Chrome/Chromium OS.
上编译脚本
此外,在较新版本的 Chromium OS 上,图形 Python 应用程序(使用 Tkinter、PyQt 等制作)不会 运行,因为它们无法识别系统显示环境变量。问题是 Chrome/Chromium OS 的整个图形显示由 Google Chrome 网络浏览器程序和没有 DISPLAY 变量的网络浏览器 运行 控制,这意味着用户在 OS 中启动的任何 GUI 程序(意味着它将由 Chrome 浏览器启动)将在没有 DISPLAY 变量的情况下启动。
解决方法是为 Chrome 浏览器设置 DISPLAY 变量。为此,您需要使用命令 sudo su
以 root 身份登录,因为 Crosh 不允许编辑您需要编辑的文件,即使使用 sudo
命令也是如此。使用 sudo su
以 root 身份登录后,您将需要 运行 以下命令:
mount -o remount,rw /dev/root /
echo "DISPLAY=:0" >> /etc/chrome_dev.conf
然后重新启动,现在您应该可以 运行 图形 Python 程序以及控制台 Python 程序。
最近我在 VirtualBox 6.1 上安装了 Neverware 的 Chromium OS 版本,称为 Cloudready,用于为 Chromebook 开发 Python 应用程序。此版本的 Chromium OS 是 48.0.2564.116 开发人员版本(由于图形不兼容,无法安装较新版本)。因为我没有 Google 帐户,所以我以访客用户身份登录 Chromium OS(我以访客身份拥有管理权限,这对我的开发目的很有帮助)。
我发现预装了 Python 2.7.3。我尝试安装 Python 3.6,为此,我尝试找到预安装的包管理器,最终找到了。预装的包管理器 (portage) 没有安装任何东西,因为它给出了类似于这个的错误:
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 / $
我尝试从 here 提供的 get-pip.py
脚本为 Python 2 安装 Python PIP,它成功了。因为我想为我的 Chromebook 程序创建图形界面,所以我想安装 tkinter
模块,因为我不希望我的程序的用户必须使用终端来执行我的 Python 程序并安装 Python 模块,我想安装 PyInstaller。我想通过 PIP 安装 PyInstaller,但 PIP 对任何尝试的模块安装都会抛出以下错误:
/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,
尝试安装 PyInstaller 时,PIP 实际上设法收集了 pyinstaller-4.0.tar.gz
包,但安装失败,因为 PyInstaller 安装程序引发 exception/error BackendUnavailable
,然后 PIP 引发再次出现 InsecurePlatformWarning
错误。正如@BryanOakley 所指出的,我无法从 PIP 安装 Tkinter,我在使用 Chromium OS 时忘记了这一点(例如,在 Ubuntu 上安装 Tkinter 的命令是 sudo apt-get install python3-tk
),这让事情变得更加棘手。
从出现的错误看来,我必须安装更新版本的 Python(我已经尝试过,但无济于事)。我尝试通过安装 Anaconda 3 然后安装 Miniconda 3 来安装 Python 3,但两者都提供相同的错误,我什至查看了 Stack Overflow 以及人们投票认为
$ mkdir ~/Downloads/TMP
$ TMPDIR=~/Downloads/TMP sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/miniconda3
...最终导致此输出:
/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
到目前为止没有任何效果。如何在Chromium OS Version 48上用Tkinter和PyInstaller成功安装Python 3.6而不安装Linux containers/environments(比如安装官方Linux的选项(测试版)或 Crouton)或从 Google Play 商店安装任何东西?
有两种可能:
1). python3.6 已经安装。
WARNING: A requested package will not be merged because it is listed in
package.provided:
要检查,请尝试:
which python3
或者干脆尝试 运行
python3
.
2).卸载 python2 这样甚至不需要合并也可以帮助您。
/tmp
挂载为 noexec
(没有可执行权限挂载)。不幸的是,他们建议的修复方法(指定不同的 TMPDIR
安装目录)对我不起作用。但是,我最终设法找到了不同的方法。
因此,重新启动 Chrome本书并进入开发者模式。打开 Crosh (Chrome Developer Shell) 然后输入命令 shell
访问隐藏的 Bash shell(因为我使用的是 Chromium OS 开发人员构建,而不是 Chrome OS,我不需要输入开发人员模式访问 Bash shell).
现在,不要像我之前引用的答案中建议的那样指定不同的 TMPDIR
目录,而是将 tmp
重新挂载为 exec
(具有可执行权限):
sudo mount /tmp -o remount,exec
当提示输入密码时,输入用户 chronos
的密码。 chronos
有(显然)几个不同的默认密码,包括 facepunch
、password
、chrome
、localhost
、test0000
和一个空白密码(无)。在我的例子中是 chrome
。如果您使用的是官方 Chrome 书籍并且已启动进入开发者模式,则您应该在启用开发者模式时使用 chromeos-setdevpasswd
设置密码(有关更多信息,请单击 here)。
之后,从 Conda website 下载 Linux 的 Miniconda 安装脚本(记得下载 64 位版本),将工作目录更改为下载的 Miniconda 安装位置脚本文件,运行 它,并将安装位置更改为具有写入权限的位置(在我的例子中 /usr/local/conda3
)。
cd ~/Downloads
sudo bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh -p /usr/local/conda3
安装完成后,您必须将 Conda 安装添加到 PATH:
echo "PATH=/usr/local/conda3/bin:$PATH" >> ~/.bashrc
重启Crosh,再次进入Bashshell。验证已安装的 Conda 二进制文件的目录是否在带有 echo $PATH
的 PATH 中,如果 /usr/local/conda3/bin
在 PATH 中,请验证 Python 是否已安装 python3 --version
.
现在是时候安装其他模块了。 Miniconda 的安装包括专门安装 Python 包的包管理器 Conda(但是,Conda 中还有一些其他可用的包,例如 GCC)。使用 Conda,您可以安装 Tkinter、PyInstaller 和许多其他 Python 软件包:
conda install -c anaconda tk
conda install -c anaconda pyinstaller
安装 PyInstaller 有效,但在 Chromium OS 上似乎没有 objcopy
这样的工具,这意味着 PyInstaller 无法编译任何 Python 脚本,并且如前所述在 PyInstaller 要求中,必须安装 ldd
、objcopy
和 objdump
,PyInstaller 才能在 Linux 安装上运行。解决方法是在另一台 Linux 计算机上使用 PyInstaller 编译 Python 脚本,然后 运行 在 Chrome/Chromium OS.
此外,在较新版本的 Chromium OS 上,图形 Python 应用程序(使用 Tkinter、PyQt 等制作)不会 运行,因为它们无法识别系统显示环境变量。问题是 Chrome/Chromium OS 的整个图形显示由 Google Chrome 网络浏览器程序和没有 DISPLAY 变量的网络浏览器 运行 控制,这意味着用户在 OS 中启动的任何 GUI 程序(意味着它将由 Chrome 浏览器启动)将在没有 DISPLAY 变量的情况下启动。
解决方法是为 Chrome 浏览器设置 DISPLAY 变量。为此,您需要使用命令 sudo su
以 root 身份登录,因为 Crosh 不允许编辑您需要编辑的文件,即使使用 sudo
命令也是如此。使用 sudo su
以 root 身份登录后,您将需要 运行 以下命令:
mount -o remount,rw /dev/root /
echo "DISPLAY=:0" >> /etc/chrome_dev.conf
然后重新启动,现在您应该可以 运行 图形 Python 程序以及控制台 Python 程序。