为什么 Portage 会抱怨缺少“portage”Python 模块?

为什么 Portage 会抱怨缺少“portage”Python 模块?

我目前正在尝试设置 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;前缀bins 位于 的前面$PATH。也许脚本内部的某些东西错误地重置或忽略了$PATH

答案1

仔细检查你的python!它可能不是你期望的版本。在我的系统上,python被符号链接到python3.5,即使sys-apps/portage(提供portagePython 包)还没有 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 建立了一个符号链接。在 / 下也是一样。所描述的问题对我来说已经消失了。

我不知道这是否也适用于您的情况,但它可能会给您一个新的提示,告诉您搜索的方向;)

干杯!

相关内容