痴人说梦(后记)

自未晓得自家怎么会想到这样的一个比喻,可是我觉得这个比喻非常方便。我们给本是微不足道的,看看外的大规模的园地,我们就见面知晓自己之不起眼,就会见认为自己已有的想法特别狭小,一时底满和优越代表不了外东西,因为人生其实是同一不行长跑。

关于README的内容

这个自当是每个类别还当有的一个文书,目的是会简单描述该类型之音讯,让读者很快了解之类别。

它需要证实以下几只事项:

  1. 软件定位,软件的基本功能。
  2. 运作代码的道:
    安装环境、启动命令等。
  3. 概括的应用验证。
  4. 代码目录结构说明,更详细点可以印证软件的基本原理。
  5. 周边问题求证。

自家当有以上几乎碰是较好之一个README。在软件开发初期,由于开发过程中上述内容可能未肯定要发生变化,并无是一定要是在相同初始就是用拥有信息都上全。但是当品种竣工的下,是亟需做这样的一个文档的。

可以参照Redis源码中Readme的写法,这个中简洁而清晰的描述了Redis功能及源码结构。

 

当当下有限年差不多底工夫里,我道李悦及田程就是团结之知心朋友,我会以同栽文字的法门来跟他们促膝谈心,通过她们自我也视了自己好。我说不清楚李悦与田程哪一个双重像本人,两独还如本人,但个别个也未都均像自己。只是现在,是时同他们俩说再见了。

目录组织措施

至于怎样组织一个比好之Python工程目录结构,已经产生有获得了共识的目录结构。在Stackoverflow的斯题材齐,能收看大家对Python目录结构的座谈。

这边面说的早已挺好了,我吗不打算再造轮子列举各种不同之计,这其间我说一样下我之明以及认知。

要是你的花色名为也foo, 我较建议的最为方便快捷目录结构这样虽足足了:

Foo/
|-- bin/
|   |-- foo
|
|-- 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. foo/: 存放项目的有源代码。(1)
    源代码中之拥有模块、包都应该置身这目录。不要放顶层目录。(2)
    其子目录tests/存放单元测试代码; (3)
    程序的进口最好命名为main.py
  3. docs/: 存放一些文档。
  4. setup.py: 安装、部署、打包之本子。
  5. requirements.txt: 存放软件依赖之标Python包列表。
  6. README: 项目说明文件。

除却,有有方案给有了一发多的内容。比如LICENSE.txt,ChangeLog.txt文件等,我并未排于此,因为这些事物主要是种类开源之上要用到。如果你想写一个开源软件,目录该如何组织,可以参见旋即首文章。

脚,再略说一下我对这些目录的解与个人要求吧。

就是比如我以本人的仿里描写及之那么,我当在生活中,我们到底有点东西是我们相应去坚持的,面对在我们要认清自己,知道自己假如啊,并且心怀着即卖希望,持之以恒的坚持下去,勿忘初心,别给外围声音的打扰。我所以把当下篇小说起名叫也痴人说梦,一方面是怀念报我要好别怕别人的笑,要敢正视嘲笑,另一方面是纪念说从什么时候开始,敢于“说梦”,是”痴人”才敢于做的政工了?如果的确是这么,那么我怀念这样疯狂下去,我以为正因为凡神之总人口最好多矣,这种“痴”反而显得可贵了。所以,如果还有触动到本人的东西,我眷恋自己还见面刻画下来的。而且,我信任肯定会有的。

requirements.txt

夫文件是的目的是:

  1. 好开发者维护软件的承保依赖。将支付进程被新增的包添加进这个列表中,避免在setup.py安依赖时漏软件包。
  2. 造福读者明确项目以了哪Python包。

夫文件的格式是每一样执包含一个管依赖的求证,通常是flask>=0.10这种格式,要求凡这个格式会叫pip识别,这样尽管得概括的经 pip install -r requirements.txt来将具备Python包依赖还装好了。具体格式说明: 点这里。

 

后 记

附ATM目录结构:

 

