目标:

如何创建《项目“骨架”目录》
包含:项目文件布局、自动化测试代码,模组,以及安装脚本。
由于编写一个Python文件可以作为一个模块一个带__init__.py的目录算一个

创建:

第一步

需要构架的项目文件框架如下:

第二步

构建代码(Linux系统下的终端):

~ $ mkdir -p projects
~ $ cd projects/
~/projects $ mkdir skeleton
~/projects $ cd skeleton
~/projects/skeleton $ mkdir bin NAME tests docs
# 初始文件配置
~/projects/skeleton $ touch NAME/__init__.py
~/projects/skeleton $ touch tests/__init__.py

注:Window下直接建立文件夹即可。

第三步

安装项目文件需要的模块:setup.py文件内容如下:

try:
from setuptools import setup
except ImportError:
from distutils.core import setup config = {
'description':'My Project',
'author':'My Name',
'url':'URL to get it at.',
'download_url':'Where to download it.',
'author_email':'My email.',
'version':'0.1',
'install_requires':['nose'],
'packages':['NAME'],
'scripts':[],
'name':'projectname'
} setup(**config)

创建一个tests/NAME_tests.py的测试文件,代码如下:

from nose.tools import *
import NAME def setup():
print('SETUP') def teardown():
print('TEAR DOWN') def test_basic():
print('I RAN!')

最终项目骨架结构:

projects/
|-- skeleton/
| |-- bin
| |-- NAME
| | |-- __init__.py
| |-- tests
| | |-- __init__.py
| | |-- NAME_tests.py
| |-- docs
|-- setup.py
|-- Readme

第四步:

测试框架

流程:

1. 拷贝这份骨架目录,把名字改成你新项目的名字。
2. 再将NAME 模组更名为你需要的名字,它可以是你项目的名字,当然别的名字也行。
3. 编辑setup.py 让它包含你新项目的相关信息。
4. 重命名tests/NAME_tests.py ,让它的名字匹配到你模组的名字。
5. 使用nosetests 检查有无错误。
6. 开始写代码吧。
 
 


优秀的项目目录:

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: 项目说明文件
 

典型的Python文件结构

 

单元测试框架之nose知识点

nose相关执行命令:

  1. nosetests  –h查看所有nose相关命令
  2. nosetests –s执行并捕获输出
  3. nosetests –with-xunit输出xml结果报告
  4. nosetests -v: 查看nose的运行信息和调试信息
  5. nosetests -w 目录:指定一个目录运行测试

nose 特点:

自动发现测试用例(包含[Tt]est文件以及文件包中包含test的函数)

  1. 以test开头的文件
  2. 以test开头的函数或方法
  3. 以Test开头的类

经过研究发现,nose会自动识别[Tt]est的类、函数、文件或目录,以及TestCase的子类,匹配成功的包、任何python的源文件都会被当做测试用例。

Python3包的创建与安装

参考文献:

  1. 笨办法学Python
  2. http://blog.chinaunix.net/uid-26602509-id-3499026.html
  3. http://python.jobbole.com/86376/
  4. https://www.cnblogs.com/semishigure/archive/2017/08/03/7268251.html
  5. Head First Python
 知识在于点点滴滴的积累,我会在这个路上Go ahead,
有幸看到我博客的朋友们,若能学到知识,请多多关注以及讨论,让我们共同进步,扬帆起航。
 

后记:打油诗一首

 

适度锻炼,量化指标

考量天气,设定目标

科学锻炼,成就体标

高效科研,实现学标

 

