Python中的项目结构与文件实现
我在整理我的Python项目结构时遇到了一些困惑。我看过jcalderone: Python项目的文件系统结构,也研究过CouchApp的源代码,但还是觉得很迷茫。
我明白文件应该怎么组织,但不太明白这样做的原因。如果有人能详细给我讲解一下,或者解释一下该怎么设置一个基本的Python项目,以及这些文件之间是如何相互作用的,我会非常感激。
我觉得这对那些来自其他编程语言,比如C、C++、Erlang,或者从未编程过的人来说,肯定会有帮助。
3 个回答
让我们逐条来解释一下这些规则:
1) 你应该有一个根目录,并给它起个好名字。如果你把你的包打包成一个压缩文件(tarball),那么在根目录下放文件是不太好的做法。我每次解压缩东西,看到当前文件夹里乱七八糟的东西,心里都特别不爽。
2) 你应该把可执行文件和模块分开。它们是不同的东西。如果你打算使用distutils(一个帮助打包的工具),这样做会让你的生活更轻松。
3) 如果你只有一个模块,上面的理由就不适用了。这样你可以简化你的文件结构。
4) 单元测试应该和它的包紧密相关。但它们并不是包的一部分,所以这是创建一个子包的完美机会。
我对Python不是很精通,但从第一个链接中的这些话来看,如果你考虑到以下几点,就会觉得很有道理:
- 这个项目可能涉及到计算机或程序
- 这个项目可能还有其他人参与
如果你能保持一致的命名和文件结构,无论是人还是计算机,都能更好地理解你这个复杂的程序。
这涉及到一些话题,比如:测试、构建、部署、可重用性、搜索、结构、以及一致性等等……
标准化可以让不同的部分更好地连接在一起。
给你的目录起个和项目相关的名字。当你发布版本时,应该在名字后面加上版本号,比如:Twisted-2.5。
我不明白为什么这点不清楚。这看起来很明显。所有东西都应该放在一个目录里。
为什么东西必须放在一个目录里?因为大家都这么说,所以就是这样。
创建一个名为 Twisted/bin 的目录,把你的可执行文件放在里面。
这是 Linux 的工作方式。可执行文件都放在一个 bin
目录里。这样做可以方便地把这个特定的目录放到你的 PATH
环境变量中。
如果你的项目可以用一个 Python 源文件来表示,那就把它放到这个目录里,并给它起个和项目相关的名字。例如,Twisted/twisted.py。
没错。你会有 /Twisted、/Twisted/bin 和 /Twisted/twisted.py,里面有你实际运行的代码。那你还想把它放在哪里呢?
这没有“为什么”。你还能把它放在哪里呢?
如果你需要多个源文件,那就创建一个包(Twisted/twisted/,里面有一个空的 Twisted/twisted/init.py),把你的源文件放进去。例如,Twisted/twisted/internet.py。
这就是 Python 包的工作方式。它们是带有 __init__.py
文件的目录。教程对此解释得很清楚。
把你的单元测试放在包的子包里,路径是 Twisted/twisted/test/。
你还想把测试放在哪里?说真的,这没有“为什么”。没有更合理的选择。
在 Twisted 目录下添加 README 和 setup.py 文件,分别用来解释和安装你的软件。
没错。你还想把它们放在哪里?再说一次,这没有“为什么”。它们放在顶层目录里,因为——好吧——这就是目录的用途。它包含文件。