我有在多台机器上运行的 python 项目。我正在使用 virtualenv 在多台机器上同步 python 模块。这很好用。但是,我也将一些内部烘焙的 SWIG *.so 包引入环境。这些 c++ 共享对象有一些影响深远的依赖噩梦,在某些机器上难以重现。我不需要一些开发机器上的代码功能。我想必须加载其余的 python 代码并继续在不修改的情况下继续运行。
我想在没有模块的机器上“伪造模块”加载。我不会调用实际执行 SWIG *.so 方法的代码。
例子:
try:
import swigpackagefoo.swigsubpackagebar
except ImportError:
# magic code that defines the fake module, I want to define a bunch of class'es with 'pass'
# so all the code deps would be happy. and I dont require the swig *.so to
# be installed on the devel system.
# something along the lines of.
__import__('swigpackagefoo.swigsubpackagebar')=class foo(object): pass
注意:我认为值得注意的是,当模块导入 *.so 时,在 prod 机器上
type(swigpackagefoo)
# is 'module', also the
type(swigpackagefoo.swigsubpackagebar)
# is also 'module'
那么'如何在python中定义一个模块在线'?
我不想在缺少的开发机器上创建包
即:我不想创建这些文件,因为工作系统上的模块冲突。
$ tree
swigpackagefoo/__init__.py
swigpackagefoo/swigsubpackagebar/__init__.py