为什么你的python版本一团糟?因为少了这个操作!
坑人的版本
python 的版本问题一直是个广被吐槽的黑点。以至于有人调侃说:
python 是世界上最好的两种语言!
在这里我要说明下,对于初学者来说,版本间的语法差异其实并不大。现在刚开始学 python 的人,放心大胆地用最新版本即可。业内所诟病的,主要是针对代码上的不兼容。
但平心而论,版本间的兼容问题并不是 python 所独有。且就算 python 只有一个版本,第三方库的版本一样会让人抓狂。
比如说,你之前在电脑上用 python 写了一个网站,使用了 django 框架,版本是 1.11。过了一年,你要开发一个新网站,这时候 django 已经发展到了 2.0 版本,你是用还是不用?更新了版本,电脑上的老网站代码就无法执行了。
或者,你安装并使用了某个模块 a 的最新版本。然后另一个项目用到的模块 b,b 的代码却依赖于模块 a 较早的版本。这种情况下,你甚至可能都无法成功安装模块 b。
这些版本的冲突在开发中十分常见,而 python 2 和 3 的版本差异又加剧了这一问题。
对此,早已有了成熟的解决方案:
虚拟环境
python 开发中所谓的虚拟环境,就是为 python 版本及第三方库创建独立的开发环境,使不同项目之间互不干扰。借助于虚拟环境,我们可以在同一台电脑上构建出项目 a 在基于 python 2 的环境中运行,而项目 b 可以在基于 python 3 的环境中运行。
虚拟环境需要通过一些工具创建,常见的几种:
1, virtualenv。这是 python 最为常用的虚拟环境工具,简单有效,我自己就用它。本文稍后部分会介绍下基本的安装和使用。网上也有相当多的使用教程。
virtualenv 的一个局限是无法统一管理你电脑上的所有虚拟环境,因此环境多了之后,可能会遗漏,或造成冗余。对此,有一个扩展工具virtualenvwrapper,能帮你统一管理各个环境。
2, venv。它的实现很大程度基于 virtualenv,使用方法也很类似。而 python 现已内置了 venv。
3, conda。这个工具相当于 pip + virtualenv + virtualenvwrapper,它不仅能创建和管理虚拟环境,本身还是一个包管理器,可以下载安装第三方库。功能完善,使用也不复杂。著名的数据分析开发包 anaconda 里就默认使用 conda 作为环境和模块管理工具。
接下来我们简要介绍下:
virtualenv 的使用
安装
python很容易学!小编有弄一个交流,互问互答,资源共享的交流学习基地,如果你也是python的学习者或者大牛都欢迎你来!qun:227+435!一起 学习共同进步!
在系统命令行通过 pip 或者 easy_install 安装即可:
1 | pip install virtualenv |
如果你的命令行无法执行 python、pip 及后续的 virtualenv 命令,请检查你环境变量里的path 路径。(还不熟悉的请在公众号回复关键字 安装)
创建
进入到合适的目录下(一般是项目根目录,但不建议加入 git 仓库里提交),通过 virtualenv 命令创建一个名为 my_env 的环境(这个名字可自定义):
1 | virtualenv my_env |
没有报错的话,会成功创建目录 my_env,其中有一些目录和文件,这就是我们的虚拟环境所在了。
激活
使用虚拟环境前,需要“激活”环境:
windows
1 | my_envscriptsactivate |
linux
1 | source my_env / bin / activate |
路径根据你所在位置会有所不同,也可以使用完整路径。
激活环境之后,命令行前面会用括号标识出你所在的环境。这时候再通过 pip 安装第三方模块,就不会影响到系统本身的 python 环境。
关闭
当不需要环境时,可以通过 deactivate 命令关闭。当然,直接关掉命令行窗口也没毛病。
指定 python
虚拟环境的创建,默认是使用 virtualenv 所在的那个 python 版本。如果你电脑上有多个 python,则可以指定环境的 python 版本,例如:
1 | virtualenv - p c:python27python.exe env27 |
虚拟环境的本质
为什么简单几行命令,就可以实现 python 环境的分离?本质上靠的还是环境变量里的 path 路径。
path 的作用,就是当你执行一个命令时,系统要知道去哪里找这个命令。path 里有多个路径,就按顺序从前到后依次查找。执行 python、pip 等命令时,都是按照这个方式进行。
通过 echo 命令可以查看路径:
windows
linux
当版本出现混乱时,往往就是 path 中有多个路径,不同路径中有含有相同的命令,以至于执行了并非你预期的那个版本中的命令。比如你的 python 命令是在 python27 目录下,而 pip 执行的却是 python36/scripts 里的,然后就发生了“明明安装成功了,程序里却找不到”的情况。
而当激活一个虚拟环境时,就相当于在 path 的开头增加了我们创建的目录,使用这个目录里的 python 及相关库。安装新的库也是装在新建的这个目录之下。从而避免与其他版本发生干扰。
如果你不清楚你所用的命令究竟是哪里的,可以在命令行中使用 where/which 命令查看:
pycharm 里的虚拟环境
可能很多同学还不习惯用命令行,而是完全使用 ide 来进行配置。那么最后我特别提一下 pycharm 的情况。
新版本的 pycharm 默认会在创建项目时新建一个虚拟环境,因此不了解这个操作的同学会疑惑,命令行里用 pip 装好的模块为什么到 pycharm 里就用不了了。简单的解决方法,就是从 pycharm 的设置面板里安装库。
其他的可选方案:
- 建项目时不要选新建虚拟环境
- 建项目时选虚拟环境继承已有的库
- 建项目时选用命令行创建好的虚拟环境
- 建好项目后,在命令行激活对应虚拟环境后再安装库
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从零开始学设计模式(六)—适配器模式(Adapter Pattern)
适配器模式 此模式难度系数为初级,由Gang Of Four提出。 适配器模式是作为两个不兼容的接口之间的桥梁,这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 此模式一般应用于已经存在的类接口中,有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。 意图 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决:继承或依赖(推荐)。 关键代码:适配器继...
- 下一篇
Python全栈 Web (项目部署)
Django项目(Web应用) Web服务 1、nginx :高并发处理的好 2、Apache :稳定 LAMP :Linux Apache MySQL Python/Php/Perl LNMP :Linux Nginx MySQL Python/Php/Perl 3、uwsgi 是Web服务器与Web框架之间一种简单而通用的接口 单项目部署(nginx+uwsgi+Django) 确保django项目能够运行 安装nginx(用apt-get去安装) 1、安装 sudo apt-get install nginx 2、启动 sudo /etc/init.d/nginx restart 3、验证 打开浏览器-->127.0.0.1:80-->Welcome to Nginx! 安装uwsgi(用pip3去安装) 1、安装 sudo pip3 install uwsgi 2、验证 uwsgi --http :9998 --chdir /home/tarena/myproject/friutday_1/ --modul...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS关闭SELinux安全模块