【发布时间】:2020-03-06 03:26:35
【问题描述】:
我经常在模块底部写自测代码,即
if __name__ == '__main__':
.
.
.
我想把它保留在模块中,这样如果我修改它,我仍然可以在它上面运行自检。该模块是包的一部分。所以有包间引用需要解决;但是如果我是导入包而不是独立运行模块,这些解决方法会有所不同。
我最终在我的模块顶部有一个这样的杂物,这肯定是丑陋的,可能不是“pythonic”:
if __name__ == '__main__':
from CovSample import CovSample
from ArrayByRow import ArrayByRow
else:
from CEOpt import CovSample
from CEOpt import ArrayByRow
这有效 - 如果我正在导入包 CEOpt - else-branch 引用有效,如果我正在独立运行 - 直接模块名称导入有效。但这并不漂亮我想要一个仍然在独立模块测试中工作的包间调用的导入语句。这可能吗?
【问题讨论】:
-
请注意,进行 within-package 导入的更好方法是相对地执行它们(即不必显式命名
CEOpt)并使用前缀点使相对性显式:from .CovSample import CovSample和from .ArrayByRow import ArrayByRow。但是,__name__=='__main__'也不起作用,因此它不能回答您的问题。我也很想知道是否有通用的方法。
标签: python