当我的 sys.path 中有一个 python 共享对象文件 (.so
) 时,我可以简单地执行以下操作:
import _ctypes
它将导入python2.7/lib-dynload/_ctypes.so
。
但是,如果我使用名为 tmp.zip
的 zip 文件,其中包含:
Hello/_World.so
如果 world.so
包含格式良好的 init_World
函数,则:
Python 2.7.10 (default, Jun 1 2015, 18:05:38)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.insert(0, 'tmp.zip')
>>> import _World
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zipimport.ZipImportError: can't find module _World
我读到在 C 中不可能加载文件系统之外的共享对象文件。
这是否意味着我想要实现的目标是不可能的,并且应该从存档中提取 _World.so
?
我只对直接使用zipimport
进行操作感兴趣。我知道还有其他方法可以做到这一点,例如手动提取存档并创建文件。
最佳答案
看来我在完全阅读文本方面确实有很大的问题:
所以答案很明确,我正在尝试实现一些不可能的事情......没有办法用它来逃避 python 沙箱,因为即使在正常环境下也无法完成。
关于python - 有没有办法通过 zipimport 使用已编译的 C 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775427/