我正在创建一些模块GUI
(描述图形界面),它需要另一个模块somecalc
(进行一些计算)。后者导入标准库:os
,sys
,time
等导入其他子模块并忽略标准库
目标是最终构建一个包。
我无法找到关于包装和/或其他自主研发的模块中引入其他子模块的约定:
不弄乱名字空间(并自动完成在IPython中):
- 我不希望看到
somecalc.os
,somecalc.sys
,somecalc.time
- 我不希望看到
,而无需重新导入已经进口的
somecalc
- 即使我在
somecalc.py
书面方式import os as _os
解决问题#1标准库,我也做同样的两种方式。如果我做内GUI
以下测试: somecalc.os is os #TRUE
(在somecalc.py
import os
)somecalc._os is os #TRUE
(从IPython中没有自动完成与somecalc.py
import os as _os
)
- 即使我在
无需繁琐调用标准库,例如当我简单写
os.listdir
时写somecalc.os.listdir
。除此之外,我不认为其他开发人员是否愿意与我一起开展项目。
我知道,一旦我希望把我的文件夹成一个包,我建议增加一个__init__.py
文件用我所有的进口。但是当我开发/调试我的子模块时(使用if __name__ = '__main__'
以下的代码),根目录中的__init__.py
文件将被忽略。除此之外,我还需要在我的GUI.py
文件的开头写上import somecalc
。
什么是约定?
您的解决方案并不让我从GUI访问标准库,或在更麻烦方式:现在somecalc.os.listdir成为somecalc.somecalc.os.listdir。 – Wli
使用'import sys'访问标准库?问题是什么 ? – Cyrbil
我不确定,这就是为什么我问大会。 因此,即使模块“x”已经导入到子模块“sm”中,我仍然必须每次导入“x”到所有已导入“sm”的模块中,对吧? 这是我发现奇怪的,因为我从来没有在下载的模块目录下找到标准库。 – Wli