导入错误:无法加载共享库,请确保已安装librtmp
我在使用Windows 8,想要使用python-librtmp这个库。我按照这个链接的步骤安装了librtmp:http://pythonhosted.org/python-librtmp/
。在Windows Powershell中运行的两个pip安装命令都成功了。安装完成后,它说库文件在c:\python27\lib\site-packages
这个路径下。
现在,我打开了一个Python的开发环境(IDLE),输入了import librtmp
。结果出现了以下错误:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import librtmp
File "C:\Python27\lib\site-packages\librtmp\__init__.py", line 14, in <module>
from librtmp_ffi.binding import librtmp
File "C:\Python27\lib\site-packages\librtmp_ffi\binding.py", line 13, in <module>
raise ImportError("No shared library could be loaded, "
ImportError: No shared library could be loaded, make sure that librtmp is installed.
这是binding.py文件:
import librtmp_config
from .ffi import ffi
from .verifier import verifier
for path in librtmp_config.library_paths:
try:
librtmp = ffi.dlopen(path)
break
except OSError:
pass
else:
raise ImportError("No shared library could be loaded, "
"make sure that librtmp is installed.")
librtmp = verifier.load_library()
这是librtmp_config文件夹中的init.py文件:
"""Runtime configuration of python-librtmp.
This module provides access to variables used by this library
and makes it possible to customize some behaviour before :mod:`librtmp`
is imported.
"""
__all__ = ["library_paths"]
#: This is a list of filenames that python-librtmp
#: will attempt to dynamically load `librtmp` from.
library_paths = ["librtmp.so", "librtmp.so.0", "librtmp.dll", "librtmp.so.1", "librtmp.dylib"]
我对Python还很陌生,这是我第一次在Windows上使用Python。当我安装librtmp时,它说安装成功。我完全按照上面链接的步骤操作的。我不明白,为什么它还会说make sure that librtmp is installed
。
这是不是路径问题或者安装问题?我在网上搜索了解决办法,但没有找到有效的。
我需要单独安装librtmp吗?经过一些阅读,我发现librtmp包含在rtmpdump中。我从Windows上下载了rtmpdump的压缩文件,但我不知道怎么安装。README文件上说要运行“make SYS=mingw”,但压缩文件夹里没有makefile!
不过,rtmpdump文件夹里有一个子文件夹。那个文件夹里有librtmp.dll。如果你看到上面,init.py提到它的库路径中有一个librtmp.dll。这是不是意味着我需要在init.py中引用这个.dll文件?但我不知道该怎么做。
你能帮帮我吗?
1 个回答
解决了!!!我把 librtmp.dll
这个文件从 rtmpdump 包里复制到了 C:\Python27\DLLs
文件夹里。通过查看 binding.py
和 _init_.py
这两个文件的内容,我发现 Python 找不到这个 dll 文件。不过,我还是不明白为什么它能在 DLLs 文件夹里找到。这个我只是随便试了一下,结果就成功了!
如果有谁能解释一下这个逻辑,那就太好了!