Как игнорировать локальный питон при создании питона из источника
Когда я пытаюсь создать свою собственную версию Python, используя:
./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install
Я вижу некоторые ошибки во время установки:
/usr/bin/ld:/usr/local/lib/libpython2.7.a(abstract.o): перемещение R_X86_64_32 от `.rodata.str1.8 'не может использоваться при создании общий объект; перекомпилировать с -fPIC/usr/local/lib/libpython2.7.a: не удалось прочитать символы: Плохое значение
Проблема начинается, когда компоновщик пытается использовать /usr/local/lib/libpython2.7.a
, а не только что скомпилированную библиотеку.
Как я могу препятствовать компоновщику (configure/make) использовать библиотеки python, установленные в системе?
Ответы
Ответ 1
Это выглядит как недостоверность setup.py
script, всегда включающая /usr/local
в пути поиска, когда make
создает цель sharedmods
.
Вам придется вручную frob setup.py
, так что сделайте...
./configure --enable-shared --prefix=/app/vendor/python-dev
... сначала, затем отредактируйте setup.py
, найдите строки 442, 443 и 444, которые должны выглядеть так:
if not cross_compiling:
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
... и прокомментируйте их, чтобы они выглядели так...
# if not cross_compiling
# add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
# add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
... тогда работает make
.
Ответ 2
Я решил с этот script:
# Python 2.7.6:
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall
Ответ 3
Я только что переместил /usr/local/lib/libpython 2.7.a в/tmp