资讯专栏INFORMATION COLUMN

为什么你的python版本一团糟?因为少了这个操作

ThreeWords / 2096人阅读

摘要:坑人的版本的版本问题一直是个广被吐槽的黑点。这些版本的冲突在开发中十分常见,而和的版本差异又加剧了这一问题。从而避免与其他版本发生干扰。

坑人的版本

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 的使用

安装

在系统命令行通过 pip 或者 easy_install 安装即可:


pip install virtualenv

如果你的命令行无法执行 python、pip 及后续的 virtualenv 命令,请检查你环境变量里的 PATH 路径。(还不熟悉的请在公众号回复关键字 安装

创建

进入到合适的目录下(一般是项目根目录,但不建议加入 git 仓库里提交),通过 virtualenv 命令创建一个名为 MY_ENV 的环境(这个名字可自定义):


virtualenv MY_ENV

没有报错的话,会成功创建目录 MY_ENV,其中有一些目录和文件,这就是我们的虚拟环境所在了。

激活

使用虚拟环境前,需要“激活”环境:

windows


MY_ENVScriptsactivate

linux


source MY_ENV/bin/activate

路径根据你所在位置会有所不同,也可以使用完整路径。

激活环境之后,命令行前面会用括号标识出你所在的环境。这时候再通过 pip 安装第三方模块,就不会影响到系统本身的 Python 环境。

关闭

当不需要环境时,可以通过 deactivate 命令关闭。当然,直接关掉命令行窗口也没毛病。

指定 Python

虚拟环境的创建,默认是使用 virtualenv 所在的那个 Python 版本。如果你电脑上有多个 Python,则可以指定环境的 Python 版本,例如:


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 的设置面板里安装库。

其他的可选方案:

建项目时不要选新建虚拟环境

建项目时选虚拟环境继承已有的库

建项目时选用命令行创建好的虚拟环境

建好项目后,在命令行激活对应虚拟环境后再安装库

这些我在之前的文章 [[新手向视频]新版PyCharm创建项目为什么会有问题](http://zhuanlan.zhihu.com/p/3... 里也提过, 查看 PyCharm 的上手教程,可在公众号( Crossin的编程教室 )回复关键字 _pycharm_

以上就是关于虚拟环境的一些介绍,留个小作业: 亲自动手创建一个虚拟环境,并在其中安装一个第三方库。

过程中有任何疑问,或想了解更多关于虚拟环境的配置,可以上我们的论坛 http:// bbs.crossincode.com 进行讨论。

下课!

════

其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 知乎下载器 | 人工智能 | 嘻哈 | 爬虫 | 我用Python | 高考 | requests | AI平台

欢迎搜索及关注: Crossin的编程教室

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42535.html

相关文章

  • Python数据科学环境:Anaconda 了解一下

    摘要:我自己印象最深的是在上安装加密和科学计算模块,折腾了很久。这个精装是面向数据科学的,同时也保留了你自己进一步改装的空间。数据科学库包环境管理工具,这几样就是的主要功能。 几乎所有的 Python 学习者都遇到过 安装 方面的问题。这些安装问题包括 Python 自身环境的安装、第三方模块的安装、不同版本的切换,以及不同平台、版本间的兼容问题 等。当你因为这些问题而卡壳,一行代码没写就已...

    shaonbean 评论0 收藏0
  • 代码吃鸡:Python-Robocode

    摘要:最近看到一个很有未来感的新闻一辆特斯拉在拉斯维加斯出了车祸,撞死了一个机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反正人们也无法从受害者口中了解被特斯拉撞是怎样一种体验了。像星际争霸之类的经典游戏都有过类似的比赛。 最近看到一个很有未来感的新闻: 一辆 特斯拉 在拉斯维加斯出了车祸,撞死了一个……emmmm……机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反...

    yvonne 评论0 收藏0
  • 我应该先学习哪种编程语言?

    摘要:我应该先学习哪种编程语言这一切都取决于你想要完成的事情作为技术作家,我的任务是使复杂的主题易于理解,因此在本文中您将找不到太多技术术语。我应该先学习哪种编程语言这是我自出版之前收到的最常见的问题。是一种后端语言。我应该先学习哪种编程语言? 这一切都取决于你想要完成的事情 作为技术作家,我的任务是使复杂的主题易于理解,因此在本文中您将找不到太多技术术语。我可以对面向对象的编...

    huashiou 评论0 收藏0
  • 我应该先学习哪种编程语言?

    摘要:我应该先学习哪种编程语言这一切都取决于你想要完成的事情作为技术作家,我的任务是使复杂的主题易于理解,因此在本文中您将找不到太多技术术语。我应该先学习哪种编程语言这是我自出版之前收到的最常见的问题。是一种后端语言。我应该先学习哪种编程语言? 这一切都取决于你想要完成的事情 作为技术作家,我的任务是使复杂的主题易于理解,因此在本文中您将找不到太多技术术语。我可以对面向对象的编...

    selfimpr 评论0 收藏0
  • 在开始第一个机器学习项目之前就了解的那些事儿

    摘要:此外,与训练机器学习模型的作业相比,作业具有不同的执行配置文件。此外,还制作了一个界面,以便控制机器学习的参数指定用于训练的数据量等。 摘要: 一份机器学习过来人的经验清单分享,主要是包含一些关于构建机器学习工作流以及Apache Spark应该注意的一些事项,希望这个清单能够帮助那些正在学习机器学习的相关人员少走一些弯路,节约一些时间。 showImg(https://segment...

    BearyChat 评论0 收藏0

发表评论

0条评论

ThreeWords

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<