从源代码构建python时如何忽略本地python

Xya*_*and 13 python configure

当我尝试使用以下方法构建自己的Python版本时:

./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install
Run Code Online (Sandbox Code Playgroud)

我在安装过程中看到一些错误:

/ usr/bin/ld:/usr/local/lib/libpython2.7.a(abstract.o):在创建共享对象时,不能使用针对`.rodata.str1.8'的重定位R_X86_64_32; 使用-fPIC /usr/local/lib/libpython2.7.a重新编译:无法读取符号:值不正确

当链接器尝试使用/usr/local/lib/libpython2.7.a而不是新编译的库时,问题就开始了.

如何防止链接器(configure/make)使用系统上安装的python库?

Aya*_*Aya 13

这看起来是setup.py脚本的错误特征,/usr/localmake构建目标时始终包括在搜索路径中sharedmods.

你必须手动擦拭setup.py,所以......

./configure --enable-shared --prefix=/app/vendor/python-dev
Run Code Online (Sandbox Code Playgroud)

...首先,然后编辑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')
Run Code Online (Sandbox Code Playgroud)

...并将它们评论出来,看起来像这样......

# 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')
Run Code Online (Sandbox Code Playgroud)

......然后make应该工作.

  • if语句也需要注释掉.否则,解析器将期望一个缩进块,这是两个add_dir_to_list行.仅供将来参考. (2认同)

小智 5

我用这个脚本解决了:

# 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
Run Code Online (Sandbox Code Playgroud)