我正试图在烧瓶中构建我的第一个Web应用程序,并且我遇到了一些问题。烧瓶应用程序将一些pickle对象推送到redis队列。对象位于命名空间app.mypackage.mymoduleA中。也就是说,对象有
object.__class__ == app.mypackage.mymoduleA.Myclass
接下来,我有一个外部进程运行一个守护进程(位于同一个包中的另一个模块中),它处理redis队列中出现的对象(即异步)。我的问题是,当对象被打开时,pickle模块会抛出一个ImportError异常,因为app.mypackage.mymoduleA.Myclass没有导入到模块中。
虽然我理解命名空间的想法(至少我认为我这样做),但我在理解它们如何在现实中工作时遇到了一些困难。所以无论如何,这是我的问题:
1)是否有可能"假"命名空间?像
这样的东西import mymoduleA.Myclass as app.mypackage.mymoduleA.Myclass
2)由于伪造命名空间可能是一个黑客,是否有一个"权利"这样做的方法?基本上问题是在一个程序中创建和腌制对象,导入Myclass如下:
from mypackage.mymoduleA import Myclass
虽然它们在另一个导入Myclass的程序中被取消,但是这样:
from mymoduleA import Myclass
我在解释我的意思时遇到了一些困难,所以我希望我的问题有道理。
谢谢!
奖金问题:我知道问题1中的语法不起作用,但有人可以向我解释为什么不允许这种导入模块的方式吗?