通过符号链接伪造python模块:在windows上?

通过符号链接伪造python模块:在windows上?,python,symlink,python-module,Python,Symlink,Python Module,我有几个编译过的python模块;它们被放在一个中。因此(为了避免运行时链接,存在跨模块符号依赖关系),但许多符号链接指向此。因此: foo.so -> liball.so bar.so -> liball.so liball.so 这样,我就可以执行importfoo(Python将调用liball.so中定义的initfoo())或importbar(调用initbar()) 我想知道这种方法是否适用于Windows?可能不行,但您可以通过 import sys import

我有几个编译过的python模块;它们被放在一个
中。因此
(为了避免运行时链接,存在跨模块符号依赖关系),但许多符号链接指向此
。因此

foo.so -> liball.so
bar.so -> liball.so
liball.so
这样,我就可以执行
importfoo
(Python将调用
liball.so
中定义的
initfoo()
)或
importbar
(调用
initbar()


我想知道这种方法是否适用于Windows?

可能不行,但您可以通过

import sys
import liball
sys.modules['foo'] = liball
sys.modules['bar'] = liball
如果您需要在多个地方导入它们,或使用

import liball as foo, libalb as bar, liball
如果你只需要在一个地方

但是,可能无法区分
initfoo()
initbar()
之间的区别,必须同时进行这两项操作,以便模块有效地包含两个模块中要包含的所有内容


如果
foo
部分包含与
bar
相同的符号,但含义不同,则此方法将不起作用。但是你可以复制文件。这将占用比所需更多的磁盘空间,但这并不会造成太大的伤害,IMHO。

有点不清楚:您是如何将python模块编译成共享对象的?@BasicWold:g++-shared-o liball.so foo.cpp bar.cpp-lboost\u python(以及一系列其他编译器选项)谢谢,这是个好主意。我希望直接操作
sys.modules
不会被认为是一种不好的做法,将来可能会被打破;-)