作者:Alex Li
版本:示例版本 v0.1
程序介绍:
    实现ATM常用功能
    功能全部用python的基础知识实现,用到了time\os\sys\json\open\logging\函数\模块知识, 主要帮给大家一个简单的模块化编程的示例

    注意:只实现了"还款"和"取现功能"

程序结构:
day5-atm/
├── README
├── atm #ATM主程目录
│   ├── __init__.py
│   ├── bin #ATM 执行文件 目录
│   │   ├── __init__.py
│   │   ├── atm.py  #ATM 执行程序
│   │   └── manage.py #ATM 管理端,未实现
│   ├── conf #配置文件
│   │   ├── __init__.py
│   │   └── settings.py
│   ├── core #主要程序逻辑都 在这个目录里
│   │   ├── __init__.py
│   │   ├── accounts.py  #用于从文件里加载和存储账户数据
│   │   ├── auth.py      #用户认证模块
│   │   ├── db_handler.py   #数据库连接引擎
│   │   ├── logger.py       #日志记录模块
│   │   ├── main.py         #主逻辑交互程序
│   │   └── transaction.py  #记账\还钱\取钱等所有的与账户金额相关的操作都 在这
│   ├── db  #用户数据存储的地方
│   │   ├── __init__.py
│   │   ├── account_sample.py #生成一个初始的账户数据 ,把这个数据 存成一个 以这个账户id为文件名的文件,放在accounts目录 就行了,程序自己去会这里找
│   │   └── accounts #存各个用户的账户数据 ,一个用户一个文件
│   │       └── 1234.json #一个用户账户示例文件
│   └── log #日志目录
│       ├── __init__.py
│       ├── access.log #用户访问和操作的相关日志
│       └── transactions.log    #所有的交易日志
└── shopping_mall #电子商城程序,需单独实现
    └── __init__.py



参考自http://www.cnblogs.com/alex3714/articles/5765046.html
转发请注明出处http://www.cnblogs.com/0zcl

自家实际十分恐惧身边的人口知晓我以形容东西,所以马上十大多万许大部分还是自家于并未人的时候默默写下的。我心惊肉跳人家笑我白日美梦,说自己是在浪费时间,我还是恐怖人家笑话我的字幼稚,可是没道,我就是好这样做,我便是愿意把工夫花在描绘东西上,我弗奢望我的仿会受我带来什么物质及的转移,我只是最纯粹的爱,无关物质,无关金钱。我实际十分烦别人问我写这些东西怎么,有什么用?难道我们所召开的作业还是为使产生什么目的,要打及啊作用吗?既然这样,那自己不得不对问话我者问题的口答应说:“你莫掌握啊吃纯粹。”

关于requirements.txt和setup.py

《痴人说梦》写了了,但是以形容了了随后我连没同栽解脱的发,而是看不行失落。李悦与田程就要离开本人的生存了,断断续续两年差不多底年月了,他们直接在我之活着里,或许在某一个有的他们见面真的闯入我之生,我会以现实生活的一个景象被赫然发现他们。他们或者会是于早高峰挤公交车人,也许会是酒店买醉的总人口,也许会是深夜在路边哭泣的人·····

setup.py

貌似的话,用setup.py来管理代码的卷入、安装、部署问题。业界规范的写法是因此Python流行的包裹工具setuptools来保管这些工作。这种方式大使用叫开源项目面临。不过此的核心思想不是故极的工具来解决这些题材,而是说,一个档次必然要是发出一个装配置工具,能很快方便的当一如既往高新机器上将环境装好、代码部署好和以程序运行起来。

以此自家是踩过坑的。

自我正起接触Python写项目之早晚,安装环境、部署代码、运行程序是进程全是手动完成,遇到过以下问题:

  1. 安环境时经常忘记了多年来还要加加了一个新的Python包,结果同样到丝上运行,程序就算发出错了。
  2. Python包的版本依赖问题,有时候我们先后中动用的凡一个本的Python包,但是官方的都是新型的承保了,通过手动安装就可能装错了。
  3. 倘若借助之保险多以来,一个一个设置这些靠是老大讨厌的事体。
  4. 乍校友开始勾画项目之时光,将次第走起很累,因为可能时时忘记了如怎么设置各种依赖。

