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

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

ztj100 2025-02-15 02:04 10 浏览 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安装一个工具来替代自己)。

easy_install pip

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

#千万先别运行
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来和他人共享项目依赖信息

相关推荐

Vue 技术栈(全家桶)(vue technology)

Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...

vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)

前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...

vue3 组件初始化流程(vue组件初始化顺序)

学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...

vue3优雅的设置element-plus的table自动滚动到底部

场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...

9、echarts 在 vue 中怎么引用?(必会)

首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...

vue-element-admin 增删改查(五)(vue-element-admin怎么用)

此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...

最全的 Vue 面试题+详解答案(vue面试题知识点大全)

前言本文整理了...

基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时

今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...

不来看看这些 VUE 的生命周期钩子函数?| 原力计划

作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...

Vue3.5正式上线,父传子props用法更丝滑简洁

前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...

Vue 3 生命周期完整指南(vue生命周期及使用)

Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...

救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘

前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...

怎么在 vue 中使用 form 清除校验状态?

在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...

取消回复欢迎 发表评论: