说起来学 Python,最绕不开也最让人头疼的一步,除了安装 Python 本身,估计就是怎么安装 Python 包了。刚开始那会儿,我也是一头雾水,那么多库,什么 NumPy、Pandas、Requests,听起来挺高大上的,可真要用的时候,命令行敲来敲去,不是报错“找不到命令”,就是提示“模块不存在”。那种挫败感,哎,别提了。不过嘛,这事儿就像学游泳,一开始呛几口水,慢慢就好了。今天,就来掏心窝子地聊聊这安装 Python 包的那些事儿。
其实,安装 Python 包的核心工具,大部分时候就一个:pip
。这玩意儿,你可以理解成是 Python 社区给大家准备的一个特别好用的“应用商店”或者“快递员”。你想用哪个Python 包(也就是库或者模块,叫法不同,一个意思),就告诉 pip
,它就去网上找(通常是去一个叫 PyPI 的大仓库,Python Package Index 的缩写),找到了就给你下载下来,规规矩矩地放到你的 Python 能找到的地方。
最基本的安装 Python 包的命令,简单到不能再简单了:
bash
pip install 包名
比如你想用那个抓取网页特别方便的 requests
包,直接在你的终端或者命令行里敲:
bash
pip install requests
回车!然后你就看着它下载、安装,顺利的话,没几秒钟就搞定了。屏幕上会滚动一堆字,告诉你正在下载哪个版本,下载进度多少,安装到哪儿了。看到最后出现“Successfully installed requests-某个版本号”之类的字眼,恭喜你,第一个包,装成了!
是不是很简单?但事情当然不会一直这么顺利。有时候你可能会遇到各种妖魔鬼怪的问题。
第一个可能遇到的问题,也是最常见的,“pip
不是内部或外部命令,也不是可运行的程序或批处理文件”。这通常意味着你的系统环境变量没配好,Python 安装目录下的 Scripts
文件夹(pip
就在里面)没被系统找到。别慌,这真不是啥大问题。你需要手动把 Python 安装路径下的 Scripts
目录加到系统的 PATH
环境变量里去。这个步骤根据你的操作系统不同(Windows、macOS、Linux),操作方法有点区别,但网上搜一下“添加 Python 到环境变量”,一大堆教程,跟着做就好。
第二个,网络问题。有时候敲了 pip install 包名
,半天没反应,或者报错连接超时。国内访问 PyPI 官方源可能有点慢,或者不稳定。这时候,换个源是个不错的选择。国内有不少优秀的 PyPI 镜像源,比如清华大学、阿里云、豆瓣等等。使用镜像源的方法也很简单,在 install
命令后面加上 -i
参数,指定源的地址就行:
bash
pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
这个 https://pypi.tuna.tsinghua.edu.cn/simple
就是清华大学的镜像源地址。你也可以换成别的,比如豆瓣的:http://pypi.douban.com/simple/
。
还有一种更省事儿的方法,一劳永逸地把默认源换掉。可以配置 pip
的全局设置,让它以后都走国内的镜像源。这个配置文件的位置也因系统而异,不过核心就是创建一个 pip
文件夹,里面放一个 pip.ini
(Windows)或 pip.conf
(macOS/Linux)文件,然后在文件里写上镜像源的地址。具体写法网上也有很多教程,搜“pip 配置国内镜像源”就行。我个人比较推荐这种方法,省得每次都要加 -i
。
除了安装,pip
还能干啥?当然还有升级和卸载。
你想把某个包升级到最新版本?很简单:
bash
pip install --upgrade 包名
比如你想把 requests
升级到最新,就敲 pip install --upgrade requests
。pip
会检查你当前安装的版本,如果不是最新的,就会帮你下载并安装最新版。
用腻了某个包,或者项目不再需要它了,想把它请走?也没问题:
bash
pip uninstall 包名
敲下这个命令后,pip
会问你确定要卸载吗,输入 y
回车就行。它就会帮你把这个包及其相关文件清理掉。
这只是基础操作。稍微深入一点点,你会发现还有特定版本安装的需求。有时候,某个项目依赖的是某个包的特定版本,比如 requests
的 2.25.1 版。这时候,就不能简单地 pip install requests
了,因为它可能给你装个最新版。你需要这么指定:
bash
pip install 包名==版本号
比如:
bash
pip install requests==2.25.1
这样 pip
就会精准地给你安装指定版本的 requests
。那怎么知道有哪些版本可用呢?可以用 pip index versions 包名
这个命令去 PyPI 上查,或者直接去 PyPI 官网搜那个包的名字。
再进阶一点,你会遇到虚拟环境(Virtual Environment)这个概念。这玩意儿,对于正经开发项目来说,太重要了!为啥?你想啊,你可能有好几个 Python 项目,A 项目依赖 requests
1.0 版,B 项目依赖 requests
2.0 版。如果所有包都直接装在系统全局的 Python 环境里,这俩版本的 requests
就会冲突,谁也用不了。虚拟环境就像给每个项目提供了一个独立的、干净的 Python 环境。每个虚拟环境里可以安装自己独立的一套Python 包,互相不影响。
创建虚拟环境有很多工具,Python 3.3+ 自带一个 venv
模块,用起来很方便。在项目目录下打开终端,敲:
bash
python -m venv myenv
这里的 myenv
是你给这个虚拟环境起的名字,你可以随便改。执行完后,项目目录下会多出一个叫 myenv
的文件夹。
创建好了,怎么进去用呢?这叫激活虚拟环境。激活命令也分系统:
Windows:
bash
myenv\Scripts\activate
macOS/Linux:
bash
source myenv/bin/activate
激活成功后,你会发现终端的命令提示符前面多了一个 (myenv)
字样,表示你现在工作在叫 myenv
的这个虚拟环境里了。这时候你再用 pip install 包名
命令安装 Python 包,这些包就会被装到 myenv
这个虚拟环境里,跟系统全局环境里的包完全隔离。做完项目,想退出虚拟环境,简单敲个命令:
bash
deactivate
命令提示符前面的 (myenv)
就会消失,你就回到系统全局环境了。虚拟环境这东西,刚开始可能觉得麻烦,但一旦你开始做多个项目,或者和别人协作,它的好处就太明显了。强烈建议养成使用虚拟环境的习惯。
还有一种情况,你拿到别人的项目代码,里面有个文件叫 requirements.txt
。这个文件里通常列出了项目所需的所有Python 包及其版本。你怎么根据这个文件快速把所有依赖都装好呢?pip
依然是你的好帮手:
bash
pip install -r requirements.txt
在项目目录下执行这个命令,pip
就会读取 requirements.txt
里的内容,帮你把所有需要的包一次性安装好。这个 -r
参数就是“从文件读取”的意思。反过来,如果你做完一个项目,想生成一个 requirements.txt
文件,把你的项目依赖记录下来,让别人也能方便地安装,可以用这个命令:
bash
pip freeze > requirements.txt
pip freeze
命令会列出当前环境下安装的所有Python 包及版本,然后通过 >
符号把输出重定向到一个文件里。记住,这个命令最好在项目的虚拟环境里执行,这样才能只列出项目实际需要的依赖,而不是系统全局环境里的所有包。
说到安装,不得不提一下依赖关系。有些包不是独立的,它依赖于其他包。当你用 pip install
安装一个包的时候,pip
会自动检查并帮你安装这个包依赖的所有其他包(除非这些依赖已经存在了)。这个过程是自动的,你不用操心。
还有个别时候,你可能需要从源码安装 Python 包。比如,某个包还在开发阶段,没有发布到 PyPI 上,或者你需要安装一个修改过的版本。这时候,通常你需要先下载这个包的源码(可能是一个压缩包或者通过 Git 克隆),然后进入源码目录,执行:
bash
python setup.py install
或者更现代、推荐的方式是使用 pip
在源码目录下执行:
bash
pip install .
注意后面的那个点 .
,表示在当前目录下安装。这种方式也能处理依赖关系,比直接用 setup.py
方便不少。
最后再提一句,有时候安装某些包,特别是涉及到底层编译或者系统库的包(比如依赖 C 语言库的包),可能会遇到一些编译错误或者找不到依赖库的问题。这种时候,错误信息通常会提示你缺了什么。这时候就需要根据错误信息,去安装系统层面的开发工具或者库。Windows 上可能需要安装 Visual Studio 的 Build Tools,Linux 上可能需要安装 build-essential
或者其他开发库。这个就比较具体了,遇到的时候,把错误信息复制粘贴到搜索引擎里,总能找到解决方案。
总的来说,怎么安装 Python 包,大部分时候就是围绕 pip
这个工具打转。掌握了 pip
的基本用法(安装、升级、卸载、指定源、指定版本、从 requirements.txt
安装),再结合虚拟环境的使用,基本就能应对绝大多数场景了。剩下的那些零星问题,遇到了再查,慢慢积累经验。别怕出错,每个人都是这么过来的。多动手试试,多看报错信息,多搜索,你会发现这事儿也没那么难。加油!
评论(0)