2

越来越多的 Linux 发行版使用 python 3.x 作为默认 python,但Yocto仍然使用 python 2.7。如何将 Yocto 与其中一种发行版一起使用?

4

4 回答 4

4

Yocto 总是在 virtualenv 中运行。但是我找到了一种方法来欺骗它使用 python 2 ,设置默认 python 并将其包含在 PATH 环境变量中:

$ source oe-init-build-env build
$ mkdir build/python-bin
$ ln -s /usr/bin/python2 build/python-bin/python
$ ln -s /usr/bin/python2-config build/python-bin/python-config
$ export PATH=$(pwd)/build/python-bin:${PATH}

感谢你的帮助 !

于 2015-02-06T09:34:39.690 回答
1

这里的规范解决方案是使用 virtualenv 创建“python”为 python 2 的环境。

于 2015-03-12T11:52:17.047 回答
1

您可以通过覆盖 yocto 创建的 hosttools 符号链接来修复它。我设法使用 Shan-x 的修复程序启动了 yocto 构建,但它没有构建通过。

Yocto 为所有菜谱提供不同的环境。一些菜谱,尤其是来自 meta-openembedded 的菜谱需要hosttools。例如,这些主机工具是 python(预计是 python2)。然后这个 hosttools 在build/tmp/hosttools中被符号链接,并被添加到 $PATH。

蟒蛇-> /usr/bin/python

要将其更改为默认为 python2 只需将符号链接更改为指向 /usr/bin/python2

整个设置:

$ mkdir build/python-bin
$ ln -s /usr/bin/python2 build/python-bin/python
$ ln -s /usr/bin/python2-config build/python-bin/python-config
$ mkdir -p build/tmp/hosttools
$ ln -sf /usr/bin/python2 build/tmp/hosttools/python

自动更改为 python2 将导出 $PATH 添加到 sources/poky/oe-init-build-env,就在其他东西获取之前:

diff --git a/oe-init-build-env b/oe-init-build-env
index e813230a98..c981358577 100755
--- a/oe-init-build-env
+++ b/oe-init-build-env
@@ -47,6 +47,8 @@ if [ -z "$OEROOT" ]; then
 fi
 unset THIS_SCRIPT

+export PATH=$(pwd)/build/python-bin:${PATH}
+
 export OEROOT
 . $OEROOT/scripts/oe-buildenv-internal &&
     TEMPLATECONF="$TEMPLATECONF" $OEROOT/scripts/oe-setup-builddir || {

然后获取环境:

$ source oe-init-build-env build
于 2017-12-21T15:28:57.773 回答
0

Linux 发行版通过调整 shebang 线以使用 Python 3,在逐个应用程序的基础上慢慢转移到 Python3。

如果您在命令行上键入,CentOS 7、Ubuntu 14.4 LTS、Debian Jessy 都默认python使用 Python2.7 。

如果 Yocto 是使用包管理器安装的,它将适应 Linux 发行版上的任何工作,它可以使用通用的 sheband(加载python)或显式的(加载python2python2.7.

如果您自己安装 Yocto,它可能无法正常工作,因为您使用的系统默认为 3 系列中的 python,您可以从以下位置调整 shebang 行:

#!/usr/bin/env python

#!/usr/bin/env python2

我假设 python2.7 将在未来几年内可用并且可以按需安装,即使 python3 成为任何这些发行版的默认值(就像 python3 在默认情况下未安装时可用)。

从源代码安装 Yocto 时应考虑在 a 中运行它,virtualenv以便设置一个干净的环境,这可能需要更多的工作,具体取决于依赖项,但确保您的应用程序有一个干净的工作环境,不会被任何破坏任何软件包的系统更新。如果你这样做,你的设置甚至可以使用不同于 Linux 发行版提供的 python2.7.X 版本。

于 2015-02-06T08:09:12.430 回答