越来越多的 Linux 发行版使用 python 3.x 作为默认 python,但Yocto仍然使用 python 2.7。如何将 Yocto 与其中一种发行版一起使用?
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}
感谢你的帮助 !
这里的规范解决方案是使用 virtualenv 创建“python”为 python 2 的环境。
您可以通过覆盖 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
Linux 发行版通过调整 shebang 线以使用 Python 3,在逐个应用程序的基础上慢慢转移到 Python3。
如果您在命令行上键入,CentOS 7、Ubuntu 14.4 LTS、Debian Jessy 都默认python
使用 Python2.7 。
如果 Yocto 是使用包管理器安装的,它将适应 Linux 发行版上的任何工作,它可以使用通用的 sheband(加载python
)或显式的(加载python2
或python2.7
.
如果您自己安装 Yocto,它可能无法正常工作,因为您使用的系统默认为 3 系列中的 python,您可以从以下位置调整 shebang 行:
#!/usr/bin/env python
到
#!/usr/bin/env python2
我假设 python2.7 将在未来几年内可用并且可以按需安装,即使 python3 成为任何这些发行版的默认值(就像 python3 在默认情况下未安装时可用)。
从源代码安装 Yocto 时应考虑在 a 中运行它,virtualenv
以便设置一个干净的环境,这可能需要更多的工作,具体取决于依赖项,但确保您的应用程序有一个干净的工作环境,不会被任何破坏任何软件包的系统更新。如果你这样做,你的设置甚至可以使用不同于 Linux 发行版提供的 python2.7.X 版本。