有没有办法将已编译的 C 模块与 zipimport 一起使用?
Is there a way to use compiled C modules with zipimport?
当我的 sys.path 中有 python 共享对象文件 (.so
) 时,我可以简单地执行:
import _ctypes
并且它将导入 python2.7/lib-dynload/_ctypes.so
。
但是,如果我使用名为 tmp.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 沙箱,因为即使在正常环境下也无法完成。
当我的 sys.path 中有 python 共享对象文件 (.so
) 时,我可以简单地执行:
import _ctypes
并且它将导入 python2.7/lib-dynload/_ctypes.so
。
但是,如果我使用名为 tmp.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 沙箱,因为即使在正常环境下也无法完成。