我有一个在多台机器上运行的python项目。我使用virtualv跨python模块同步多个模块。这个很好用。不过,我把一些内部烘焙的SWIG*.so的包也拉进了env。这些c++共享对象有一些影响深远的依赖性噩梦,在某些机器上很难重现。我不需要一些devel机器上的代码功能。我希望能够加载其余的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
注意:我认为值得注意的是,当模块在prod机器上导入*.so 在
^{pr2}$那么,python中的“如何在line中定义模块”?在
我不想在丢失的devel机器上创建包
例如:我不想创建这些文件,因为工作系统上的模块冲突。在
$ tree
swigpackagefoo/__init__.py
swigpackagefoo/swigsubpackagebar/__init__.py
如果我没听错,你想在编译后的模块不能被导入时“模仿”它吗?在
因此,如果您的
swigsubpackagebar
中有:然后您需要一个“mock”模块来支持同一个接口,但不做任何事情。在
不要试图用一些动态的模块定义来解决这个问题,只需定义另一个提供所需接口的模块:
^{pr2}$然后将导入语句的结构如下:
如果
swigsubpackagebar
实际上是一个类,那么它的概念几乎相同:再次使用
as
关键字将其命名为相同的名称:是的,你可以!在
资料来源: How to load a module from code in a string?
相关问题 更多 >
编程相关推荐