什么是Python应用程序的最佳项目结构?

假设你想用Python开发一个不重要的终端用户桌面(而不是web)应用程序。 构建项目文件夹层次结构的最佳方式是什么?

理想的功能是便于维护,IDE友好,适用于源代码控制分支/合并以及易于生成安装包。

尤其是:

  • 你把源头放在哪里?
  • 你在哪里放置应用程序启动脚本?
  • 你把IDE项目放在哪里?
  • 你在哪里进行单元/验收测试?
  • 你在哪里放置诸如配置文件之类的非Python数据?
  • 你在哪里放置非Python源码,例如C ++ for pyd / so二进制扩展模块?

  • 不要太重要。 无论什么让你快乐将工作。 没有太多愚蠢的规则,因为Python项目可能很简单。

  • /scripts/bin这种命令行界面的东西
  • /tests你的测试
  • /lib为您的C语言库
  • /doc用于大多数文档
  • /apidoc为Epydoc生成的API文档。
  • 顶层目录可以包含README,Config和什么。

    硬选择是否使用/src树。 Python没有像Java或C所具有的/src/lib/bin之间的区别。

    由于某些顶级/src目录有些人认为没有意义,因此您的顶级目录可以是应用程序的顶级体系结构。

  • /foo
  • /bar
  • /baz
  • 我建议将所有这些放在“我的产品名称”目录下。 所以,如果你正在编写一个名为quux的应用程序,那么包含所有这些东西的目录就是/quux

    然后,另一个项目的PYTHONPATH可以包含/path/to/quux/foo来重用QUUX.foo模块。

    就我而言,由于我使用Komodo Edit,因此我的IDE cuft是一个.KPF文件。 实际上我把它放在顶层/quux目录中,并且省略了将其添加到SVN。


    根据Jean-Paul Calderone的Python项目的文件系统结构:

    Project/
    |-- bin/
    |   |-- project
    |
    |-- project/
    |   |-- test/
    |   |   |-- __init__.py
    |   |   |-- test_main.py
    |   |   
    |   |-- __init__.py
    |   |-- main.py
    |
    |-- setup.py
    |-- README
    

    这篇由Jean-Paul Calderone撰写的博客文章通常作为Freenode上#python的答案给出。

    Python项目的文件系统结构

    做:

  • 将该目录命名为与您的项目相关的内容。 例如,如果您的项目被命名为“扭曲”,将其命名为它的源文件的顶级目录Twisted 。 当你发布版本时,你应该包含一个版本号后缀: Twisted-2.5
  • 创建一个Twisted/bin目录,并将可执行文件放在那里(如果有的话)。 不要给他们一个.py扩展名,即使他们是Python源文件。 除了导入和调用项目中其他位置定义的主函数之外,不要在其中放置任何代码。 (轻微皱纹:因为在Windows上,解释器是通过文件扩展名选择的,所以你的Windows用户确实需要.py扩展名。所以,当你为Windows打包时,你可能想添加它。不幸的是,并不容易的distutils技巧我知道这个过程是自动化的,考虑到在POSIX上.py扩展名只是一个疣,而在Windows上缺乏是一个实际的错误,如果你的用户库包含Windows用户,你可能想选择仅仅是.py无处不在。)
  • 如果您的项目可以作为单个Python源文件表达,那么将其放入该目录并将其命名为与您的项目相关的内容。 例如, Twisted/twisted.py 。 如果您需要多个源文件,请创建一个包( Twisted/twisted/ ,带有一个空的Twisted/twisted/__init__.py )并将源文件放入其中。 例如, Twisted/twisted/internet.py
  • 把你的单元测试在程序包中的子包(注-这意味着,上述单Python源文件选项是一招-你总是需要为你的单元测试至少一种其他文件)。 例如, Twisted/twisted/test/ 。 当然,使它成为Twisted/twisted/test/__init__.py 。 将测试放在Twisted/twisted/test/test_internet.py
  • 如果你感觉不错,分别添加Twisted/READMETwisted/setup.py来解释和安装你的软件。
  • 别:

  • 把你的源文件放到一个名为srclib的目录中。 这使得无需安装就很难运行。
  • 把你的测试放到你的Python包之外。 这使得难以针对已安装的版本运行测试。
  • 创建一个包含__init__.py的包,然后将所有代码放入__init__.py 。 只需制作一个模块而不是一个软件包,这很简单。
  • 尝试提出神奇的黑客手段,使Python能够导入您的模块或包,而无需用户将包含它的目录添加到其导入路径(通过PYTHONPATH或其他机制)。 如果您的软件在其环境中无法正常工作,您将无法正确处理所有情况,并且用户会对您生气。
  • 链接地址: http://www.djcxy.com/p/38593.html

    上一篇: What is the best project structure for a Python application?

    下一篇: Python GUI2Exe Application Standalone Build (Using Py2Exe)