【问题标题】:Python Library wont load unless run from root除非从根目录运行,否则不会加载 Python 库
【发布时间】:2019-01-07 22:54:00
【问题描述】:

我有一些代码正在使用 dlib,但是当我尝试在我的 python 代码中导入 dlib 时,我得到了这个错误:

File "boom.py", line 32, in <module>
    from faceSwap import *
File "/home/user/coding/faceSwap.py", line 22, in <module>
import dlib
ImportError: libboost_python-py27.so.1.49.0: cannot open shared object file: No 
such file or directory

但是,当我以 root 身份运行它时 - 它运行得很好!但是我不想以 root 身份运行守护进程 - 所以我很想解决这个问题。我曾尝试通过 PIP 多次卸载/重新安装 dlib,但均未成功。

当我检查该库时,它似乎确实从 root 和用户级别帐户中丢失,即使 DLIB 实际上在 python 程序以 root 身份运行时运行:

用户:

$ whereis  libboost_python-py27.so.1.49.0
libboost_python-py27.so.1.49:

根:

# whereis libboost_python-py27.so.1.49.0
libboost_python-py27.so.1.49:

root 和用户帐户都使用同一个 python

 /usr/local/bin/python

我唯一的线索是用户帐户 dlib 查找失败:

 /usr/lib/libboost_python-py27.so.1.49.0 

但根目录有效并且似乎正在使用:

 /usr/local/lib/python2.7/dist-packages/dlib.so

有什么想法可以解决或修复它吗?

【问题讨论】:

  • 听起来像一个愚蠢的问题,但你确定你的 root 和用户使用相同的 python 安装吗?有时他们甚至可以共享相同的版本号,这会让人很困惑。安装的时候有没有试过\path\to\python.exe -m pip install dlib
  • @DanielScott 我检查了这个,他们使用的是相同的 python - 但看起来它并不总是清楚它指向的路径明智。在根目录下 liboost 可以在 /usr/local/lib/python2.7/dist-packages/dlib.so 中找到——但看起来非 root 用户在导入 dlib 时无法访问它——实际上它看起来对于不存在的文件。
  • @davedwards 不幸的是,这个问题和解决方案与我的问题完全不同:(
  • @FightFireWithFire 感谢您的反馈,我将删除我的建议

标签: python shared-libraries dlib .so


【解决方案1】:

你可以尝试几件事:

1) 确保您使用与 root 和普通用户相同版本的 python。 which python 应该在基于 Unix 的操作系统上工作。以 root 身份尝试并比较以查看 python 安装是否相同。

2) 重新安装升压。确保它是正确的版本。尝试使用pip 这样做。

3) 如果是权限问题,可以用chown更改相关目录的权限,保证程序可以访问。不建议这样做。而且我认为这不是问题,因为错误是说它找不到libboost。这意味着安装有问题。

4) 从源代码安装 dlib。这很容易。在此处查看更多信息:http://dlib.net/compile.html。基本上下载最新版本并从主 dlib 文件夹运行python setup.py install。如果您需要更多帮助,我可以指导您完成此操作。

【讨论】:

  • 当我以 root 身份成功导入 DLIB 时,我已将其追踪到 dlib.___file___ 指向 /usr/local/lib/python2.7/dist-packages/dlib.so 的位置。当我尝试将它作为非特权用户导入时,这条路径可能不起作用吗?
  • 不太可能,考虑到您可以毫无问题地在同一目录中导入其他 python 库。您是否检查并查看您以 root 运行的 python 安装是否相同?
  • 是的,它是同一个 /usr/local/bin/python ,它真的很奇怪。我可以看到在根 dlib 导入下,我可以看到它正在使用的 .so,但是用户帐户 dlib 正在寻找一个不存在的共享库。
  • 您是否尝试通过 apache 之类的服务器运行 import dlib?
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2017-02-16
相关资源
最近更新 更多