目标:

如何创建《项目“骨架”目录》
包含:项目文件布局、自动化测试代码,模组,以及安装脚本。
由于编写一个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. 【windows核心编程】双机调试操作

    1.1 中断与异常 计算机最重要的任务就是执行指令,只要你设置一个起始位置,他就会一条指令的执行下去.而中断和异常机制是为了防止计算机无休止地执行任意指令,出现错误时可以引导处理器转向正常控制流而诞生 ...

  2. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  3. C++ 中的指针、引用以及函数调用中的问题

    参考链接:https://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html 函数传参的方式有三种: (1)值传递: (2)引用传递 ...

  4. 关于Mybatis的SQL映射文件中in关键字的用法

    有一个需求是可以选择多个设备进行删除,于是想到将多个设备id拼成字符串作为参数,以逗号隔开,如:"123,234,456". SQL如下: <delete id=" ...

  5. Androi:ViewPager

    Android ViewPager控件的使用(基于ViewPager的横向相册)!!!: http://blog.csdn.net/Android_Tutor/article/details/7980 ...

  6. Coursera台大机器学习技法课程笔记07-Blending and Bagging

    这一节讲如何将得到的feature或hypothesis组合起来用于预测. 1. 林老师给出了几种方法 在选择g时,需要选择一个很强的g来确保Eval最小,但如果每个g都很弱该怎么办呢 这个时候可以选 ...

  7. CSS Grid 布局

    CSS Grid 布局是 CSS 中最强大的布局系统.与 flexbox 的一维布局系统不同,CSS Grid 布局是一个二维布局系统,也就意味着它可以同时处理列和行.通过将 CSS 规则应用于 父元 ...

  8. 洛谷P4281 紧急会议

    传送门啦 思路: $ Lca $ 这个题要求这个显而易见吧.但是难就难在怎么在树上利用 $ Lca $ 去解决三个点的问题. 首先明确三个点两两的 三个 $ Lca $ 中有一对是相等的,我们也会发现 ...

  9. poj3579 二分套二分

    和poj3685类似,都是二分答案然后在判断时再二分 这题的内层二分可以用stl代替 /* 二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值 ...

  10. python接口自动化测试二十六:使用pymysql模块链接数据库

     #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2018/5/28 18:51# @Author  : StalloneYang#  ...