痴人说梦(后记)

本身不亮堂自家干吗会想到那样的一个比喻,可是我以为那个比喻很适用。大家面对自然是微不足道的,看看外面的广泛的园地,大家就会精通自己的不起眼,就会认为温馨早已有的想法很狭窄,一时的自大和优化代表频频任何东西,因为人生其实是一回长跑。

 

《痴人说梦》写完了,但是在写完精通后我并从未一种解脱的感觉到,而是觉得很懊丧。李悦和田程就要离开本人的生存了,断断续续两年多的时光了,他们直白在我的生活里,或许在某一个有的他们会真的闯入我的生存,我会在现实生活的一个气象中不期而然发现他们。他们可能会是在早高峰挤公交车人,也许会是酒吧买醉的人,也许会是清晨在路边哭泣的人·····

留神,在地方的目录结构中,没有将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之类的。

 

 

就如自家在自家的文字里写到的那样,我觉得在生活中,大家总有点东西是我们应有去百折不回的,面对生存我们要判断自己,知道自己要怎么,并且心怀着那份期待,百折不挠的百折不回下去,勿忘初心,别受外界声音的苦恼。我之所以把那篇随笔起名为痴人说梦,一方面是想告诉自己自己别怕别人的讥笑,要敢于着重调侃,另一方面是想说从如曾几何时候起头,敢于“说梦”,是”痴人”才敢做的作业了?若是实在是这么,那么我想这么痴下去,我觉得正因为是明智的人太多了,那种“痴”反而显示可贵了。所以,借使还有触动到本人的事物,我想我还会写下去的。而且,我深信不疑必将会有些。

有关配置文件的行使格局

后 记

关于requirements.txt和setup.py

大家都曾怀揣着希望,可我们又有几人舍弃了一度的希望。我认为那种感觉就是我们在一发端的时候每个人手里都握着一把沙子,然后我们一起往前跑,你看看了您身边的人跑得都比你快,你不敢后人,所以您也加神速度往前跑,然后你就大意了你本来在手中的砂石,当您跑到顶点时,你望着你身后的喘息的人,你以为您是胜利者,那时有人报告你,并不是跑得快的人克制,而是手里沙子多的人克服。

requirements.txt

本条文件存在的目标是:

  1. 有利于开发者维护软件的包信赖。将支付进度中新增的包添加进这么些列表中,防止在setup.py安装看重时漏掉软件包。
  2. 方便读者明确项目应用了如何Python包。

本条文件的格式是每一行包蕴一个包依赖的辨证,平时是flask>=0.10那种格式,要求是以此格式能被pip识假,那样就可以简简单单的通过 pip install -r requirements.txt来把具备Python包看重都装好了。具体格式表达: 点这里

 

在那两年多的时日里,我以为李悦和田程就是投机的知心朋友,我会以一种文字的主意来和她们促膝谈心,通过她们自身也来看了自身要好。我说不清楚李悦和田程哪一个更像自家,五个都像本人,但多少个也不都全像我。只是现在,是时候和她俩俩说再见了。

 

我实际很怕身边的人了然自家在写东西,所以那十多万字一大半都是自己在没人的时候默默写下的。我怕人家笑我白日做梦,说我是在浪费时间,我甚至怕旁人笑话我的文字幼稚,不过不可能,我就是喜欢那样做,我就是甘心把时光花在写东西上,我不奢望我的文字会给我带来怎么着物质上的改变,我只是最纯粹的喜爱,无关物质,非亲非故金钱。我实在很讨厌外人问我写这一个事物怎么,有哪些用?难道大家所做的事体都是为着要有啥样目标,要起到怎么样效能呢?既然那样,那自己只可以对问我这几个题材的人答应说:“你不懂什么叫纯粹。”

软件目录结构正式

 

何以要规划好目录结构?

“设计项目目录结构”,就和”代码编码风格”一样,属于个人风格难点。对于那种风格上的规范,一贯都存在二种态度:

  1. 一类同学以为,那种个人风格难点”无关首要”。理由是能让程序work就好,风格难点历来不成问题。
  2. 另一类同学认为,规范化能更好的操纵程序结构,让程序有所更高的可读性。

自我是相比较偏向于后者的,因为自身是前一类同学思想作为下的直白受害者。我一度维护过一个一塌糊涂读的类型,其已毕的逻辑并不复杂,可是却消耗了自身尤其长的时光去领略它想发挥的意趣。从此我个人对于拉长项目可读性、可维护性的须要就很高了。”项目目录结构”其实也是属于”可读性和可维护性”的范围,大家统筹一个层次显明的目录结构,就是为着达到以下两点:

  1. 可读性高:
    不驾驭那些类型的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在何地之类
    。从而丰裕急忙的问询那么些项目。
  2. 可维护性高:
    定义好协会规则后,维护者就能很肯定地知道,新增的哪个文件和代码应该放在什么目录之下
    。那些利益是,随着时光的延期,代码/配置的范围扩展,项目社团不会混杂,仍旧可以协会卓越。

据此,我认为,保持一个层次显明的目录结构是有必要的。更何况协会一个佳绩的工程目录,其实是一件很简短的事情。

关于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文件等,我没有列在此处,因为那些东西根本是体系开源的时候须要用到。若是你想写一个开源软件,目录该怎么着协会,可以参见那篇作品

上面,再不难讲一下本身对那么些目录的了然和个体须要啊。

附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

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也未尝不可。

发表评论

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

网站地图xml地图