Python无法识别LD_LIBRARY_PATH?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python无法识别LD_LIBRARY_PATH?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6515字,纯文字阅读大概需要10分钟。
内容图文
我试图在开发者模式下在cr-48 chromebook上安装Python2.7,并面临一个奇怪的问题,即我很难在谷歌上搜索解决方案.首先是一些背景..根分区是readonly挂载的,所以我一直在/usr/local下安装包,这是一个可写的独立挂载点.有一种方法可以强制root分区本身readwrite(有一些小的缺点),但我决定不去那条路.我一直在下载archlinux软件包并在/usr/local下提取它们,其中一些已经很好地工作了.我基本上提取.tar.xz文件有点像这样:
xz -dc package.tar.xz | sudo tar --strip-components=1 -C /usr/local -xvf -
这基本上将发往/ usr的文件放在/usr/local下.我在LD_LIBRARY_PATH下的/usr/lib之前导出/usr/local/lib,并通过这种方式获得了几个包.由于某种原因,python无法加载识别它,虽然不完全确定是什么原因造成的.在扩展了我从archlinux site获得的python 2.7软件包之后,我能够很好地启动python shell,并且简单的打印工作正常.然后我尝试安装setuptools,所以从pypy下载了源代码并尝试运行sudo /usr/local/python2 setup.py install,但它一直给我以下错误:
/usr/local/bin/python2: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
libpython2.7.so.1.0文件位于/usr/local/lib /目录中,该文件位于LD_LIBRARY_PATH中.快速运行的ldd清楚地显示了这一点:
chronos@localhost /tmp/setuptools-1.1.6 $ldd /usr/local/bin/python2
linux-gate.so.1 (0x777a9000)
libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x77610000)
libpthread.so.0 => /lib/libpthread.so.0 (0x775ee000)
libc.so.6 => /lib/libc.so.6 (0x77464000)
libdl.so.2 => /lib/libdl.so.2 (0x77460000)
libutil.so.1 => /lib/libutil.so.1 (0x7745b000)
libm.so.6 => /lib/libm.so.6 (0x77436000)
/lib/ld-linux.so.2 (0x777aa000)
我还检查了/etc/ld.so.conf,这也有/usr/local/lib:
chronos@localhost /tmp/setuptools-1.1.6 $cat /etc/ld.so.conf
# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/lib
/usr/lib
/usr/local/lib
/usr/lib/opengl/xorg-x11/lib
我安装了strace(和perl,因为它被列为依赖项),并在strace下运行install命令,显示下面有趣的输出(请参阅它不是在寻找/usr/local/lib/libpython2.7.so.1.0任何地方):
chronos@localhost /tmp/setuptools-1.1.6 $sudo strace /usr/local/bin/python2 setup.py installPassword:
execve("/usr/local/bin/python2", ["/usr/local/bin/python2", "setup.py", "install"], [/* 16 vars */]) = 0
brk(0) = 0x9b3c000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x776e6000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=37049, ...}) = 0
mmap2(NULL, 37049, PROT_READ, MAP_PRIVATE, 3, 0) = 0x776dc000
close(3) = 0
open("/lib/tls/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/tls/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/tls/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/i686", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
writev(2, [{"/usr/local/bin/python2", 22}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libpython2.7.so.1.0", 19}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/usr/local/bin/python2: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
) = 141
exit_group(127) = ?
+++ exited with 127 +++
我总是通过在LD_LIBRARY_PATH中包含lib路径并导出它来获得自定义安装路径,因此不确定我还能在这里找到什么.任何帮助深表感谢.
解决方法:
除了LD_LIBRARY_PATH之外,您可能还需要设置一些特定于Python的环境变量,例如PYTHONHOME& PYTHONPATH.有关详细信息,请参阅Python man page.
安装新库后,您可能还需要以root身份运行ldconfig以更新库高速缓存文件.
另一个尝试的选项是设置环境变量RUN_LD_PATH,甚至可以使用-rpath或-rpath-link编译器/链接器选项.
您也可以尝试预先链接/usr/local下的所有可执行文件和库,尽管这可能很繁琐,因为这些目录可能未在/etc/prelink.conf中列出.也许只是从你的python可执行文件开始.
内容总结
以上是互联网集市为您收集整理的Python无法识别LD_LIBRARY_PATH?全部内容,希望文章能够帮你解决Python无法识别LD_LIBRARY_PATH?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。