有没有办法使用zipimport编译的C模块?

时间:2016-08-04 19:03:29

标签: python linux cpython

当我在sys.path中有一个python共享对象文件.so时,我可以这样做:

import _ctypes

它将导入python2.7/lib-dynload/_ctypes.so

但是,如果我使用名为tmp.zip的zipfile包含:

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直接进行操作感兴趣。我知道还有其他方法可以手动提取存档并创建文件。

1 个答案:

答案 0 :(得分:-3)

看来我完全阅读文本时遇到了很大的问题:

  

This module adds the ability to import Python modules (*.py, *.py[co]) and packages from ZIP-format archives.

所以答案很清楚,我正在努力实现一些不可能的事情......因为即使在正常环境下也无法完成,所以无法逃脱python沙箱。