Почему 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 ;)

ура!

Другие вопросы по тегам