Python3练习题系列(10)——项目骨架构建的更多相关文章

  1. Python3练习题系列(09)——物以类聚,人以群分

    目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言.首先你需要做出“东西”来,然后你“告诉”这些东西去完 ...

  2. Python3练习题系列(06)——各种符号总结

    Python3中的各种符号总结 1关键字 import keyword print(keyword.kwlist, end='\t') ['False', 'None', 'True', 'and', ...

  3. Python3练习题系列(05)——设计和调试规则

    If 语句的常见规则 1. 每一个“if 语句”必须包含一个else: 2. 如果这个else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在else 语句后面使用一个叫做die 的函数,让 ...

  4. Python3练习题系列(07)——列表操作原理

    目标: 理解列表方法的真实含义. 操作: list_1.append(element) ==> append(list_1, element) mystuff.append('hello') 这 ...

  5. Python3练习题系列(08)——代码阅读方法及字典跳转表理解

    问题:分析下面代码 cities['_find'] = find_city city_found = cities['_find'](cities, state) 分析过程: 一个函数也可以作为一个变 ...

  6. Python3练习题系列(01)

    2018-06-13 题目: 根据用户回答做出相应的判断,完成一个“回答-判断”的小游戏 Python3知识点: if, else, elif 实例代码: print("You enter ...

  7. Python3练习题系列(04)

    题目: 制作一个游戏 知识点: 函数.if_elif_else, while, exit 游戏图谱: 游戏代码: from sys import exit def gold_room(): print ...

  8. Python3练习题系列(03)

    题目: 思考While循环,看看它的特点是什么? 知识点: while循环 分析: 特点:while-loop(while 循环).while-loop 会一直执行它下面的代码片段,直到它对应的布尔表 ...

  9. Python3练习题系列(02)

    题目: 思考循环结构,看看它是怎样运行的,对我们认识程序有何益处. 知识点: list, for-loop, range 练习代码: 练习1 the_count = [1, 2, 3, 4, 5] # ...

随机推荐

  1. freeRTOS中文实用教程5--内存管理

    1.前言 不同的嵌入式系统具有不同的内存配置和时间要求.所以单一的内存分配算法只可能适合部分应用程序. FreeRTOS 将内存分配作为可移植层面(相对于基本的内核代码部分而言).这使得不同的应用程序 ...

  2. UML和模式应用2: 迭代、进化和敏捷

    1.前言 本章主要介绍迭代.敏捷开发及UP(统一过程)的基本概念 2.基本术语 Items Note 软件开发过程 描述了构造.部署及维护软件的方式 迭代开发 是一种软件开发过程的生命周期模型,依赖短 ...

  3. awk对列/行进行统计求和【转】

    场景]--类似于excel中的sum函数对列/行进行统计求和 A01 A02 A03 A09 [要求1]--对列进行统计求和 A01 A02 A03 A09 TOTAL [要求2]--对行进行统计求和 ...

  4. javaScript——原型继承四步曲

    <script> //js模拟类的创建以及继承 //第一步:创建父类 function Parent(name){ this.name = name; } //给父类添加属性方法 Pare ...

  5. python内存数据库pydblite

    Pure-Python engine 最近由于项目开发中发现python informixDB模块对多线程的支持非常不好,当开启两个线程同时连接informix数据库的时候,数据库会报错,显示SQL ...

  6. ajax模拟获取json

    现在工作中我用到获取数据的方式,基本都是ajax.前台获取后端的数据后,需要进行处理,然后把他们放进页面中的相应标签里.下面举一个简单的例子,来模拟数据的获取和摆放. 这里用ng框架获取数据然后处理, ...

  7. javascript 类型比较方法

    不要使用new Number().new Boolean().new String()创建包装对象: 用parseInt()或parseFloat()来转换任意类型到number: 用String() ...

  8. CSS伪元素before、after妙用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 线程使用中常见的错误-“System.InvalidOperationException”线程间操作无效: 从不是创建控件“ ”的线程访问它。

    “System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件“la ...

  10. 一.hadoop入门须知

    目录: 1.hadoop入门须知 2.hadoop环境搭建 3.hadoop mapreduce之WordCount例子 4.idea本地调试hadoop程序 5.hadoop 从mysql中读取数据 ...