与安装相关的常见故障
简介
如果你无法通过本页解决你的问题,请通过以下按钮提出问题:
问与答
在第一次导入的时候、遇到权限问题
- 问: 当我试着第一次导入 - mpegCoder的时候,为何会遇到无法在- site-pacakges目录下写入某些内容的问题?
- 答: 为了减小 - .whl包的体积,在新的发行版里,我决定不再把那些- .dll/- .so格式的依赖库和- mpegCoder打包在一起。取而代之的是,当用户第一次运行- mpegCoder时,依赖项会被自动下载到库的目录里。为了确保用户有权限获取那些依赖项,这里建议两种方案择一:- 第一种方案是将mpegCoder安装在用户有权限的虚环境里。
- 第二种方案是,在管理员模式或sudo模式下、运行一行命令:python -c "import mpegCoder"。该命令会触发mpegCoder下载依赖项的行为。
 
- 第一种方案是将
找不到DLL
- 问: 当我导入(import)模块的时候,为什么会遇到以下错误? - ImportError: DLL load failed while importing mpegCoder: The specified module could not be found.
- 答: 这个问题似乎只会在以下条件皆满足的时候出现: - 你正在使用Windows;
- 你正在使用手动安装的mpegCoder,而非pip安装的版本。
 - 该错误是由于缺少必要的依赖项导致的。主要出现在以下几种情况之一: - 你的Python版本和预编译的mpegCoder模块不匹配;
- 所依赖的DLL文件既没有和mpegCoder.pyd放在同一文件夹,也没有出现在环境路径里(即名为PATH的环境变量)。
 
- 修复: 下载依赖项并将其中包含的DLL文件解压到 - mpegCoder.pyd所在的目录下。
找不到.so
- 问: 当我导入模块的时候,为什么会遇到以下错误? - ImportError: lib*****.so.**: cannot open shared object file: No such file or directory
- 答: 这个问题似乎只会在以下条件皆满足的时候出现: - 你正在使用Linux;
- 你正在使用手动安装的mpegCoder,而非pip安装的版本。
 - 该错误是由于缺少必要的依赖项导致的。主要出现在以下几种情况之一: - 你的Python版本和预编译的mpegCoder模块不匹配,在这种情况下,显示所缺少的库名字将会形如libpython3.*.so.**;
- 所依赖的动态库文件没有被添加到你的环境变量$LD_LIBRARY_PATH里。
 
- 修复: 下载依赖项并将其中包含的、所缺少的 - .so文件解压到一个在- $LD_LIBRARY_PATH里的文件夹内。
找不到numpy.core.multiarray
- 问: 当我导入模块的时候,为什么会遇到以下错误? - ImportError: numpy.core.multiarray failed to import
- 答: 你可能没有安装Numpy,或者你安装的Numpy版本和预编译的 - mpegCoder不匹配。如果是由版本不一致引起的问题,一般来说较小的版本差不会造成错误。可能你使用的Numpy与作者预编译时的Numpy版本差别太大了。可以参见预编译列表(Win)或预编译列表(Linux)来找到对应最佳的Numpy版本。
- 修复: 重装Numpy,或者自行编译 - mpegCoder。
找不到GLibC
- 问: 当我导入模块的时候,为什么会遇到以下错误? - OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/mpegCoder/lib/libsrt.so.1.4)
- 答: 你的GLibC版本没有达到要求( - >=2.29)。要想确认是这个原因,可以运行- ldd --version- 该问题往往在使用较早版本的Linux发行版系统时出现。目前所支持的操作系统列表可以参见这里。 
- 修复: 推荐编译并安装GLibC - >=2.29。但是,如果用户不想这样做,而是想要一个快速修复的补丁,那么可以按以下步骤照做。- 如果你使用的是pip安装的 - mpegCoder。你需要在- mpegCoder的安装目录下,找到一个名为- lib-fix的文件夹,然后运行以下命令- ln -sf <path-of-mpegCoder>/lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6- 这个文件( - libm-2.31.so)也可以在Linux依赖项里找到。
不正确的依赖项
- 问: 我没有安装任何依赖项,我也没有使用从PyPI安装的版本。为什么我可以成功导入 - mpegCoder?
- 答: 你很可能之前安装过FFMpeg。换言之,FFMpeg库已经在你的环境里了。考虑到FFMpeg的API随着版本在不停变化,将本项目和一个不匹配的FFMpeg连用是危险的。请确保你使用的 - mpegCoder版本和你的FFMpeg版本一致。
- 修复: 从PyPI安装 - mpegCoder,或者下载正确的依赖项,或者自行编译- mpegCoder。
tqdm缺少属性wrapattr
- 问: 当我导入模块的时候,为什么会遇到以下错误? - AttributeError: type object 'tqdm' has no attribute 'wrapattr'
- 答: 这个问题只出现在从 - mpegCoder==3.1.0b0到- mpegCoder==3.2.3这几个版本。其中,- tqdm作为一个可选的包,其实没有被列在依赖项列表里。 然则,这个可选的- tqdm需要提供一个最早实现在- tqdm==4.40.0中的接口- tqdm.tqdm.wrapattr。换言之,如果用户此先安装了- tqdm<4.40.0,则这会触发这一故障。另一方面来说,如果没有安装过- tqdm、抑或是安装了- tqdm>=4.40.0,也不会遇到这一问题。
- 修复: 要解决这一问题,请升级到 - mpegCoder>=3.2.4。或者,也可以保留- mpegCoder版本,通过以下命令升级- tqdm:- python -m pip install "tqdm>=4.40.0"