Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147281
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2020-12-30 16:49
文章分类
文章存档

2021年(48)

2020年(3)

我的朋友

分类: Python/Ruby

2021-01-07 16:17:09

# 目录


*   一、前提准备
*   二、虚拟环境
    *   1.virtualenv的安装和应用
    *   2.pipenv的安装和使用
    *   3.导出虚拟环境为requirements.txt文件
    *   4.pipenv的相关使用命令
    *   5.需要在虚拟环境中起项目
*   三、Python代码规范
*   四、工程结构化


`测试平台是做什么的?`


测试开发研发的测试平台**是给点点点的人用的**,可以帮助我们做自动化测试、用例管理、报表生成等,提高测试工作效率。


例如用市面上的postman做的一些测试,不符合公司项目的实际。但是自动化测试平台可以根据公司实际项目需求做定制化开发。


## 一、前提准备


Python环境:python3.7是python3里面目前最稳定的一个版本,3以上的版本都没有问题。


电脑:Windows10家庭版


## 二、虚拟环境


Python虚拟环境的主要目的是:为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个包,而与其它的工程无关。


不同的虚拟环境中同一个包可以有不同的版本。并且,虚拟环境的数量没有限制,我们可以轻松地用virtualenv或pipenv等工具来创建多个虚拟环境。


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-16d89bb0999f06b5.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


### 1.virtualenv的安装和应用


##### (windows)安装步骤:


1.pip 安装 virtualenv


`pip install virtualenv`


2.pip安装虚拟环境管理包


`pip install virtualenvwrapper-win`(这个是windows下的管理工具)


注意:如果是用的mac或者在linux上安装,直接`pip install virtualenvwrapper`即可。


3.创建一个存放虚拟环境的目录(建议命名为.env或者.virtualenv,也可以叫其它名字,注意不要中文命名)。


