Python项目结构

Python项目结构,python,python-3.x,Python,Python 3.x,我启动了一个Python项目。它不是web应用程序或GUI应用程序,只是一个简单的命令行工具。我通常使用相同的项目结构,即: tspviz │ .gitignore │ requirements.txt │ setup.py │ ├───data │ prices.txt │ shops.txt │ ├───tests └───tspviz │ tspviz.py │ __init__.py │ ├───algorith

我启动了一个Python项目。它不是web应用程序或GUI应用程序,只是一个简单的命令行工具。我通常使用相同的项目结构,即:

tspviz
│   .gitignore
│   requirements.txt
│   setup.py
│
├───data
│       prices.txt
│       shops.txt
│
├───tests
└───tspviz
    │   tspviz.py
    │   __init__.py
    │
    ├───algorithm
    │   │   genetic.py
    │   │   params.py
    │   │   __init__.py
    │   │
    │   └───__pycache__
    │           genetic.cpython-37.pyc
    │           params.cpython-37.pyc
    │           __init__.cpython-37.pyc
因此,这是不言自明的,主文件是
tspviz
目录中的
tspviz.py
。现在这是一个解决旅行推销员问题的程序,所以我需要创建一些类,比如
City
Path
等等。然后问题是:我把它们放在哪里?我会在
tspviz
dir中创建一个单独的目录(不是根目录)。那么,我如何命名这个文件夹而不让同事们感到困惑呢?我不知道,“类”,“类型”,“杂项”?因此,我的问题是:我是否应该将它们都放在
tspviz
中的一个目录中,因为它们可能只在那里使用;其次:有没有一种标准化的方法来命名这样的文件夹?(对于到处使用的类)

给定类名称(
City
Path
等),您的类似乎属于问题域,因此
models.py
模块可能有意义。请注意,这里不一定需要文件夹,Python不是Java,也不会强迫您进入“每个类一个文件”的非意义-如果您有其他理由将模块拆分为子模块,则仅使用文件夹(包)

至于“放在哪里”(Wheeter a module或package),显然,与您的其他模块和包处于同一级别(在tspviz/tspviz子文件夹中,以及tspviz.py和算法包)

有没有一种标准化的方法来命名这样的文件夹

没有

(在课堂上,你到处都可以使用)


Python的类是对象,就像函数和其他所有东西一样,因此在模块/包中定义(或不定义)类这一事实完全无关,函数等也是如此。

好的,太好了,谢谢。你认为我真的应该去掉
algorithm
文件夹吗,在那里
genetic.py
定义了一个类来用遗传算法解决TSP,而
params.py
只是一个包含一个数据类的文件?@Frynio不一定。这里没有“一刀切”的解决方案,也没有黄金法则,除了通常的规则:良好的命名、高内聚和低耦合。哦,是的,技术上的事实是,只有当.pyc过时时,导入的模块才会被重新编译(在导入时),而主脚本总是被重新编译的,所以主脚本中的代码越少越好(我是说wrt/启动时间)。哦,哇,我真的不知道这一点。因此,我可以主要做
,如果uuu name_uuuu==…
,从其他导入的文件中运行一些函数,这就是我实际获得时间的方式,对吗?是的,完全正确-程序的主脚本应该只导入所需的最小模块、解析参数、设置日志、配置等,然后运行。其他所有内容都属于模块/包。当然,除非它是一个小的实用程序脚本,您希望保持独立。