智能__init __py

问题描述

我已经编写了一个名为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_ab.filereader要求,但导入global_imports.params_b

是否有一种方法可以检索导入global_imports的程序包的名称? 也就是说,如果我要从global_imports内导入b.filereader,是否有一种方法可以使导入知道是filereader的导入对象?


在上述可行的情况下,我是否最终会同时用bglobal_imports.params_a污染应用程序global_imports.params_b其他部分的全局名称空间?

如果是这样,是否有更好的方法解决整个问题?我正在寻求在应用程序之间尽可能多地global_imports的可移植性。


一个可预见的解决方案是在global_imports.__init__内定义一个函数,用例将首先导入global_imports然后调用它的函数。但这是不利的,因为有很多遗留代码需要更改

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)