如何使用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的模块/程序包的项目中,则可能会导致冲突。 所以我更喜欢使用完全合格的模块名称。

链接地址: http://www.djcxy.com/p/47139.html

上一篇: How to write a custom solution using a python package, modules etc

下一篇: What are the differences between json and simplejson Python modules?