使用 --enable-shared 安装 Python 3 时出现问题 [英] Problems installing Python 3 with --enable-shared

查看:47
本文介绍了使用 --enable-shared 安装 Python 3 时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 --enable-shared 选项安装 Python 3.安装成功",但生成的 Python 不可运行.安装后尝试运行 Python 会出现以下错误:

I'm trying to install Python 3 with the --enable-shared option. Installation "succeeds" but the resulting Python is not runnable. Trying to run Python after installation gives the following error:

$ /opt/python3/bin/python3.5
/opt/python3/bin/python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

背景

操作系统是 Debian(squeeze),并且之前安装了 Python 2.6,因为其他代码依赖于它,所以必须保留它,以及 Apache 2.2.最终我要做的是设置 Django 在 Apache 上运行,这意味着我正在尝试安装 mod_wsgi(或 mod_wsgi-express),这需要共享库.我已经尝试在 Python 安装中使用 --enable-shared 安装 mod_wsgi without,并且得到了......好吧,同样的事情,但这次来自mod_wsgi 安装程序(以及来自 pip install mod_wsgi,我也尝试过):/opt/python3/bin/python3.5:加载共享库时出错:libpython3.5m.so.1.0:无法打开共享对象文件:没有这样的文件或目录.

Background

The OS is Debian (squeeze), and has a previous installation of Python 2.6, which is necessary to retain because other code relies on it, and Apache 2.2. Ultimately what I'm trying to do is set up Django to run on Apache, meaning I'm trying to install mod_wsgi (or mod_wsgi-express), which requires shared libraries. I have already tried to install mod_wsgi without using --enable-shared in the Python installation, and have gotten... well, the same thing, but this time from the mod_wsgi installer (and from pip install mod_wsgi, which I also tried): /opt/python3/bin/python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory.

从上面背景中描述的安装开始,这里是我执行的产生上述错误的命令的最小列表(删除了详细信息).

Starting from an installation as described in Background above, here is the minimum list of commands I've executed that produce the error above (with verbosity removed).

user@server:~$ wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
user@server:~$ tar -zxvf Python-3.5.1.tgz
user@server:~$ cd Python-3.5.1
user@server:~/Python-3.5.1$ ./configure --prefix=/opt/python3 --enable-shared
user@server:~/Python-3.5.1$ make && sudo make install
(... appears to install correctly)

user@server:~/Python-3.5.1$ /opt/python3/bin/python3.5
/opt/python3/bin/python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

我也尝试过设置 LD_RUN_PATH ,如该解决方案中所述 其他问题,结果相同:

I have also tried this with LD_RUN_PATH set as described in the solution to this other question, with the same results:

user@server:~/Python-3.5.1$ sudo make distclean
user@server:~/Python-3.5.1$ ./configure --prefix=/opt/python3 --enable-shared
user@server:~/Python-3.5.1$ LD_RUN_PATH=/usr/local/lib make
user@server:~/Python-3.5.1$ sudo make install
user@server:~/Python-3.5.1$ /opt/python3/bin/python3.5
/opt/python3/bin/python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

我也用 Python 3.4 尝试过,结果相同.我没有在 Python 2 上尝试过这个,因为我不希望未来的开发仅限于 Python 2.7(因此即使成功安装也无法满足我的要求).我还假设该尝试不会提供任何新的或有用的信息.

I have also tried this with Python 3.4, with the same results. I have not tried this with Python 2, because I do not want future development to be limited to Python 2.7 (therefore even a successful installation would not satisfy my requirements). I'm also assuming the attempt would not provide any new or useful information.

推荐答案

我在 CentOS7 上重复了你的步骤,得到了类似的结果:

I've repeated your steps on CentOS7 and get something similar:

$ /tmp/py3/bin/python3
/tmp/py3/bin/python3: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

如果您查看 python 的链接,它并没有提供库的完整路径:

If you look at the linking of python, it isn't providing a full path to the library:

$ ldd /tmp/py3/bin/python3
    linux-vdso.so.1 =>  (0x00007fff47ba5000)
    libpython3.5m.so.1.0 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdfaa32e000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fdfaa12a000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007fdfa9f27000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fdfa9c24000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fdfa9862000)
    /lib64/ld-linux-x86-64.so.2 (0x000055e85eac5000)

由于某种原因,Python 构建过程没有将 -rpath 添加到链接行,这会将目录添加到运行时库搜索路径".

For some reason, the Python build process isn't adding -rpath to the link line, which would "add a directory to the runtime library search path."

如果您明确设置库路径,它将起作用:

If you explicitly set your library path, it will work:

$ LD_LIBRARY_PATH=/tmp/py3/lib/ /tmp/py3/bin/python3
Python 3.5.1 (default, Jun 10 2016, 14:54:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

所以现在问题是你是否想要:

So now it becomes a question as to whether you want to:

  • 在您的系统上全局设置 LD_LIBRARY_PATH
  • 编辑/etc/ld.so.conf(或/etc/ld.so.conf.d/*)
  • 使用chrpath改变嵌入路径
  • 在运行 configuremake 之前
  • export LD_RUN_PATH={prefix}/lib(其中 {prefix} 是您传递给 --prefix 的内容.您使用了错误的路径.)
  • set LD_LIBRARY_PATH globally on your system
  • Edit /etc/ld.so.conf (or /etc/ld.so.conf.d/*)
  • Use chrpath to change the embedded path
  • export LD_RUN_PATH={prefix}/lib before you run configure and make (Where {prefix} is what you passed to --prefix. You used the wrong path.)

这篇关于使用 --enable-shared 安装 Python 3 时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