сборка python-3.7 из исходного кода, pip не устанавливается в altroot / DESTDIR - PullRequest
2 голосов
/ 20 марта 2019

У меня есть собственный дистрибутив Linux, и я собираю Python 3.7.2 из исходного кода.Сборка настроена для установки в альтернативный корневой каталог, из которого она будет упакована для установки.

Этот процесс отлично работает при запуске в системе, в которой еще не установлен python3.Но когда я запускаю тот же процесс сборки на хосте, на котором есть ранее собранная копия того же пакета, убедитесь, что pip не может установить pip или setuptools в альтернативный каталог установки, поскольку находит их в самой системе.

Программное обеспечение извлекается и конфигурируется следующим образом:

mkdir -p /data/buildspace/work/python3-x86_64
/bin/tar xf /data/sources/python3/Python-3.7.2.tgz \
     -C /data/buildspace/work/python3-x86_64
( cd /data/buildspace/work/python3-x86_64/Python-3.7.2 ; \
     [ -f ./configure ] && CC="gcc" CXX="g++" ./configure \
     --prefix=/usr --libdir=/usr/lib
     --sysconfdir=/etc --bindir=/usr/bin  || echo "No './configure' script")

Затем вызывается make install с указанным DESTDIR:

make -C /data/buildspace/work/python3-x86_64/Python-3.7.2
    install DESTDIR=/data/buildspace/work/python3-x86_64/root 

При первоначальном построении, перед тем как система сборки имеет python3Установленный, я вижу в выводе / log сборки:

if test "xupgrade" != "xno"  ; then \
    case upgrade in \
            upgrade) ensurepip="--upgrade" ;; \
            install|*) ensurepip="" ;; \
    esac; \
     ./python -E -m ensurepip \
            $ensurepip --root=/data/buildspace/work/python3-x86_64/root/ ; \
fi
Looking in links: /tmp/tmpa9_lumsc
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2

Однако, при сборке в системе, в которой установлен python3, я не могу найти какой-либо способ помешать ему рассмотреть pip в / usr /Библиотека / python3.7 / сайт-пакеты.Запуск той же конфигурации даст:

Looking in links: /tmp/tmp086yebrw
Requirement already up-to-date: setuptools in /usr/lib/python3.7/site-packages (40.6.2)
Requirement already up-to-date: pip in /usr/lib/python3.7/site-packages (18.1)

Затем я попытался --with-ensurepip=install, но это лишь немного изменило вывод:

Looking in links: /tmp/tmpl0x88vr9
Requirement already satisfied: setuptools in /usr/lib/python3.7/site-packages (40.6.2)
Requirement already satisfied: pip in /usr/lib/python3.7/site-packages (18.1)

Я не знаю, является ли этоошибка в surepip, где он не должен учитывать каталог библиотеки Python по умолчанию при запуске с указанным --root, или если что-то не хватает для этой «установки в совершенно новое пространство».

Я посмотрелпри идее использования venv , но я хочу, чтобы получающиеся двоичные файлы могли запускаться в обычных местах системы после упаковки и установки, поэтому я думаю, что это может быть неправильное направление.

Цените любые указатели.Спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Если вы хотите собрать Python в системе, в которой уже установлена ​​существующая версия Python, вам следует использовать make altinstall вместо make install. Прочтите предупреждение в официальной документации или узнайте больше о разнице между этими двумя командами .

Подход make install изменяет некоторые глобальные ссылки, которые могут , а затем путают установку pip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...