作者:Panda Fang

出处:http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-and-pip.html

原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动

Why 开发中遇到了问题

讲讲软件工程中写代码之外的知识。开发中我们往往遇到这些问题:

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.0

How 如何使用

如何使用 pip 常用功能

我使用的是windows 10 和 从python官网下载的 python 3.6.3 exe 安装包,别的系统和版本可能会遇到不同的问题。这个版本安装完成后,已经带上了pip。

按  ❖  + R 然后输入cmd 进入命令行,输入  pip  将会显示pip 的用法, 如果出错,可能没有装上pip ,  参考 如何安装pip

正常情况下会显示如下内容(我这里只贴出部分)

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 常用法,以requests 模块为例

查看pip 版本

pip -V

安装第三方包 格式:  pip install <package>

 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 install requests==-1

安装后想查看安装的什么版本、作者、存放位置等信息 格式  pip show <package>

pip show requests

卸载第三方包 格式  pip uninstall <package>

pip uninstall requests

列出所有已安装包及其版本

pip list

如何使用 virtualenv

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

python项目依赖管理分享迁移后重建开发环境(一)virtualenv 和 pip的更多相关文章

  1. Maven多模块项目依赖管理

    Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...

  2. 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊

    查找python项目依赖并生成requirements.txt 转自:http://blog.csdn.net/orangleliu/article/details/60958525 一起开发项目的时 ...

  3. atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结

    atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结 1. ide系列(只开发环境需要,但部署环境也做好放上,很有用) 1 2. web服务器+sdk+网站程序 ...

  4. 为 Python Server Pages 和 Oracle 构建快速 Web 开发环境。

    为 Python Server Pages 和 Oracle 构建快速 Web 开发环境. - 在水一方 - 博客频道 - CSDN.NET 为 Python Server Pages 和 Oracl ...

  5. EF的CodeFirst模式自动迁移(适用于开发环境)

    EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...

  6. Maven解读:项目依赖管理如何优化

    Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处莫过于其强大的依赖管理系统,在Pom配置文件中指定项目需要的Jar包的坐标,Ma ...

  7. pipreqs------查找python项目依赖并生成requirements.txt

    项目开发的时候,总是要搭建和部署环境,这时,就需要一个python第三方包的list,一般叫做requirements.txt.如果项目使用virtualenv环境,直接使用pip freeze即可, ...

  8. pipreqs------查找python项目依赖并生成requirement

    一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt. 如果一个项目使用时virtualenv环境,还好办 pip ...

  9. Python项目依赖并生成requirements.txt

    一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt. 如果一个项目使用时virtualenv环境,还好办 pip ...

随机推荐

  1. SE6新特性之集合Set、Map、WeakSet和WeakMap详解

    SE5的时候我们经常用数组或者类数组对象来操作数据,而对于一些使用惯了java之类语言的集合的开发人员来说,总有少了点什么的感觉,SE6提供Set和Map这两个集合.不仅从根本上为一些问题提供了解决方 ...

  2. 走进 Visual Studio Mobile Center for Xamarin.Forms

    前几篇分别介绍了 Xamarin.Forms 的 MVVM 的 Prism,UITest,Nuint Test,那这样算下来,代码部分基本结构都有了(逻辑就先忽略吧) 那接下来就应该是自动 Build ...

  3. 有道云翻译接口 Show类

    package com.yangchong.fanyi; import java.awt.EventQueue;import java.awt.Toolkit; import javax.swing. ...

  4. HTML5 input事件检测输入框变化[转载]

    原文:http://www.linuxidc.com/Linux/2015-07/119984.htm 之前一直用change事件来监听输入框内容是否发生变化,只有当输入框失去焦点时才会触发,没想到h ...

  5. centos命令自动补全增强

    CentOS默认没有像Ubuntu系统一样命令参数补全功能,例如yum install无法补全.通过安装bash-completion安装命令参数补全增强. CentOS6 默认情况下,CentOS6 ...

  6. WebGL学习(1) - 三角形

    原文地址:WebGL学习(1) - 三角形 还记得第一次看到canvas的粒子特效的时候,真的把我给惊艳到了,原来在浏览器也能做出这么棒的效果.结合<HTML5 Canvas核心技术>和网 ...

  7. C#对注册表的操作

    C#中提供的与注册表相关的最主要的是两个类: Registry 和 RegistryKey,这两个类属于Microsoft.Win32命名空间 Registry类包含5个公共的静态域,分别代表5个基本 ...

  8. js如何判断对象和数组

    var a = {}; var b = []; console.log(Object.prototype.toString.call(a) === '[object Object]');//判断对象 ...

  9. [转载] 一致性hash算法释义

    转载自http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html 一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Ka ...

  10. Android开发之漫漫长途 番外篇——自定义View的各种姿势1

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...