百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

什么是pip和virtualenv?Python新手必读

ztj100 2025-02-15 02:04 20 浏览 0 评论

老白最近给朋友们讲解NLP,顺带做了点Python的介绍。虽然大家都或多或少的使用过Python(大部分都不是Python 工程师),但是老白还是惊讶的发现有不少同事并不知道virtualenv,每次搞Python都是随便玩玩然后就把系统搞得乱七八糟的了。因此老白给大伙普及了下virtualenv这个神器,顺带也写下这篇文章。这篇的内容主要包含了pip,virtualenv和requirements.txt文件,完全基础,仅供Python新手们学习,有Python经验的同学可以绕道而行^_^。

什么是pip?

pip是一个从Python Package Index(PyPI)安装Python软件包的管理器。这里的PyPI就是一个Python第三方开源仓库。

如果大家有其他语言的背景,那么可能会对包管理器的概念比较熟悉。JavaScript 使用 npm 管理软件包,Ruby 使用 gem,Java使用Maven,以及 .NET 使用 NuGet。Python 中,则是 pip 作为标准包管理器。

Python其实最开始还有一个比较原始基础的包管理器easy_install。但是其渐渐被淘汰了,老白也不建议大家去花过多时间了解。也正是因为pip越来越重要,自从Python3.4和Python2.7.9之后的版本,pip都是默认包含在Python的安装包中的。如果使用的是之前的版本,可以通过easy_install pip来进行安装pip(是不是略显讽刺,easy_install安装一个工具来替代自己)。

Bash
easy_install pip

有了pip之后,我们就可以通过类似以下的命令来安装软件包了

Bash
#千万先别运行
pip?install?django

这里,我们将Django进行了全局安装(全局安装意味着安装完之后将对所有的应用可见)。但是在大部分情况下,我们并不希望进行全局安装。可以在下面的例子中看到,并不是每个应用都会使用同一个版本的软件包,全局安装将会使得软件的运行环境混乱不堪。

virtualenv解决了什么问题

virtualenv解决了一个非常具体的问题:其允许了多个Python项目在同一台电脑上同时开发,并且使用不同的运行环境。

为了更好的说明这个问题,我们可以假设virtualenv这个功能并不存在。当我们需要写一个具有HTTP请求的Python程序时,我们需要使用到Requests这个包,我们可以通过上面提到的pip命令进行安装Requests。

$ pip install requests
Collecting requests
  Using cached requests-2.24.0-py2.py3-none-any.whl (61 kB)
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
  Using cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.9

但是这个Requests会被安装到哪里呢?

如果是使用linux的话,默认会被安装到/usr/local/lib//site-packages。

Windows则是会安装到c:\users\<用户名>\appdata\local\programs\python\\lib\site-packages。

Mac则会安装到/Library/Python//site-packages。

Mac用户和Linux用户在这个过程中还有可能遇到权限问题。

安装好了之后,我们可以通过import requests来使用requests。整个软件的运行也不会有任何问题,客户很满意,赚钱大大的有。

于是用户又给我们了一个新的项目。在做新的项目时,我们发现我们又得使用requests了,只不过这次需要使用的是一个新功能,只有在最新版本的requests中才有这个功能。因此我们决定对requests进行升级.

pip?install?--upgrade?requests

一切似乎都很正常,但是其实我们已经给未来埋下了隐患。

当我们运行第一个软件的时候,我们发现完全运行不起来了,到底怎么回事?因为requests的某些API在新版本中被更改了,虽然可能只是一个很小的改动,直接导致了我们原来的程序无法启动了。

此时,我们当然可以直接修改我们之前的应用使用最新的requests API来解决这个问题。但是这会相当的耗时间可能需要将很多东西都进行替换并且完成回归测试。从项目管理的角度来说,除非是出现了一些比较严重的bug,不然不应该占用新项目的时间来解决老项目的问题,因为这样会影响新项目的进度。而这是很常见的一个场景,更多的Python开发工作者可能不只有两个项目。如果总是把软件包都升级到最新版本,对于开发者而言,无异于噩梦。

virtualenv如何帮助开发者

virtualenv通过给每一个应用创建一个完全隔离的虚拟环境来解决这个问题。一个环境其实只是一个简单的文件夹包含了需要运行Python应用的所有依赖。其中也包含了Python运行程序本身,一个完整的Python标准库拷贝,完整的pip,以及site-packages目录。当使用pip进行安装软件的时候,使用的是这个virtualenv创建的pip,并且会将软件包安装到这个virtualenv创建的site-packages中。

如何安装virtualenv

如果已经有了pip,最简单的方式就是通过pip来安装virtualenv。pip和virtualenv也几乎是唯二的两个需要全局安装的工具了,一旦有了这两个,就可以通过virtualenv来创建虚拟环境并且在虚拟环境中工作。

pip install virtualenv

如何创建虚拟环境

virtualenv是创建虚拟环境所需要的唯一工具,而且创建过程也很简单。只需要切换到项目根目录,然后通过virtualenv创建一个新的虚拟环境:

cd?/path/to/myproject
virtualenv?venv

