为什么Python中不允许从ZIP文件导入`*.so`文件?
为什么Python中不允许从ZIP文件导入*.so文件 文档()非常清楚: ZIP存档中可能存在任何文件,但只有.py和.py[co]文件可供导入。不允许动态模块(.pyd、.so)的ZIP导入 但是文档中并没有列出这种奇怪限制的任何原因。是因为在Python中通常不鼓励从ZIP文件导入吗?还是因为安全原因?如果有,哪些?有关于这一点的官方声明吗?来自: 无法从zip文件中满足动态模块的要求。动态模块 具有扩展名,如为什么Python中不允许从ZIP文件导入`*.so`文件?,python,zip,python-import,Python,Zip,Python Import,为什么Python中不允许从ZIP文件导入*.so文件 文档()非常清楚: ZIP存档中可能存在任何文件,但只有.py和.py[co]文件可供导入。不允许动态模块(.pyd、.so)的ZIP导入 但是文档中并没有列出这种奇怪限制的任何原因。是因为在Python中通常不鼓励从ZIP文件导入吗?还是因为安全原因?如果有,哪些?有关于这一点的官方声明吗?来自: 无法从zip文件中满足动态模块的要求。动态模块 具有扩展名,如.dll、.pyd和.so。它们是操作系统 依赖,并且可能只能从文件中加载。可能
.dll
、.pyd
和.so
。它们是操作系统
依赖,并且可能只能从文件中加载。可能吧
要从zip文件中提取动态模块,请编写它
到普通文件并加载它。但这意味着要创造暂时的环境
文件,并处理所有的dynload.*.c
,这可能不是
好主意
我的解释是,做出这个决定是为了避免让解释器提取动态模块并将其保存到磁盘,因为操作系统的动态库功能不允许从zip中加载(请参阅Windows和Linux)
虽然从技术上看这并不是不可能的,但实现此功能的工作可能不值得的一个原因是这些库的平台依赖性。包含动态模块的
.zip
如果是从64位环境创建的,则在32位环境中可能无法工作,如果是在Windows中创建的,则在Linux中无法工作。禁止.zip
s中的动态模块可能是一个有意识的决定,以确保包含Python模块的.zip
s能够跨平台工作。发现很有趣。但是我可以知道从zip进口有什么好处吗?。此外,官员们很难找到这种精化,可能是因为加载程序不支持使用ZIP文件中包含的共享对象。