我正在写一个包装模板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()
我将(在哪个文件中)放入这个逻辑?
答案 0 :(得分:0)
包可以变成可执行的吗? 在我描述的脚本中使用 以上?
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
的自己的模块/包的项目中使用,则可能会导致冲突。所以我更喜欢使用完全合格的模块名称。