python项目中文件夹结构的pythonic方式

时间:2018-09-03 13:44:26

标签: python python-3.x

我有几个模块(类文件),一个应用程序(application.py)将创建这些类的对象并将使用它。

现在,我正在这样计划:

root folder 
        |
        |--classA--classA.py, __init__.py
        |--classB--classB.py, __init__.py
        |--classC--classC.py, __init__.py
        |--classD--classD.py, __init__.py
        |--requirements.txt
        |--setup.py
        |--application.py
        |--__init__.py
        |--Readme

有人可以请教这是否正确吗?我计划冻结我的文件夹结构。 foldername(classA),filename(classA.py)和classname(class classA :)之间有什么关系?这些命名的pythonic方式是什么?

非常感谢您的帮助,

Arnab

2 个答案:

答案 0 :(得分:1)

我喜欢this blog中建议的项目结构。我已经在我自己的github存储库中使用存根文件here复制了它。看起来像这样:

cmdline_bootstrap/
├── docs
├── test
├── bootstrap
│   ├── __init__.py
│   ├── __main__.py
│   ├── bootstrap.py
│   └── stuff.py
├── bootstrap-runner.py
├── LICENSE
├── MANIFEST.in
├── README.rst
└── setup.py

像这样的结构允许将文件夹bootstrap打包并作为库或命令行应用程序分发。将测试文件夹放置在主模块之外可以使用python setup.py test轻松进行测试。将doc文件夹放置在主模块之外可以使github轻松在github页面上自动部署文档。

对于您的特定项目,我可能会在bootstrap文件夹中执行以下操作:

cmdline_bootstrap/
├── bootstrap
│   ├── __init__.py
│   ├── __main__.py
│   ├── file_handlers: read_automation_rules.py, output_automation_results.py, __init__.py
│   ├── optimization_functions: cost_funciton_reduce_foo.py, __init__.py
│   └── bootstrap.py

...

我建议按意图来构造文件夹。例如,一个文件夹包含所有处理对file_system的读/写的文件。另一个文件夹可能具有您正在使用自动化应用程序尝试的所有不同的优化功能。当然,您将需要更多文件夹。

与您的示例相反,我相信每个文件夹应包含约5个文件。 1个文件表示您确实不需要文件夹。 10个文件意味着您的文件夹的目的可能是针对当前应用程序。

编辑:

值得注意的是,PEP 8 recommends the following for folder naming

  

模块应使用简短的全小写名称。下划线可以是   如果可以提高可读性,则在模块名称中使用。 Python包   也应该使用短的全小写名称,尽管使用   不鼓励使用下划线。

使用本指南class_a.py优于classA.py。对于文件夹file_readers胜过fileReaders

答案 1 :(得分:0)

没有 pythonic 方法。这完全取决于您的应用程序的语义。 python最特定的东西是:与其他语言(例如Java)相反,没有理由每个类都只有一个模块。

只需遵循分层结构即可。模块应该是做类似事情的类的集合。文件夹应该是执行类似操作(更高级别)的模块的集合。例如:

一个printers.py模块可以包含一个InkjetPrinter和一个LaserPrinter类。该模块最终可以放置在inputoutput文件夹中,该文件夹也包含mail.pynetwork.py模块。

这太乐观了,以为您现在可以修复文件夹结构了。在编写代码时,您会发现需要的新事物和不需要的旧事物。只需保持您的代码足够灵活,以使小的更改就不会破坏它。