![image](https://upload-images.jianshu.io/upload_images/25205170-e833465e28373d4e.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


4.配置环境变量(变量名:`WORKON_HOME`,值:上面创建的目录路径)


![image](https://upload-images.jianshu.io/upload_images/25205170-4f13f5d82e8d32c1.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


查看电脑中的虚拟环境,输入`workon`,会显示所有的虚拟环境:


![image](https://upload-images.jianshu.io/upload_images/25205170-94e5ed7fd28c9be3.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


#### 创建虚拟环境有一些命令,virtualenv的使用命令:


| wokon | 列出所有的虚拟环境 |
| --- | --- |
| workon[name] | 进入指定的虚拟环境 |
| deactivate | 退出当前的虚拟环境 |
| mkvirtualenv[name] | 创建虚拟环境 |
| rmvirtualenv[name] | 删除虚拟环境 |


**包安装:**


虚拟环境中,安装对应的依赖包,进入虚拟环境直接使用`pip install`进行安装。


`mkvirtualenv -p python3 qinghan`


如果电脑里只安装了python3,那么直接输入`mkvirtualenv qinghan`


![image](https://upload-images.jianshu.io/upload_images/25205170-66993bb6f1e49a0a.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


后面你看到多了这个虚拟环境名,创建虚拟环境后会自动进入虚拟环境里面。


![image](https://upload-images.jianshu.io/upload_images/25205170-4d55a9e0da96ec55.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


先输入`exit();`再输入`deactivate`


进入某个虚拟环境,可以这样输入:例如 `workon qinghan`


删除某个虚拟环境,可以这样输入: `rmvirtualenv tester`


输入`pip list`可查看**当前电脑**已安装的python相关的依赖包。


**查看虚拟环境中有多少依赖包:**


先输入 `workon qinghan`再输入 `pip list`


在qinghan这个虚拟环境中安装一个django包:


`pip install django`


![image](https://upload-images.jianshu.io/upload_images/25205170-2d496034a671db71.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


这个包在其它虚拟环境中是看不到的,独立隔开的。


卸载包`pip uninstall django`


#### 使用virtualenv这个管理工具有个缺点:


安装django的时候,会把django相关的依赖包都安装下来。安装django的时候自带安装的`pytz`和`sqlparse`包,卸载的时候并没有卸载。


### 2.pipenv的安装和使用


pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。


过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock。


Pipfile文件用来记录项目依赖包列表,Pipfile.lock文件记录了固定版本的详细依赖包列表,查看依赖关系是十分方便。


支持python2和python3。支持mac,win,linux,在各个平台的命令都是一样的。各个地方使用了哈希校验,无论安装还是卸载包都十分安全。


安装:`pip install pipenv`


#### 创建虚拟环境


| 第一步创建文件夹 | mkdir py3env |
| --- | :-- |
| 第二步进入文件夹 | cd py3env |
| 第三步初始化虚拟环境 | pipenv install |


创建好虚拟环境后会生成:一个Pipfile文件和一个Pipfile.lock。


项目提交时,可将Pipfile文件和Pipfile.lock文件一并提交,待其他开发克隆下载。


Pipfile.lock文件是通过hash算法将包的名称和版本,及依赖关系生成哈希值,可以保证包的完整性。


#### Pycharm会自动定位到当前工程的路径下面:


![image](https://upload-images.jianshu.io/upload_images/25205170-745eb79de74c0c39.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


我这里是前面已经安装过了。装好之后,不需要配置环境变量,直接就可以用了。


在工程里创建虚拟环境,直接在工程里面输入`pipenv install`


这里默认的是python37,所以使用默认的python37解释器创建虚拟环境。


![image](https://upload-images.jianshu.io/upload_images/25205170-5b1dbb0bff43023a.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


#### pipenv管理模块和包


在虚拟环境中安装模块或者包 `pipenv install 包名`(注意在当前项目路径下执行以上命令)


通过`–-dev`指明只安装在开发环境中(开发环境是你当前开发的环境,生产环境是上线部署的实际环境)


`pipenv install requests --dev`


安装包记录是在[dev-packages]部分,或是[packages]部分。


在安装时,指定`–-dev`参数,则只安装[dev-packages]下的包;若安装时不指定`–-dev`参数,只会安装[packages]包下面的模块。


| 卸载虚拟环境的模块包 | pipenv uninstall 包名 |
| --- | --- |
| 查看安装包及依赖关系 | pipenv graph |
| 生成requirements.txt文件 | pipenv lock -r --dev > requirements.txt |
| 通过requirements.txt安装环境 | pipenv install -r requirements.txt |


#### pipenv install有3个作用:


1.当前路径下不存在虚拟环境,它就创建虚拟环境。


2.`pipenv install 相关模块名`,比如`pipenv install requests`那么它就是安装一个requests模块的意思。


3.`url = ""`是国外源,需换成Python国内源:清华大学源``


![image](https://upload-images.jianshu.io/upload_images/25205170-0468c9e5953c0782.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


现在安装个包:`pipenv install requests`


**安装的时候,会默认把安装的包记录在[packages]下面:**


![image](https://upload-images.jianshu.io/upload_images/25205170-cb234818e8061731.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


如果想安装某个包只想在开发环境下用,不想放在[packages]下面,可以放在[dev-packages]下面,可通过`--dev`指定一下:


![image](https://upload-images.jianshu.io/upload_images/25205170-fa614eb224b6b1a3.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


一个Pipfile文件和一个Pipfile.lock这两个文件,是用来记录当前环境下的相关的依赖包的,以及在服务器上恢复环境用的。


Pipfile.lock这个文件记录的更完整,比如在虚拟环境中安装了`requests`了,但是`requests`有依赖其它的包吗?那就记录在Pipfile.lock文件里面。**Pipfile.lock这个文件不可随意修改!**


**Pipfile.lock文件这个记录的很准确很详细:**


![image](https://upload-images.jianshu.io/upload_images/25205170-83e1d1129e7c8bd6.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


比如在这个工程下开发了一个项目,那么接下来要把这个项目部署到服务器里面,Pipfile.lock文件和项目代码一起传到服务器上面去。


在服务器上通过Pipfile.lock文件可以恢复当前开发的环境,通过对应的命令可以进行恢复。


在哪个路径下运行`pipenv`这个命令,那么就默认在哪个路径下面创建虚拟环境。


**Pipfile文件中这里是可以修改的:**


![image](https://upload-images.jianshu.io/upload_images/25205170-40373441c2112e15.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


**安装的包,要在服务器上用的话,那就装在[packages]里,如果只是开发环境用的话就装在[dev-packages]**


`= "*"` 这个不用管什么意思。


要在class_01day文件夹里面再创建一个虚拟环境,把Pipfile文件和Pipfile.lock文件复制过来。把项目上传到服务器的时候,同样也把这2个文件拿到服务器里面来。


比如服务器下面的工程是class_01day,是服务器下面项目的一个路径。


在服务器下面恢复当前代码运行的环境,进入路径下面,运行命令`pipenv install`创建个虚拟环境就可以了。


**注意:不是只复制这2个文件就行了啊。要把项目代码和这2个文件一起传过去。通过这2个文件可以把开发时候的所有的环境恢复到服务器上面。**


**查看当前虚拟环境下已经安装好的依赖包:**


`pipenv graph`


**开发环境里面的包是不会恢复进去的。**


之前在test_01文件夹下的Pipfile文件里手动添加的`flask = "*"`。


在把这2个文件复制到python_ck01文件夹下,**恢复的时候会自动化安装[packages]下面的包。**


![image](https://upload-images.jianshu.io/upload_images/25205170-103ddb0e268b4640.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


也可以把[dev-packages]的包恢复进来,输入命令`pipenv install --dev`


pipenv这个工具比virtualenv强大一些。pipenv是对virtualenv的一个封装。


在环境里如果要卸载相关的依赖包,例如卸载`requests`。`requests`下面有4个相关的依赖包。


这里卸载`requests`,会把`requests`下面依赖的包也会进行卸载。而virtualenv卸载的时候只会卸载`requests`,`requests`对应的依赖它是不会卸载的。


卸载命令:`pipenv uninstall requests`


一个虚拟环境只能装一个`requests`。


**requests和依赖包的关系,requests是依赖这些模块实现的:**


![image](https://upload-images.jianshu.io/upload_images/25205170-f5f3875263620070.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


只能通过graph这个看,不能通过json文件看。


卸载`requests`后,它的相关依赖是保存下来了,这些包掉到外面来。


但是将这2个文件拷贝到服务器里面去,在恢复的时候,那么它所依赖的包是不会恢复进去的。


如果使用virtualenv这个工具,virtualenv也可以把虚拟环境导出来。


**比如把requests卸载了,用virtualenv导出来的相关环境,去服务器上进行恢复的时候,requests虽然没有了,但是requests下面的依赖包也会恢复进去。**


导出virtualenv相关的依赖包,可以导出一个requirements.txt文件,用的virtualenv肯定有这个文件。


### 3.导出虚拟环境为requirements.txt文件


requirements.txt文件,里面记录了当前程序的所有依赖包及版本号。


其作用是用来在另一个环境上重新构建项目所需要的运行环境依赖。


| 导出当前环境到requirements.txt | pip freeze > requirements.txt |
| --- | --- |
| 使用requirements.txt恢复环境 | pip install -r requirements.txt |


![image](https://upload-images.jianshu.io/upload_images/25205170-64a35dcf9c97111d.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


拿到这个文件,也可以恢复到服务器上去。


pipenv可以通过Pipfile和Pipfile.lock文件进行环境恢复。也可以通过`requirements.txt`进行环境恢复。


### 4.pipenv的相关使用命令


| pipenv –rm | 删除虚拟环境 |
| --- | --- |
| pipenv –where | 列出本地工程路径 |
| pipenv –venv | 列出虚拟环境路径 |
| pipenv –py | 显示Python解释器信息 |
| pipenv graph | 查看包依赖 |
| pipenv lock | 生成lock文件 |
| pipenv –rm | 删除虚拟环境 |
| pipenv shell | 直接进入虚拟环境 |
| exit | 退出虚拟环境 |


pipenv是对virtualenv的封装。pipenv的底层还是virtualenv和pip实现的。 pipenv集成了virtualenv和pip两个工具。


virtualenv只能通过requirements.txt进行环境恢复。


**通过virtualenv,不用看当前所在的路径,通过命令操作所有的虚拟环境。**


**通过pipenv,这个命令只能操作当前所在目录下的虚拟环境。**


![image](https://upload-images.jianshu.io/upload_images/25205170-fc4ffb8a5b1105d9.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


删除完虚拟环境,Pipfile和Pipfile.lock文件以及文件夹不会被删除,需要我们手动来删除。


**通过virtualenv创建的可以这样删除:**


`rmvirtualenv fff`


通过`pipenv --where`列出当前虚拟环境所在的目录。


虚拟环境是存放在virtualenv下面的。查看当前虚拟环境存放在哪,输入命令`pipenv --venv`


卸载了某些包,可以通过`pipenv lock`这个命令重新生成lock文件。


现在这个lock文件是同步生成的。如果把lock文件删除了,可以通过这个命令生成lock文件。


### 5.需要在虚拟环境中起项目


如果没进入虚拟环境,就没有相关的依赖包,启动项目就启动不了。


## 三、Python代码规范


### 1.pep8(python代码样式规范)


文档地址(中文):


[blog.csdn.net/ratsniper/a…](https://blog.csdn.net/ratsniper/article/details/78954852)


### 2.pep257 (python文档字符串相关的约定):


文档地址:


[github.com/qiuxiang/pe…]()


### 3.pep20(python代码的理念):


文档地址:


[www.python.org/dev/peps/pe…](https://www.python.org/dev/peps/pep-0020/)


**重点:**


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-e534eff9c04bb5b2.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


调整代码格式:Ctrl+Alt+L


**注释:**


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-f642c8b1fb0d47df.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-36e9d6e9d8444bba.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


**模块和包相关规范:**


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-e082e680fdeedb67.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


**命名规范:**


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-8dee55902ec7d036.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


## 四、工程结构化


代码要写得简洁明了,项目里面的结构也得简洁明了,别人点开项目文件就知道哪个文件里面放的什么东西。


### 结构介绍:


![图片来自网络](https://upload-images.jianshu.io/upload_images/25205170-61c939de5c830bca.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


一个项目里肯定有其它的文件夹,但是一个项目里有这些文件夹,显得规范一些,哈哈哈。


* * *






原文链接:


阅读(928) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~