setup.py足以这些事情自动化起来,提高效率、减少失误的概率。”复杂的物自动化,能自动化的物一定要自动化。”是一个挺好的习惯。

setuptools的文档比较大,刚沾的口舌,可能不极端好找到切入点。学习技术的方式就是圈人家是怎用的,可以参见一下Python的一个Web框架,flask是哪勾勒的: setup.py

本来,简单点自己写单装脚本(deploy.sh)替代setup.py也未尝不可。

我们都已存揣在梦想,可我们而来小人口舍弃了都的愿意。我以为这种感觉就是是咱们于同上马之时光每个人手里还握在雷同管沙子,然后我们一道为前方跑,你盼了你身边的丁飞得都比较你赶快,你不甘落后,所以若吧加快速度往前方走,然后您就是大意了卿原来于手中的砂石,当您走至终极时,你看正在若身后的喘息的人,你以为您是赢家,这时有人报你,并无是跑得赶紧的食指战胜,而是手里沙子多之总人口战胜。

软件目录结构正式

 

顾,在上头的目结构面临,没有拿conf.py位于源码目录下,而是位于docs/目录下。

众多门类针对部署文件之应用做法是:

  1. 布置文件写于一个还是多个python文件被,比如这里的conf.py。
  2. 列蒙谁模块用到之布局文件就直通过import conf这种样式来在代码中利用安排。

这种做法我无太支持:

  1. 当即为单元测试变得紧(因为模块内部依赖了外部配置)
  2. 一头配置文件作为用户控制次的接口,应当可以由用户擅自指定该文件的路。
  3. 次组件可复用性太差,因为这种贯穿所有模块的代码硬编码方式,使得大部分模块都指conf.py本条文件。

故,我当配置的采取,更好之法子是,

  1. 模块的布局都是好灵活配置的,不让外部配置文件之震慑。
  2. 次第的配备为是足以活决定的。

克佐证是思想之是,用了nginx和mysql的同窗还知道,nginx、mysql这些程序都可随意之指定用户配置。

从而,不应于代码中一直import conf来用安排文件。上面目录结构被之conf.py,是深受有底一个安排样例,不是在描写很在程序中一直引用的配置文件。可以通过让main.py起步参数指定安排路径的法来给程序读取配置内容。当然,这里的conf.py卿可以转移个像样之名,比如settings.py。或者你吧得使另外格式的情节来修配置文件,比如settings.yaml之类的。

 

 

何以而设计好目录结构?

“设计项目目录结构”,就与”代码编码风格”一样,属于个人风格问题。对于这种风格上的正经,一直都设有个别栽态度:

  1. 一样类似同学看,这种个人风格问题”无关紧要”。理由是能够叫程序work就哼,风格问题从无是题材。
  2. 外一样像样同学认为,规范化能重新好的控制次结构,让程序有所双重强的可读性。

自是于偏于受子孙后代的,因为自己是前同近乎同学想行为下之直受害者。我早已维护了一个深不好读之种,其实现的逻辑并无复杂,但是可吃了本人特别丰富的日去理解它们想发挥的意。从此我个人对增进项目可读性、可维护性的渴求就充分高了。”项目目录结构”其实呢是属于”可读性和可维护性”的框框,我们规划一个层次分明的目录结构,就是为着达到以下简单接触:

  1. 可读性强:
    不熟悉这类别的代码的人头,一眼便能看明白目录结构,知道程序启动脚论是哪个,测试目录在哪里,配置文件在哪里之类
    。从而充分快捷的打听此项目。
  2. 可维护性高:
    定义好组织规则后,维护者就能杀显地领略,新增的哪个文件及代码应该放在什么目录之下
    。这个利益是,随着时光之延迟,代码/配置的圈追加,项目结构不会见混杂,仍然能组织好。

就此,我当,保持一个层次分明的目结构是起必要的。更何况组织一个大好的工目录,其实是同桩好简短的政。

 

 

至于配置文件之采用方式

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图