Почему Portage жалуется на отсутствие Python-модуля `portage`?
В настоящее время я пытаюсь настроить префикс Gentoo. Я взял скрипт начальной загрузки и запустил его, он прошел половину этапа и завершил установку заголовков ядра до того, как 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
с перед $PATH
, Возможно, что-то во внутренностях скрипта ошибочно сбрасывается или игнорируется $PATH
?
2 ответа
Дважды проверьте ваш python
! Это может быть не та версия, которую вы ожидаете. В моей системе python
был связан с python3.5
, даже если sys-apps/portage
(который обеспечивает portage
Пакет Python) еще не было цели для Python 3.5. Argh!
На этом этапе вы не сможете восстановить portage
с разными целями (потому что emerge
не работает), поэтому проверьте все установленные версии Python (или покопайтесь в $EPREFIX/usr/lib/python*/site-packages
) пока не найдешь portage
пакет. Если у вас есть работа eselect
(Я сделал), вы можете использовать его (см. eselect python help
); в противном случае вы, вероятно, можете просто изменить символическую ссылку вручную. После этого Portage работал нормально для меня.
Что касается начальной загрузки Prefix... кажется, что если вы просто снова запустите скрипт в интерактивном режиме, он начнется заново, с самого начала. Я не хотел начинать все сначала, поэтому я переключился на "ручной" процесс начальной загрузки и поднялся на третьем этапе, где сценарий потерпел неудачу. Я действительно не уверен, почему этот метод рекомендуется против, учитывая, что скрипт начальной загрузки выполняет всю работу, как в рекомендованном методе.
I encountered the same probelem druing crosscompilation of an arm based system - armv7a-hardfloat-linux-gnueabi. The problem started after I uptedated portage eix and portage-utiles. next time chrooting and env-update or emerge the process faild with the exact message posted above.
I thought, it must be related to the executrion of the python script and emerged python-exec from the host environment - emerge went fine, however did not solve the problem. I staterd looking around in the lib directories and realzed that due to the crosse-dev environment I got a lib64 in /usr and in there a portage directroy. I merged them with /usr/lib and made asymlink from /usr/lib -> /usr/lib64. the same under /. the problem dscribed is gone for me.
I dont know if this will apply for your case too, but it might give you a new hint which direction to search ;)
ура!