python 软件目录结构规范--附如何通过环境变量导入其他目录模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 软件目录结构规范--附如何通过环境变量导入其他目录模块相关的知识,希望对你有一定的参考价值。

"项目目录结构"其实也是属于"可读性和可维护性"的范畴。

目录组织方式

关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构。在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论。

这里面说的已经很好了,我也不打算重新造轮子列举各种不同的方式,这里面我说一下我的理解和体会。

假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了:

Foo/
|-- bin/
|   |-- foo
|
|--conf/
|  |--__init__.py
|  |--settings.py
| |-- foo/ | |-- tests/ | | |-- __init__.py | | |-- test_main.py | | | |-- __init__.py | |-- main.py | |-- docs/ | |-- conf.py | |-- abc.rst | |-- setup.py |-- requirements.txt |-- README

简要解释一下:

  1. bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
  2. conf/:存放项目配置文件
  3. foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py
  4. docs/: 存放一些文档。
  5. setup.py: 安装、部署、打包的脚本。
  6. requirements.txt: 存放软件依赖的外部Python包列表。
  7. README: 项目说明文件。

除此之外,有一些方案给出了更加多的内容。比如LICENSE.txt,ChangeLog.txt文件等,我没有列在这里,因为这些东西主要是项目开源的时候需要用到。如果你想写一个开源软件,目录该如何组织,可以参考这篇文章

如何使用不同目录下的文件

以上图目录结构为例,我们在main.py中,使用bin目录下文件,首先需要找到Foo/目录,然后才能导入Foo/下的子目录的模块,并且需要做到自动获取,不能写死,这时候就使用到os模块

import os

import sys

1、找到文件的绝对路径

os.path.abspath(__file__)    #获取文件的绝对路径,包含文件名

2、获取文件的目录

os.path.dirname(os.path.abspath(__file__) )    #  例如main.py的目录是foo/ 

3、再次获取文件目录的父目录

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__) ))

4、添加到环境变量中

sys.path.append(BASE_DIR)

5、导入需要的目录

①.  import bin

②. from bin import *

二种方式导入,各有优缺点,后续会详细讲解,至此,就可以使用其他目录的模块,欢迎各位看官留言指点

 





以上是关于python 软件目录结构规范--附如何通过环境变量导入其他目录模块的主要内容,如果未能解决你的问题,请参考以下文章

如何调试 nuxt-apollo 服务器端 graphql 请求

软件目录结构规范以及在不同目录间进行模块调用

使用 nuxt-apollo 时如何使用 GraphQL 查询?

python 软件目录结构规范

软件开发目录规范

软件开发目录规范