Python executable not finding libpython shared library
我在Centos 5上安装python 2.7。我构建并安装了python,如下所示
1 2 3 | ./configure --enable-shared --prefix=/usr/local make make install |
当我尝试运行/usr/local/bin/python时,会收到这个错误消息
1 | /usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory |
当我在/usr/local/bin/python上运行ldd时,我得到
1 2 3 4 5 6 7 8 | ldd /usr/local/bin/python libpython2.7.so.1.0 => not found libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000) libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000) libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000) libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000) /lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000) |
如何告诉python在哪里可以找到libpython?
试试下面的:
1 | LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python |
与"replace
如果这个工程和你想做永久性的变化,你有两个选择:
你
添加两个
在对我的掘墓者的帽子…
最好的方式是解决这两个发现冰的编译时间。既然你是一位字头无论如何,不妨告诉executable没有在图书馆找到它的共享。unlike OpenSSL软件包和其他Python,不给你两个很好的指示作用alternate configure图书馆(不是每个人都paths根冰激凌,你知道的……)simplest案例的所有你需要的是以下:
1 2 3 | ./configure --enable-shared \ --prefix=/usr/local \ LDFLAGS="-Wl,--rpath=/usr/local/lib" |
或如果你prefer非Linux版本:
1 2 3 | ./configure --enable-shared \ --prefix=/usr/local \ LDFLAGS="-R/usr/local/lib" |
"
1 2 3 4 5 6 7 | ./configure --enable-shared \ --with-system-ffi \ --with-system-expat \ --enable-unicode=ucs4 \ --prefix=/apps/python-${PYTHON_VERSION} \ LDFLAGS="-L/apps/python-${PYTHON_VERSION}/extlib/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/extlib/lib" \ CPPFLAGS="-I/apps/python-${PYTHON_VERSION}/extlib/include" |
在这个案例中是Python编写的图书馆,辨别(
编辑:忘了说,这会complain编译,如果你不看
在仇恨中一样的问题和solved网络这种方式:
如果你知道在哪里libpython resides应该去的,它会在你的
1 | sudo ln -s /usr/local/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0 |
然后再尝试运行
我在Centos7 Minimal上安装了由软件收集的python 3.5。这一切本身都很好,但是我在运行一个简单的CGI脚本时看到了这个问题中提到的共享库错误:
1 2 | tail /var/log/httpd/error_log AH01215: /opt/rh/rh-python35/root/usr/bin/python: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory |
我想要一个适用于所有用户的系统范围的永久性解决方案,这样就排除了向.profile或.bashrc文件添加export语句。基于Red Hat Solutions页面,有一个单行解决方案。感谢您的评论:
1 | echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh |
重新启动后,shell上的一切都很好,但有时我的Web服务器仍然会抱怨。还有另一种方法始终适用于shell和服务器,而且更通用。我在这里看到了解决方案,然后意识到它实际上也出现在这里的一个答案中!无论如何,在Centos 7上,以下是步骤:
1 | vim /etc/ld.so.conf |
我的机器上有:
1 | include ld.so.conf.d/*.conf |
所以我创建了一个新文件:
1 | vim /etc/ld.so.conf.d/rh-python35.conf |
并补充说:
1 | /opt/rh/rh-python35/root/usr/lib64/ |
手动重建缓存:
1 | sudo ldconfig |
就这样,脚本工作得很好!
这是一个临时解决方案,在重新启动时无法正常工作:
1 | sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v |
-v(verbose)选项只是查看发生了什么。我看到了:/opt/rh/rh-python35/root/usr/lib64:libpython3.so.rh-python35->libpython3.so.rh-python35libpython3.5m.so.rh-python35-1.0->libpython3.5m.so.rh-python35-1.0
这个错误消失了。顺便说一句,我不得不让用户
请注意,我使用find查找库的目录。你也可以这样做:
1 2 3 | sudo yum install mlocate sudo updatedb locate libpython3.5m.so.rh-python35-1.0 |
在我的虚拟机上返回:
1 | /opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0 |
这是我需要给ldconfig的路径,如上图所示。
关于Solaris 11
使用
在我的例子中,python3.6
希望这有帮助。当做
这对我有用…
1 | $ sudo apt-get install python2.7-dev |
它所需要的只是安装libpython[3或2]dev文件安装。
在安装使用的命令:
1 2 3 4 5 6 7 | ./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --enable-unicode=ucs4 && make |
现在,作为根用户的:
1 2 | make install && chmod -v 755 /usr/lib/libpython2.7.so.1.0 |
然后我想execute Python和有误差。
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
然后,从根中记录了用户的鸭子看了《Python execute successfully挤压它。
完全安装的Python库。(python27-Arg)。它将安装libpython2.7.so1.0.我们不需要看两个东西表壳,手动上弦。