2010-05-21 54 views
0

我正在写一个packacge foobar,它由模块alice,bob,charles和david组成。如何使用python包,模块等编写自定义解决方案

从我的Python包和模块的理解,这意味着我将创建一个文件夹foobar的,用下面的子目录和文件(请纠正如果我错了)

foobar/ 
    __init__.py 
    alice/alice.py 
    bob/bob.py 
    charles/charles.py 
    david/david.py 

的包应该是可执行的,所以在除了使模块爱丽丝,鲍勃等可作为“图书馆”,我也应该能够在这样的脚本使用foobar的:

蟒蛇foobar的--args = someargs

问题1:

是否可以将包制作成可执行文件并用于上述脚本中?

问题2

各种模块将使用我想重构为一个公共库代码。这是否意味着创建一个新的子目录'foobar/common'并将common.py放在该文件夹中?

问题3

模块将如何foo的导入通用模块? 它是'从foobar导入常见'还是我不能使用它,因为这些模块是包的一部分?

问题4

我要添加逻辑当在脚本中正在使用的foobar的包(假定这是可以做到 - 我只看到它模块执行)为

的代码使用是这样的:

if __name__ == "__main__": 
    dosomething() 

哪里(在哪个文件中)我会把这个逻辑?

回答

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如何将模块foo的导入 通用模块?它是from foobar import common

没错。您也可以简单地使用import common,但是如果您的库将用于具有名为common的模块/程序包的项目中,则会导致冲突。所以我更喜欢使用完全合格的模块名称。

+0

谢谢 - 这就是我需要知道的一切(我喜欢这个网站!) – morpheous 2010-05-21 13:14:32

+0

你也可以看看这个其他问题,如果你有时间:http://stackoverflow.com/questions/2882308/产卵,一个线程中的Python – morpheous 2010-05-21 13:16:48

相关问题