Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python中不允许从ZIP文件导入`*.so`文件?_Python_Zip_Python Import - Fatal编程技术网

为什么Python中不允许从ZIP文件导入`*.so`文件?

为什么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。它们是操作系统 依赖,并且可能只能从文件中加载。可能

为什么Python中不允许从ZIP文件导入*.so文件

文档()非常清楚:

ZIP存档中可能存在任何文件,但只有.py和.py[co]文件可供导入。不允许动态模块(.pyd、.so)的ZIP导入

但是文档中并没有列出这种奇怪限制的任何原因。是因为在Python中通常不鼓励从ZIP文件导入吗?还是因为安全原因?如果有,哪些?有关于这一点的官方声明吗?

来自:

无法从zip文件中满足动态模块的要求。动态模块 具有扩展名,如
.dll
.pyd
.so
。它们是操作系统 依赖,并且可能只能从文件中加载。可能吧 要从zip文件中提取动态模块,请编写它 到普通文件并加载它。但这意味着要创造暂时的环境 文件,并处理所有的
dynload.*.c
,这可能不是 好主意

我的解释是,做出这个决定是为了避免让解释器提取动态模块并将其保存到磁盘,因为操作系统的动态库功能不允许从zip中加载(请参阅Windows和Linux)


虽然从技术上看这并不是不可能的,但实现此功能的工作可能不值得的一个原因是这些库的平台依赖性。包含动态模块的
.zip
如果是从64位环境创建的,则在32位环境中可能无法工作,如果是在Windows中创建的,则在Linux中无法工作。禁止
.zip
s中的动态模块可能是一个有意识的决定,以确保包含Python模块的
.zip
s能够跨平台工作。

发现很有趣。但是我可以知道从zip进口有什么好处吗?。此外,官员们很难找到这种精化,可能是因为加载程序不支持使用ZIP文件中包含的共享对象。