我目前正在尝试设置 Gentoo Prefix。我获取了引导脚本并运行它,它在第三阶段完成了一部分并在 Portage 崩溃之前完成了内核头文件的安装。看起来该脚本继续尝试安装更多软件包,但任何调用尝试emerge
都只会导致ImportError
:
Traceback (most recent call last): File "$EPREFIX/usr/bin/emerge", line 41, in <module> import portage ImportError: No module named 'portage'
奇怪的是,是,事实上,目录位于$EPREFIX/usr/lib/python2.7/site-packages/portage
,其中包含__init__.py
和至少几十个模块。python2
直接使用前缀调用-c 'import portage'
也可以正常工作(尝试使用主机系统的 Python 给出ImportError
)。但据我所知,应该使用前缀 Python;前缀bin
s 位于 的前面$PATH
。也许脚本内部的某些东西错误地重置或忽略了$PATH
?
答案1
仔细检查你的python
!它可能不是你期望的版本。在我的系统上,python
被符号链接到python3.5
,即使sys-apps/portage
(提供portage
Python 包)还没有 Python 3.5 的目标。啊!
此时,您将无法portage
使用不同的目标进行重建(因为emerge
已损坏),因此请检查所有已安装的 Python 版本(或在 中查找$EPREFIX/usr/lib/python*/site-packages
),直到找到一个带有portage
包的版本。如果您有一个可以运行的版本eselect
(我这样做了),则可以使用它(请参阅eselect python help
);否则,您可以大概只需手动更改符号链接即可。此后,Portage 对我来说运行良好。
至于 Prefix 引导程序……似乎如果您再次以交互方式运行脚本,它将从头开始。我不想从头开始,所以我切换到“手动”引导过程并在第三阶段重新开始,此时脚本失败了。我真的不确定为什么不推荐这种方法,因为引导脚本可以完成所有工作,就像推荐的方法一样。
答案2
我在交叉编译基于 arm 的系统 armv7a-hardfloat-linux-gnueabi 时遇到了同样的问题。这个问题是在我更新 portage eix 和 portage-utiles 后出现的。下次 chrooting 和 env-update 或 emerge 时,进程失败,并显示上述确切消息。
我认为,这一定与 python 脚本的执行有关,并从主机环境中出现了 python-exec - emerge 运行正常,但并未解决问题。我开始查看 lib 目录,并意识到由于 crosse-dev 环境,我在 /usr 中获得了 lib64,并且在那里有一个 portage 目录。我将它们与 /usr/lib 合并,并从 /usr/lib -> /usr/lib64 建立了一个符号链接。在 / 下也是一样。所描述的问题对我来说已经消失了。
我不知道这是否也适用于您的情况,但它可能会给您一个新的提示,告诉您搜索的方向;)
干杯!