我有一个主文件,叫做'主.py'和两个子文件夹。其中一个被称为“externals”并包含轻松.py'另一个叫做'modules'包含一个名为'图形用户界面.py'. 在
程序通过主.py在
我进口易趣主.py使用import externals.easygui
。和我进口的方式一样模块.gui在
但是当我调用welcome函数时,它并不知道easygui,我必须将它导入函数中。因为我想调用更多的easygui函数,所以我不想在每个def中都导入easygui。在
如何解决这个问题?在
提前谢谢!在
斯特芬
示例(不带try/except和comment内容的可读性):
在主.py公司名称:
#!/usr/bin/env python
import externals.easygui
import modules.gui
main():
gui.welcome()
在图形用户界面.py公司名称:
^{pr2}$
每个源文件都需要有自己的导入,因为它们不知道其他模块的导入。必须在文件顶部的
modules.gui.py
中包含一个import externals.easygui
。在例如。图形用户界面.py在
我们这里有什么
导入图形用户界面.py模块并将其命名为gui,这样您只需使用gui标签就可以访问gui中的函数。在
在图形用户界面.py模块只导入函数msgbox,这样就不会导入其他东西(正如您所希望的那样)。在
现在,当程序运行时,它会显示调用桂。欢迎功能。在
在主.py在
在图形用户界面.py在子文件夹模块中
^{pr2}$假设
welcome
在easygui.py
中,您需要:由于键入这些内容可能会变得乏味,因此通常会以缩写名称导入子包:
^{pr2}$或者,如果您可以通过添加
__init__.py
使整个东西成为一个包,然后您可以控制从那里导入的命名空间。。。在至于横向导入,我设置了一个测试目录结构:
现在,(为了简单起见)每个
__init__.py
只导入该目录中包含的文件/模块。所以,在斯特芬:在外部
等等。在
对于实际代码:
主.py:
轻松/图形用户界面.py:
外部/欢迎光临.py
现在我可以用这些了。在steffen的父目录中(只是为了确保包steffen在PYTHONPATH上),我可以:
嘘!现在,拥有
steffen.main.main()
有点傻。如果您想将函数引用为steffen.main()
,可以在steffen.__init__.py
中设置它。只需将其更改为:因此,如果您在
__init__.py
中通过foo.func()
调用函数,那么在导入steffen
的脚本中将其称为steffen.foo.func()
。同样,如果在__init__.py
中将函数调用为foo()
,那么在导入steffen的脚本中将其称为steffen.foo()
。希望这有道理。在这个我能想到的最简单的工作示例中,有很多东西需要消化。好的一面是,如果你能完成所有这些并理解它,那么你就知道了编写python包的所有知识(我们还没有讨论过在这里也可以使用的相对导入,或者编写一个setup.py
来实际安装包,但一旦你理解了这些东西,这些东西就很容易理解了)。在相关问题 更多 >
编程相关推荐