【问题标题】:Install Python 3 on Cloudready/Chromium/Chrome OS without installing Linux containers/environments在 Cloudready/Chromium/Chrome OS 上安装 Python 3,无需安装 Linux 容器/环境
【发布时间】:2021-01-07 12:03:17
【问题描述】:

最近我在 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 / $

我尝试从get-pip.py 提供的here 脚本中为 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 安装程序引发异常/错误 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 以及人们投票为 answer 的内容仍然对我不起作用。以下命令...

$ 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 版本 48 上成功安装带有 Tkinter 和 PyInstaller 的 Python 3.6,而无需安装 Linux 容器/环境(例如安装官方 Linux(Beta)或 Crouton 的选项)或从 Google Play 商店安装任何东西?

【问题讨论】:

  • tkinter 无法通过 pip 安装。
  • 哎呀。我忘记了不能使用 PIP 安装 Tkinter 的事实。考虑到这一点,我编辑了这篇文章。

标签: python python-3.x tkinter pyinstaller google-chrome-os


【解决方案1】:

可能有两种可能性:

1)。 python3.6已经安装好了。

WARNING: A requested package will not be merged because it is listed in
package.provided:

检查该尝试:

which python3 或者干脆尝试运行 python3.

2)。卸载 python2 以便甚至不需要合并也可以帮助您。

【讨论】:

  • 较新版本的 Chrome/Chromium OS 预装了 Python 3.6,但我的 Chromium 48 安装较旧,并且有一个已弃用的 Python 2.7 版本。 Portage 没有意识到 Python 可以升级,因此不会安装更新版本的 Python。
  • 那么我担心你将不得不继续使用 python 2.7 或升级你的操作系统
  • 在这个问题上安装 Python 3.6 已经有了答案,它是通过使用 Miniconda。它对我有用。
  • 哦,是的,太好了!但它可能有一些局限性
【解决方案2】:

answer that explains why Miniconda doesn't install 是正确的,/tmp 被挂载为noexec(挂载时没有可执行权限)。不幸的是,他们建议的修复方法(指定不同的TMPDIR 安装目录)对我不起作用。但是,我最终设法找到了另一种方法。

所以,重启 Chromebook 并进入开发者模式。打开 Crosh (Chrome Developer Shell) 并输入命令 shell 以访问隐藏的 Bash shell(如我我使用的是 Chromium OS 开发人员版本,而不是 Chrome OS,我不需要进入开发人员模式即可访问 Bash shell)。

现在,不要像我之前引用的答案中建议的那样指定不同的TMPDIR 目录,而是将tmp 重新挂载为exec(具有可执行权限):

sudo mount /tmp -o remount,exec

当提示输入密码时,输入用户 chronos 的密码。 chronos 有(显然)几个不同的默认密码,包括 facepunchpasswordchromelocalhosttest0000 和空白密码(无)。就我而言,它是chrome。如果您使用的是官方 Chromebook 并已启动进入开发者模式,您应该在启用开发者模式时使用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 并再次进入 Bash shell。使用echo $PATH 验证已安装的 Conda 二进制文件的目录是否在 PATH 中,如果 /usr/local/conda3/bin 在 PATH 中,请使用 python3 --version 验证 Python 是否已安装。

现在是时候安装其他模块了。 Miniconda 的安装包括包管理器 Conda,它专门安装 Python 包(但是,Conda 中还有一些其他包可用,例如 GCC)。使用 Conda,您可以安装 Tkinter、PyInstaller 和许多其他 Python 包:

conda install -c anaconda tk
conda install -c anaconda pyinstaller

安装 PyInstaller 可以,但在 Chromium OS 上似乎没有 objcopy 这样的工具,这意味着 PyInstaller 无法编译任何 Python 脚本,并且如 PyInstaller 要求中所述,lddobjcopy , 和 objdump 必须安装 PyInstaller 才能在 Linux 安装上工作。解决方法是在另一台 Linux 计算机上使用 PyInstaller 编译 Python 脚本,然后在 Chrome/Chromium 操作系统上运行编译后的脚本。

此外,在较新版本的 Chromium OS 上,图形 Python 应用程序(使用 Tkinter、PyQt 等制作)无法运行,因为它们无法识别系统 DISPLAY 环境变量。问题在于 Chrome/Chromium 操作系统的整个图形显示由 Google Chrome 网络浏览器程序控制,并且网络浏览器在没有 DISPLAY 变量的情况下运行,这意味着用户在操作系统中启动的任何 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 程序了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2020-01-24
    • 2021-09-10
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多