python项目结构目录结构_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

简要解释一下:

bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。

conf/:存放项目配置文件

foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。

docs/: 存放一些文档。

setup.py: 安装、部署、打包的脚本。

requirements.txt: 存放软件依赖的外部Python包列表。

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服务器上运行,那么该文件的路径需要加到环境变量中

importos,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':'123456','db':'xxx','charset':'utf8','autocommit':True

}#启动的配置文件

server_info ={"host":'0.0.0.0',"port":5000, #启动服务的端口号

'debug':True #是否是调试模式

}

service.py中的内容:

#这个就指提供服务,直接写一个server.py文件,谁要用就导入

importflask

server= flask.Flask(__name__) #把当前这个python文件当做一个服务

tools.py中的内容:

#工具模块

importpymysqlfrom 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()returnresdefcheck_float(s):'''这个函数的作用就是判断传入的字符串是否是合法的小数

:param s: 传入一个字符串

:return: True/false'''s=str(s)if s.count('.')==1:

s_split= s.split('.')

left,right=s_splitif left.isdigit() andright.isdigit():returnTrueelif left.startswith('-') and left[1:].isdigit() \andright.isdigit():returnTruereturn False

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值