首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pip安装mod-wsgi由于加载错误libpython而失败。

pip安装mod-wsgi由于加载错误libpython而失败。
EN

Stack Overflow用户
提问于 2021-01-13 21:26:55
回答 1查看 191关注 0票数 0

我尝试使用pip install mod-wsgi安装mod,使用标准的python3.6安装CentOS。我收到一个错误,说我需要使用--enable-shared作为./configure的标志重新编译python。

因此,我从这里下载并解压缩了python3.7源代码:https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz

然后我运行./configure --enable-shared --enable-optimizations LDFLAGS="-Wl,-rpath /path/containing/lib" ( rpath是libpython3.7m.so的父dir ),然后是make

此时,我不想运行make install,因为我不想污染系统可执行路径,因为我的$PATH中已经有了一个python3可执行文件。不过,我可以运行构建的python可执行文件。然后,我想继续使用./python -m pip install mod-wsgi,然后被一堆错误所击,上面写着如下内容:

代码语言:javascript
复制
/bin/ld: /usr/local/lib/libpython3.7m.a(bytes_methods.o): relocation R_X86_64_32S against symbol '_Py_NoneStruct' can not be used when making a shared object; recompile with -fPIC

下面是gcc的路线:

代码语言:javascript
复制
gcc -pthread -shared -Wl,-rpath /etc/httpd/IDVPython \
build/temp.linux-x86_64-3.7/src/server/wsgi_thread.o \
build/temp.linux-x86_64-3.7/src/server/mod_wsgi.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_buckets.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_memory.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_interp.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_restrict.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_logger.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_server.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_convert.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_metrics.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_validate.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_daemon.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_apache.o \
build/temp.linux-x86_64-3.7/src/server/wsgi_stream.o \
-L. \
-lpython3.7m \
-o build/lib.linux-x86_64-3.7/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so \
-L/usr/local/lib \
-L/usr/local/lib/python3.7/config-3.7m-linux \
-lpython3.7m

这意味着pip安装是从/usr/local/lib/libpython3.7m.a而不是从/path/containing/lib/libpython3.7m.so加载libpython。

如何使pip安装引用正确的共享库?

编辑:

ldd ./python确认python应该使用所需的共享库:

代码语言:javascript
复制
    linux-vdso.so.1 =>  (0x00007ffea0bfe000)
    libpython3.7m.so.1.0 => /etc/httpd/IDVPython/libpython3.7m.so.1.0 (0x00002acb63080000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002acb635b9000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00002acb637d5000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00002acb639d9000)
    libm.so.6 => /lib64/libm.so.6 (0x00002acb63bdc000)
    libc.so.6 => /lib64/libc.so.6 (0x00002acb63ede000)
    /lib64/ld-linux-x86-64.so.2 (0x00002acb62e5c000)
EN

回答 1

Stack Overflow用户

发布于 2021-01-15 06:39:38

最后,我重新命名了/usr/local/lib/libpython3.7m.a文件,这样当pip调用gcc时,它就找不到这个文件,并将libpython3.7m.so从我的python复制到/usr/local/lib

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65710030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档