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

从源代码构建python时如何忽略本地python,python,configure,Python,Configure,当我尝试使用以下工具构建自己的Python版本时: ./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install 我在安装过程中看到一些错误: /usr/bin/ld:/usr/local/lib/libpython2.7.aabstract.o:重新定位 在生成命令时,不能使用针对“.rodata.str1.8”的R_X86_64_32 共享对象;使用-f

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

./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install
我在安装过程中看到一些错误:

/usr/bin/ld:/usr/local/lib/libpython2.7.aabstract.o:重新定位 在生成命令时,不能使用针对“.rodata.str1.8”的R_X86_64_32 共享对象;使用-fPIC/usr/local/lib/libpython2.7.a重新编译: 无法读取符号:错误值

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


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

这似乎是setup.py脚本的一个错误功能,make在构建目标sharedmods时总是在搜索路径中包含/usr/local

您必须手动翻动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')
…并对它们进行注释,使它们看起来像这样

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应该可以工作了。

我解决了以下问题:


我刚刚将/usr/local/lib/libpython2.7.a移动到/tmp

/configure-enable-shared-prefix=/app/vendor/python-dev&&make&&make-install-works,从Ubuntu 13.04上下载。如果错误发生在make部件中,则必须包含make的完整输出。这是唯一的错误。它也简单地重复其他模块。我用的是2.7.4柏油球。但是我的机器上有2.7.4,我想是静态编译的,没有-fPIC。当然,但是错误的原因会在构建的早期发生,所以没有更多信息就无法诊断。请看一看,以及后续内容。我不确定这是否是同一个问题,但如果不看到make的输出,我就无能为力了。这是日志。是的,这篇文章提到了同样的问题。但是没有解决方案。我的解决方案是否有效?if语句也需要注释掉。否则,解析器将需要一个缩进块,这是两个add\u dir\u to\u列表行。仅供将来参考。我在尝试重新编译python并将其重新安装到/usr/local/lib时遇到了这个问题。在这种情况下,您必须再次使用-prefix=/usr/local/lib,并且编辑setup.py,正如这个答案所建议的那样,不会有帮助。为了修复它,我必须删除现有的/usr/local/lib/libpython2.7。可能不需要文件和/usr/local/lib/python2.7/目录