这里venv是虚拟环境文件夹的名字。这个文件夹会在项目文件夹中。例如,如果我的项目在~/sources/myproject,那么venv的地址就是~/sources/myproject/venv。但是其实我们可以将其放在任何文件夹中。

注意:如果使用类似于git之类的版本控制,记得将venv添加到.gitignore中。

如何使用venv


如果我们查看venv文件夹的话,我们会看到如下一些文件夹:

这里主要的是Scripts文件夹,里面放置了完整的python运行命令以及pip。我们可以尝试使用Scripts中的pip进行安装requests。

一切正常,而且requests被安装到了venv/Lib/site-packages中了。
我们也可以使用venv/Scripts/Python命令,一切使用正常。
但是。。用起来真的好麻烦
别急,virtualenv的开发者也想到了这点,因此他们提供了一个工具activate来减轻virtualenv使用者的负担,这样就不需要每次都输入完整的路径了。

在linux下,

$ source venv/bin/activate

在Windows中,

venv\Scripts\activate

使用了activate之后,我们再使用pip进行安装,默认就安装到venv中了。当然了,这个activate只在当前的terminal中起作用,如果新开一个terminal的话我们需要重新运行一次activate。如果希望在当前的terminal中切换到其他venv中,我们还可以调用deactivate来取消当前虚拟环境的使用。

Requirements.txt

pip和virtualenv就是一对好伙伴,特别是使用requirements.txt的时候。我们在本地创建好了我们的项目以及一系列依赖之后,我们会把这些代码包括依赖推送到代码仓库,或作为备份或与别人分享。很有包的体积都比较大,而且包并没有什么特殊性,因为我们肯定不希望我们直接将项目依赖的包推到代码仓库上。这时候我们就可以使用requirements.txt了。通过pip的freeze命令可以格式化的输出已经安装的软件包,通过重定向可以将输出直接写入requirements.txt文件。

有了requirements.txt文件之后,自然也可以通过requirements.txt文件来继续安装。使用的就是pip install -r 的命令。下面截图显示的例子就是在一个新的虚拟环境venv2中安装requirements.txt中的软件包。

来个小结

pip能够帮助我们安装软件包,pip是比easy_install优秀的一个工具,建议使用pip

virtualenv能够帮助我们创建一个隔离的运行环境

为了不用输入完整路径,使用activate来激活虚拟环境

使用requirements.txt来和他人共享项目依赖信息

相关推荐

其实TensorFlow真的很水无非就这30篇熬夜练

好的!以下是TensorFlow需要掌握的核心内容,用列表形式呈现,简洁清晰(含表情符号,<300字):1.基础概念与环境TensorFlow架构(计算图、会话->EagerE...

交叉验证和超参数调整:如何优化你的机器学习模型

准确预测Fitbit的睡眠得分在本文的前两部分中,我获取了Fitbit的睡眠数据并对其进行预处理,将这些数据分为训练集、验证集和测试集,除此之外,我还训练了三种不同的机器学习模型并比较了它们的性能。在...

机器学习交叉验证全指南:原理、类型与实战技巧

机器学习模型常常需要大量数据,但它们如何与实时新数据协同工作也同样关键。交叉验证是一种通过将数据集分成若干部分、在部分数据上训练模型、在其余数据上测试模型的方法,用来检验模型的表现。这有助于发现过拟合...

深度学习中的类别激活热图可视化

作者:ValentinaAlto编译:ronghuaiyang导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性...

超强,必会的机器学习评估指标

大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。选择正确的验证指...

机器学习入门教程-第六课:监督学习与非监督学习

1.回顾与引入上节课我们谈到了机器学习的一些实战技巧,比如如何处理数据、选择模型以及调整参数。今天,我们将更深入地探讨机器学习的两大类:监督学习和非监督学习。2.监督学习监督学习就像是有老师的教学...

Python教程(三十八):机器学习基础

...

Python 模型部署不用愁!容器化实战,5 分钟搞定环境配置

你是不是也遇到过这种糟心事:花了好几天训练出的Python模型,在自己电脑上跑得顺顺当当,一放到服务器就各种报错。要么是Python版本不对,要么是依赖库冲突,折腾半天还是用不了。别再喊“我...

超全面讲透一个算法模型,高斯核!!

...

神经网络与传统统计方法的简单对比

传统的统计方法如...

AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

...

自回归滞后模型进行多变量时间序列预测

下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。假设要预测其中一个变量。比如,sparklingwine。如何建立一个模型来进行预测呢?一种常见的方...

苹果AI策略:慢哲学——科技行业的“长期主义”试金石

苹果AI策略的深度原创分析,结合技术伦理、商业逻辑与行业博弈,揭示其“慢哲学”背后的战略智慧:一、反常之举:AI狂潮中的“逆行者”当科技巨头深陷AI军备竞赛,苹果的克制显得格格不入:功能延期:App...

时间序列预测全攻略,6大模型代码实操

如果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,欢迎移步宝藏公众号...

AI 基础知识从 0.4 到 0.5—— 计算机视觉之光 CNN

...

取消回复欢迎 发表评论: