Python 3.x 使用--enable shared安装Python 3时出现问题 问题

Python 3.x 使用--enable shared安装Python 3时出现问题 问题,python-3.x,compilation,debian,mod-wsgi,Python 3.x,Compilation,Debian,Mod Wsgi,我正在尝试使用--enable-shared选项安装Python 3。安装“成功”,但生成的Python无法运行。安装后尝试运行Python会出现以下错误: $ /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 direct

我正在尝试使用--enable-shared选项安装Python 3。安装“成功”,但生成的Python无法运行。安装后尝试运行Python会出现以下错误:

$ /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),之前安装了Python2.6,由于其他代码依赖它,因此必须保留该版本,以及Apache2.2。最终,我要做的是将Django设置为在Apache上运行,这意味着我要安装mod_wsgi(或mod_wsgi-express),它需要共享库。我已经尝试安装mod_wsgi,但没有在Python安装中使用
--启用共享
,并且获得了。。。好的,同样的事情,但是这次是从mod_wsgi安装程序(以及我也尝试过的从
pip安装mod_wsgi
):
/opt/python3/bin/python3.5:加载共享库时出错:libpython3.5m。因此.1.0:无法打开共享对象文件:没有这样的文件或目录

痕迹 从上面后台中描述的安装开始,下面是我执行的产生上述错误的命令的最小列表(删除详细信息)

我还尝试了使用
LD_RUN_PATH
设置,如解决方案中所述,结果相同:

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

我也在Python3.4中尝试过这一点,得到了相同的结果。我没有在Python2上尝试过这一点,因为我不希望将来的开发局限于Python2.7(因此,即使是成功的安装也不能满足我的要求)。我还假设尝试不会提供任何新的或有用的信息。

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

$ /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的链接,它没有提供到库的完整路径:

$ 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
添加到链接行,这将“向运行库搜索路径添加一个目录”

如果显式设置库路径,它将起作用:

$ 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.
>>> 
因此,现在的问题是,您是否希望:

  • 在系统上全局设置
    LD\u LIBRARY\u路径
  • 编辑
    /etc/ld.so.conf
    (或
    /etc/ld.so.conf.d/*
  • 使用
    chrpath
    更改嵌入路径
  • 运行
    configure
    make
    (其中,
    {prefix}
    是您传递给
    --prefix
    的内容。您使用了错误的路径。)

如mod_wsgi文档中所述,在安装mod_wsgi时设置
LD_RUN_PATH


为什么不从repos安装它?apt get install python3I正在尝试确保它使用共享库。使用apt get有没有办法做到这一点?对于最后一个选项,您还可以将加载程序标志传递给
/configure
。例如:
/configure--prefix=/opt/python3--enable shared LDFLAGS=“-Wl,-rpath/opt/python3”
。谢谢@rrauenza!我缺少的部分是
LD\u RUN\u PATH
--prefix
相关,而不是绝对/标准位置。谢谢Graham。也许我不应该标记这个mod wsgi,因为问题发生在Python安装步骤中,甚至在我开始安装mod wsgi之前。不过,我会记住这一点的。去读一读吧,上面写着Docker,这一切仍然相关。
$ 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.
>>>