问题描述
我已经编写了一个名为global_imports
的通用软件包,该软件包已在我的许多应用程序中使用。
在global_imports
中,我还为每个应用程序都包含一个params_<app name>.py
文件,该文件中包含我特定于每个应用程序的常量。
该软件包作为子模块放置在我的每个应用程序中。即<app name>.global_imports
在global_imports.__init__
内,我有以下代码块
mainrepo = globals()['__name__']
if mainrepo == 'a.global_imports':
from .params_a import *
elif mainrepo == 'b.global_imports':
from .params_b import *
这允许我的应用程序从global_imports
中检索其必要的常量。
但这仅在我的应用程序被隔离的情况下有效。
应用程序a
中有一个名为filereader
的子模块,它需要global_imports.params_a
中定义的常量。该子模块a.filereader
被作为b
克隆到应用程序b.filereader
中。
现在,因为globals()['__name__']
仅返回其所在的软件包中的global_imports
软件包的名称。如果我要运行b.filereader
,它将不会导入global_imports.params_a
为b.filereader
要求,但导入global_imports.params_b
是否有一种方法可以检索导入global_imports
的程序包的名称?
也就是说,如果我要从global_imports
内导入b.filereader
,是否有一种方法可以使导入知道是filereader
的导入对象?
在上述可行的情况下,我是否最终会同时用b
和global_imports.params_a
污染应用程序global_imports.params_b
其他部分的全局名称空间?
如果是这样,是否有更好的方法来解决整个问题?我正在寻求在应用程序之间尽可能多地global_imports
的可移植性。
一个可预见的解决方案是在global_imports.__init__
内定义一个函数,用例将首先导入global_imports
然后调用它的函数。但这是不利的,因为有很多遗留代码需要更改
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)