如何使用python包,模块等编写自定义解决方案
我正在写一个packacge foobar,它由模块alice,bob,charles和david组成。
根据我对Python包和模块的理解,这意味着我将创建一个文件夹foobar,包含以下子目录和文件(如果我错了,请更正)
foobar/
__init__.py
alice/alice.py
bob/bob.py
charles/charles.py
david/david.py
该软件包应该是可执行的,这样除了使模块alice,bob等可以作为'库'使用之外,我还应该能够在这样的脚本中使用foobar:
python foobar --args = someargs
问题1:
是否可以将程序包制作成可执行文件并用于上述脚本中?
问题2
各个模块将使用我想要重构为一个通用库的代码。 这是否意味着创建一个新的子目录'foobar / common'并将common.py放在该文件夹中?
问题3
模块如何导入公共模块? 是从'foobar import common'吗?还是我不能使用它,因为这些模块是包的一部分?
问题4
我想为foobar包在脚本中使用时添加逻辑(假设这可以完成 - 我只看到它为模块完成)
使用的代码如下所示:
if __name__ == "__main__":
dosomething()
我在哪里(在哪个文件中)放这个逻辑?
是否可以将程序包制作成可执行文件并用于上述脚本中?
Q1和Q4 。 是的,把你的:
if __name__ == "__main__":
dosomething()
在foobar/__init__.py
Q2各个模块将使用我想要重构为一个通用库的代码。 这是否意味着创建一个新的子目录'foobar / common'并将common.py放在该文件夹中?
不,你必须创建foobar/common.py
,而不是foobar/common/common.py
。 所有模块也是如此。 因此,正确的结构是:
foobar/
__init__.py
alice.py
bob.py
charles.py
common.py
david.py
做你做什么你正在创建包foobar
,分包alice
和模块alice
等,这不是你想要的,因为我明白。 此外,它根本不起作用,因为如果一个目录包含__init__.py
,并且你还没有在你的子目录中创建目录,那它将成为一个Python包。
Q3模块如何导入公共模块? 这是from foobar import common
吗?
那就对了。 您也可以简单地使用import common
但是如果您的库将用于具有自己的名为common
的模块/程序包的项目中,则可能会导致冲突。 所以我更喜欢使用完全合格的模块名称。
上一篇: How to write a custom solution using a python package, modules etc
下一篇: What are the differences between json and simplejson Python modules?