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

目录组织方式

关于如何组织一个较好的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 *

二种方式导入,各有优缺点,后续会详细讲解,至此,就可以使用其他目录的模块。

=======================以上是我复制来的,以下用上课内容作为举例。=============================

目录结构举例:

start.py中的内容:

#如果我们没有pycharm,需要部署到linux服务器上运行,那么该文件的路径需要加到环境变量中
import os,sys
res = os.path.abspath(__file__) #__file__是指当前的py文件,这行代码是取当前文件的绝对路径,加入到环境变量中。这样可以在cmd中运行了
base_path = os.path.dirname(os.path.dirname(res))#os.path.dirname(res)是取父目录,两层是取上两级目录
sys.path.insert(0,base_path)#把这个目录加入环境变量,这样就不用写死了。 # print(res)
# print(base_path)
# E:\PycharmProjects\day08_python\my_api\bin\start.py
# E:\PycharmProjects\day08_python\my_api
#以上代码必须写在最上面,因为要先加入环境变量,再导入。加上后在任何人电脑运行都可以了 #===============================如果在parcharm中运行,上面的内容可以不用写====================== from lib.service import server #导入server
from lib import user,pay,order #导入其他的模块
from conf.setting import server_info #导入数据库配置信息
server.run(**server_info) #启动服务

setting.py中的内容:

#mysql 配置信息、连接数据库
mysql_info = {
'host':'xxx.xx.x.xx',
'port':3306,
'user':'xxx,
'password':'',
'db':'xxx',
'charset':'utf8',
'autocommit':True
} #启动的配置文件
server_info = {
"host":'0.0.0.0',
"port":5000, #启动服务的端口号
'debug':True #是否是调试模式
}

service.py中的内容:

#这个就指提供服务,直接写一个server.py文件,谁要用就导入
import flask server = flask.Flask(__name__) #把当前这个python文件当做一个服务

tools.py中的内容:

#工具模块

import pymysql
from conf.setting import mysql_info # 导入我们在conf.setting里写的函数 def my_db(sql):#执行数据库
conn = pymysql.connect(**mysql_info)#两个星号把字典自动变成v-k形式
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchall()
cur.close()
conn.close()
return res def check_float(s):
'''
这个函数的作用就是判断传入的字符串是否是合法的小数
:param s: 传入一个字符串
:return: True/false
'''
s = str(s)
if s.count('.')==1:
s_split = s.split('.')
left,right = s_split
if left.isdigit() and right.isdigit():
return True
elif left.startswith('-') and left[1:].isdigit() \
and right.isdigit():
return True
return False

而user.py、pay.py、order.py分别是用户登录注册、支付、生成订单项目代码.

python学习笔记:目录结构的更多相关文章

  1. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  2. linux学习笔记-目录结构(1)

    每个linux系统的目录结构差不多,因为有FHS(Filesystem Hierarchy Standard)标准的规范. FHS的重点在于规范每个特定的目录下应该要放什么样的数据. FHS依据文件系 ...

  3. Vue学习笔记-目录结构

    1.采用脚手架构建的项目基本目录结构 可能会有些许差别,但是大致基本目录都差不多 2.项目入口(index.html,main.js,App.vue) 一般情况下,我们都习惯性将 index.html ...

  4. linux学习笔记-目录结构(2)

    2./usr的意义与内容 依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的. usr是UNIX Software Resource的缩写,即UNIX操作系统软件资源所放置的目录,而 ...

  5. 【目录】Python学习笔记

    目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...

  6. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  7. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  8. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  9. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  10. Python 学习笔记(下)

    Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...

随机推荐

  1. ccf 201809-3 元素选择器

    一.思路: 1.将结构化文档的每一行处理成一个节点(可定义一个结构体,成员包含标签tag.属性id.层级level.祖先所在行数father). 2.然后整个结构化文档就成了一个树形结构,可从任一节点 ...

  2. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  3. uWSGI、WSGI、uwsgi、wsgiref、werkzeug

    WSGI WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,也不是python模块.框架.API或者任何软件,只是一种规范,描述web server如何与w ...

  4. cf:c题

    题目: 代码: #include<iostream> #include<algorithm> #include<vector> #include<string ...

  5. Libgdx中TextButton的一些思考

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/caihongshijie6/article/details/37566183         由于有 ...

  6. 基于QRcode的带有文字+图片的二维码的Vue组件

    1 <template> 2 <!-- 生成二维码开放接口: 3 二维码内容[通常为url] 4 二维码大小[限制为正方形] 二维码下方显示:文字 5 二维码中间显示:图片--> ...

  7. 十万级百万级数据量的Excel文件导入并写入数据库

    一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后 ...

  8. SQL数据库—<4>SQL编程--简单学习

    数据类型:列的类型 变量定义:declare 变量名 类型名    变量名:以@开头 赋值和取值:    赋值:set/select 变量=值    取值:变量名例:declare @a varcha ...

  9. Android关于界面一定时间无操作自动跳转到指定界面的实现

    主要用到的功能,自定义一个定时器CountTimer继承CountDownTimer. public class CountTimer extends CountDownTimer { private ...

  10. Ansible--04 ansible 流程控制

    ansible 流程控制 playbook 条件语句 不管是 shell 还是各大编程预言中,流程控制,条件判断都是必不可少的,在我们使用 Ansible的过程中,条件判断的使用频率都非常高. 例如: ...