作者: Panda Fang
讲讲软件工程中写代码之外的知识。开发中我们往往遇到这些问题:
1、一个项目写了不少代码。使用一些第三方包或者模块,对于这个项目来说已经能很好的工作了, 但是后来这些包或模板有了新版,改动较大,一旦升级,之前的很多代码要改,很痛苦。但是咱们也不能永远用老版本的,新开的项目还是想尝尝鲜,又或工作之外自己想先熟悉新技术。默认情况下,一个系统中只有一份第三方包或模块,无法做到。所以我们希望自己的电脑中能同时共存多个版本的模块或包
2、自己写的项目源代码转移到别的机器上或者分享给别人,又或者从别人拿到项目,如何能快速重建开发环境呢, 项目用了哪些第三方包,什么版本。 如果这些搞不定,那么代码就跑不起来。 从 github 上下载的别人代码,是不包含第三方包的,有些人又不写文档,就算从代码报错中能找到缺少的第三方包或模块,也很难知道确切的版本,自己装的版本万一不合适又不行,有些代码中的模块名和在 pip 仓库中的名字也不一定相同,遇到自己不熟悉的 pip install 也白搭,总之麻烦一大堆。What 什么能解决我们的问题 virtualenv 和 pip
java 中有 maven 和 pom.xml ,android 有 gradle 和 build.gradle , node.js 有 npm 和 package.json。 pom.xml、 build.gradle、package.json 都是记录依赖包及其版本的配置文件。
python 中解决第 1 个问题,就引出了 virtualenv 虚拟环境, 解决第 2 个问题,就需要 pip 和 virtualenv 配合使用。
pip 是管理第三方包的,默认情况下,是装在全局系统里的,所有项目都共用同一个版本的第三方包
有了 virtualenv 每个项目都能有自己独立第三方包,隔离了。一个项目用 v1.0 另一个项目能用 v2.0How 如何使用
我使用的是 windows 10 和 从 python 官网下载的 python 3.6.3 exe 安装包,别的系统和版本可能会遇到不同的问题。这个版本安装完成后,已经带上了 pip。
按 ❖ + R 然后输入 cmd 进入命令行,输入 pip 将会显示 pip 的用法, 如果出错,可能没有装上 pip , 参考 如何安装 pip
正常情况下会显示如下内容(我这里只贴出部分)
下面介绍 pip 常用法,以 requests 模块为例
- Usage:
- pip <command> [options]
- Commands:
- install Install packages.
- download Download packages.
- uninstall Uninstall packages.
- freeze Output installed packages in requirements format.
- list List installed packages.
- show Show information about installed packages.
- check Verify installed packages have compatible dependencies.
- search Search PyPI for packages.
- wheel Build wheels from your requirements.
- hash Compute hashes of package archives.
- completion A helper command used for command completion.
- help Show help for commands.
查看 pip 版本
安装第三方包 格式: pip install <package>
- pip - V
- pip install requests或者可以指定版本pip install requests == 2.18.0输入完成后enter等待安装完成。
想知道仓库中有哪些可选版本
>= pip 9.0 以后
- pip install requests ==
得到信息
- Collecting requests==
- Could not find a version that satisfies the requirement requests== (from versions: 0.2.0, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8, 0.8.9, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.6, 0.10.7, 0.10.8, 0.11.1, 0.11.2, 0.12.0, 0.12.1, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.13.5, 0.13.6, 0.13.7, 0.13.8, 0.13.9, 0.14.0, 0.14.1, 0.14.2, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 2.3.0, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.9.1, 2.9.2, 2.10.0, 2.11.0, 2.11.1, 2.12.0, 2.12.1, 2.12.2, 2.12.3, 2.12.4, 2.12.5, 2.13.0, 2.14.0, 2.14.1, 2.14.2, 2.15.1, 2.16.0, 2.16.1, 2.16.2, 2.16.3, 2.16.4, 2.16.5, 2.17.0, 2.17.1, 2.17.2, 2.17.3, 2.18.0, 2.18.1, 2.18.2, 2.18.3, 2.18.4)
- No matching distribution found for requests==
< pip 9.0 给一个无效的版本号
安装后想查看安装的什么版本、作者、存放位置等信息 格式 pip show
- pip install requests == -1
- pip show requests
卸载第三方包 格式 pip uninstall <package>
- pip uninstall requests
列出所有已安装包及其版本
如何使用 virtualenv
- pip list
python 3.6.3 Windows 安装包已经包含了这个功能。在桌面创建一个 myapp 的文件夹,作为我们的项目文件。 打开文件夹, 按下 Alt + D , 光标就会定位到地址栏, 输入 cmd enter,弹出 cmd 窗口并在这个文件夹了,免去繁琐的 cd。 注意以下过程中不要关闭 cmd
输入
- python - m venv venv
这将会在 myapp 文件夹内创建一个 venv 文件夹。 第一个 venv 是调用 virtualenv 功能, 第二个 venv 是文件夹的名称, 可以任意取一个自己喜欢的名称
如果这步操作不行,可能是跟我的 python 版本不同, 或者安装的时候缺少了什么。那么需要换一种方式,输入
- pip install virtualenv
安装完成后 输入
- virtualenv venv
同样也能创建 venv 文件夹。 python -m venv venv 正常工作的不用管上面两步
看看 venv 文件夹 这里面就包含了一些独立运行需要的文件。
有了这个文件夹之后, 使用 pip install ,仍然安装到全局系统中。那么如何才能工作在 virtualenv 中呢,输入
- venv\Scripts\activate.bat
可以看到,原来的路径前面多了一个 (venv) ,如果你用的别的名字,就是别的。 如果关闭了 cmd ,再打开仍然要用这种方式激活
下面以 requests 包为例写个例子项目, 进入 virtualenv 环境后,输入
- pip install requests
创建一个 python 源文件 app.py ,输入以下代码
- import requests
- r = requests.get('https://www.baidu.com')
- print(r.status_code)
然后回到 cmd 输入
- python app.py
运行代码网络通畅的情况下会输出 200
为了证明使用了 virtualenv ,确实能隔离 第三方包依赖。 现在我们离开 virtualenv 环境,cmd 输入
- venv\Scripts\deactivate.bat
可以看到,路径前面的 (venv) 没了,回到了全局系统 。 如果之前按照步骤执行过 pip uninstall requests 现在全局系统中就不存在这个第三方包了
再次输入
- python app.py
得到输出
- Traceback (most recent call last):
- File "app.py", line 1, in <module>
- import requests
- ModuleNotFoundError: No module named 'requests'
别的项目 也像 myapp 这样去处理,就可以依赖关系隔离了
一个项目要分享到 github , 或者开发组的其他成员, 又或者自己换了机器, 如何重建开发环境呢,装上一样的第三方包。 这里用自己的电脑模拟
cmd 定位到刚才桌面上的 myapp 文件夹。
- venv\Scripts\activate.bat
激活 virtualenv , 输入
- pip freeze > requirements.txt
导出了第三包的记录文件 。
再在桌面创建一个 test 文件夹, 里面再创建一个 myapp 文件夹,把刚才 Desktop\myapp 里的 app.py 和 requirements.txt 文件复制到这个文件夹里。
另外打开一个 cmd 定位到新建的 myapp 文件夹 ,然后创建 virtualenv
- python - m venv venv
使用上面的命令创建好之后 激活
- venv\Scripts\activate.bat
激活之后,注意现在工作在 virtualenv 里。使用 pip 恢复安装依赖的第三方包,命令如下
- pip install - r requirements.txt
等待完成。 运行 app.py
- python app.py
运行代码网络通畅的情况下会输出 200
至此恢复重建开发环境完成
参考资料: https://stackoverflow.com/questions/43828879/simple-dependency-management-for-a-python-project来源: http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-and-pip.html