2012-10-06 87 views
2

我正在开发不同的.py文件(示例DisplayTools.py,CollectionTools.py ...)中的python函数,以便将它们作为工具导入到更一般的文件Start.py中。如果所有文件都在同一个目录中,它工作正常。我可以在Start.py“导入DisplayTools”中说... 但是如何以更多项目的方式组织这些项目并且更方便用户(他们只需要在Start.py文件中工作)。对于具有这样的文件结构例子:Handlng python项目和文件组织

  • 项目/

    Start.py

    • 工具/

      DisplayTools.py

      CollectionTools.py

我读过__init__文件的使用,但它们是如何工作的,放置这些文件的位置以及它们包含的是什么?

如果你有一些帮助,让我以这种方式组织我的项目。

非常感谢

回答

5

我重构代码组织只是有点给你的顶层目录更具描述性的名称。今天,我选择happy_bananas。所以我们可以说你组织你这样的文件:

happy_bananas 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

那么所有你需要做的就是添加一个空__init__.py文件,你可以使用它就像任何其他的包装,如:

happy_bananas 
    __init__.py 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

而且现在,如果你可以这样做:

from happy_bananas import DisplayTools

就像你面前。

现在,要将它加入到您的系统中,您需要打包并使用安装脚本。您可以使用distutilssetuptools来做到这一点,但也许最简单的现有描述是在Zed Shaw的Learn Python The Hard Way Exercise 46中。你真的可以复制/这些文件粘贴与那里描述并以目录结构像这样结束:

happy_bananas 
    setup.py 
    tests 
     test_happy_bananas.py 
    happy_bananas 
     __init__.py 
     start.py 
     DisplayTools.py 
     . 
     . 

然后,当你有你的安装脚本写的,你可以进入你的文件夹,运行python setup.py install(或python setup.py develop)并且能够在任何文件中使用import happy_bananas

另一方面,Python中的命名约定是为文件名和函数名使用snakecase。因此,而不是DisplayTools.py,最好将其重命名为display_tools.py。 CamelCase通常只用于类名。

+0

很好的答案,但可能是OP的矫枉过正。 –

+0

我并不真正使用安装程序。根据我在问题中提出的文件树,从工具导入DisplayTools.py不工作(即使在Tools目录中有一个空的'__init__'文件)... [感谢您对namin约定的评论] – user1187727

+0

包装是我期望的更复杂的演变。我会尽力在稍后处理。我希望用户根据Tools/DisplayTools.py中的函数填写Start.py,例如! – user1187727

0

对于初学者来说,我只是简单地将文件更改为具有一组函数和一些主代码,因为这些文件也可以被执行。

例如:

if __name__ == "__main__": 
    dosomething() 

然后在主,只需导入其他脚本,你可以用用有不实际运行该脚本的功能。