Подтвердить что ты не робот

Как игнорировать локальный питон при создании питона из источника

Когда я пытаюсь создать свою собственную версию 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, установленные в системе?

4b9b3361

Ответ 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