
1. 项目概述为什么Python包管理是初学者的第一道坎刚接触Python时很多人以为学完print(“Hello World”)就入门了结果第一个项目就卡在了“ModuleNotFoundError: No module named ‘requests’”上。我见过太多初学者代码逻辑写得不错却因为一个包安装不上折腾半天信心大受打击。Python生态的强大正是建立在海量第三方包模块之上的从数据分析的pandas到网络爬虫的scrapy都离不开“安装”这个动作。但Python的包安装方法之多足以让新手眼花缭乱pip、easy_install、源码、conda……每种方法适用场景不同背后的原理和“坑点”也各异。掌握这些方法远不止是记住几条命令。它关乎你能否高效地搭建开发环境、能否解决令人头疼的依赖冲突、能否在离线环境下开展工作甚至决定了你未来使用Docker、部署服务的顺畅程度。这篇文章我就以一个过来人的身份为你彻底拆解Python安装包的八种核心方法。我不会只给你命令列表而是会讲清楚每种方法的“为什么”——为什么存在这种方法它适合什么场景背后有什么坑以及当你遇到“pip不是内部或外部命令”这种经典报错时到底该怎么一步步解决。无论你是刚打开IDLE的小白还是已经写过几个脚本的进阶者这篇内容都能帮你把Python环境管理这块基石打牢。2. 核心方法全景图八种武器与它们的战场在深入每种方法之前我们先建立一个全局认知。Python包安装不是“一招鲜吃遍天”不同方法诞生于不同的历史阶段和需求场景各有各的“势力范围”。你可以把它们想象成一个工具箱里的不同工具拧螺丝用螺丝刀敲钉子用锤子你不能指望用锤子去拧螺丝。为了方便你理解我把这八种方法分成了三大阵营第一阵营标准包管理器主流之选这是你日常开发中最常打交道的部分以pip为核心。pip install当今绝对的主流Python官方的包安装工具从Python 3.4开始随Python一同安装。easy_installpip的前辈源于setuptools现在已基本被pip取代但在一些遗留系统或特定场景下可能还会遇到。第二阵营特定环境与高级用法解决特定问题当你需要更精细的环境控制、处理复杂依赖或特殊包时这些方法就派上用场了。 3.源码安装setup.py从包的源代码直接安装适用于安装最新开发版、修改源码或安装pip仓库中没有的包。 4..whl文件安装安装预编译的二进制包避免了源码编译的麻烦速度最快尤其是在Windows上安装含有C扩展的包如numpy, pandas时几乎是唯一选择。 5.conda install来自Anaconda/Miniconda发行版的包管理器其强大之处在于能管理Python本身和非Python的库依赖如C库特别适合科学计算和数据分析领域能很好地解决环境隔离和依赖冲突。 6.集成开发环境IDE内安装如PyCharm、VSCode都提供了图形化界面安装包的功能本质上是调用了pip但对新手更友好。第三阵营系统级与特殊部署进阶场景这些方法通常用于生产环境部署、系统级安装或处理极端情况。 7.系统包管理器在Linux上你可以使用apt(Ubuntu/Debian) 或yum(CentOS/RHEL) 来安装Python包例如sudo apt-get install python3-requests。这会将包安装到系统目录通常不推荐用于开发因为可能引发版本冲突且包更新慢。 8.可执行文件或独立包极少数Python工具如某些打包好的桌面应用会提供.exeWindows或.shLinux等独立安装程序这已经脱离了Python包管理的范畴但也是“安装”的一种形式。理解这个全景图后你就不会在遇到问题时病急乱投医了。接下来我们深入到每一种方法的细节、操作和那些教程里不会告诉你的“坑”。3. 方法一pip install —— 现代Python的基石pip是 “Pip Installs Packages” 的递归缩写它是Python包管理事实上的标准。如果你使用的是Python 3.4或更高版本现在谁还用更低的呢pip应该已经随Python一起安装好了。3.1 基础用法与核心命令最基础的安装命令简单到令人发指pip install package_name例如安装最常用的网络请求库pip install requestspip会自动从 Python Package Index (PyPI) 这个全球最大的Python软件仓库中查找、下载并安装requests及其所有依赖。但只会这一条命令远远不够以下几个变体是你必须掌握的安装特定版本在团队协作或项目部署时锁定版本至关重要避免因版本升级导致代码不兼容。pip install requests2.28.1 # 安装绝对指定的版本 pip install requests2.25, 2.29 # 安装版本范围内最新的升级已安装的包pip install --upgrade requests # 将requests升级到最新版本从需求文件安装这是项目环境复现的标准做法。通常我们会将项目依赖写在一个名为requirements.txt的文件里。# requirements.txt 内容示例 # 这是一个注释 requests2.28.1 pandas1.5.0 flask然后使用以下命令一次性安装所有依赖pip install -r requirements.txt卸载包pip uninstall package_name3.2 镜像源配置解决下载慢与超时问题直接从PyPI下载对于国内用户来说速度可能很慢甚至经常超时。配置国内镜像源是每个国内Python开发者的必备技能。永久配置推荐 在用户目录下如C:\Users\你的用户名\或~创建或修改pip.ini(Windows) 或~/.pip/pip.conf(Linux/Mac) 文件。Windows (pip.ini) 示例[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn timeout 120Linux/Mac (~/.pip/pip.conf) 示例[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host pypi.tuna.tsinghua.edu.cn常用的国内镜像源有清华大学https://pypi.tuna.tsinghua.edu.cn/simple阿里云https://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/临时使用 如果不想修改配置可以在安装命令后指定镜像源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests注意trusted-host参数是为了避免使用HTTPS镜像源时可能出现的SSL证书警告。对于HTTP源这个参数是必须的对于HTTPS源视情况添加。3.3 虚拟环境pip的最佳拍档这是最容易被初学者忽略也最重要的一点永远不要直接在系统Python环境里用pip胡乱安装包为什么想象一下你项目A需要Django 3.2项目B需要Django 4.0。如果你都装到系统环境里后安装的会覆盖先安装的总有一个项目跑不起来。这就是“依赖地狱”。解决方案是使用虚拟环境Virtual Environment。它为每个项目创建一个独立的、干净的Python运行环境包括独立的Python解释器和包目录。项目之间的包完全隔离互不干扰。Python 3.3 自带了venv模块来创建虚拟环境# 创建虚拟环境环境目录名为 venv (可自定义) python -m venv venv # 激活虚拟环境 (Windows) venv\Scripts\activate # 激活虚拟环境 (Linux/Mac) source venv/bin/activate # 激活后命令行提示符前通常会显示 (venv)表示你已进入该环境 # 此时使用 pip install所有包只会安装到当前虚拟环境中 # 退出虚拟环境 deactivate实操心得我习惯在每个项目的根目录下都创建一个虚拟环境并且把venv或.venv添加到.gitignore文件中避免将环境文件提交到代码仓库。项目依赖则通过pip freeze requirements.txt命令生成清单其他人拿到代码后创建虚拟环境并执行pip install -r requirements.txt即可完美复现环境。4. 方法二easy_install —— 了解过去才能理解现在现在请在你的命令行里输入easy_install --help。如果你发现它不存在那很正常因为它已经逐渐退出历史舞台了。但了解它有助于你理解Python包管理的发展。easy_install是setuptools包提供的一个安装工具在pip出现之前是主流。它的基本用法和pip类似easy_install package_name那么为什么pip取代了它卸载功能easy_install没有原生的卸载命令而pip有pip uninstall。需求文件pip对requirements.txt的支持更好。输出信息pip的安装过程输出更清晰、更友好。PyPI集成pip与 PyPI 的集成更紧密、更现代。你现在可能很少需要直接使用easy_install但有时在安装一些非常古老的包或者某些系统的遗留脚本中可能还会看到它的身影。一个更常见的场景是当你需要安装pip本身但系统又没有时有时会通过先下载get-pip.py脚本或者通过easy_install来安装pip。5. 方法三源码安装setup.py—— 深入腹地的操作当你从GitHub上下载了一个开源项目的源码或者你想尝试某个包的最新开发版尚未发布到PyPI亦或是你需要修改包的源代码时源码安装就是你唯一的选择。5.1 标准源码安装流程通常一个标准的Python源码包目录下会有一个setup.py文件。安装步骤如下下载源码包通常是.zip或.tar.gz格式并解压或者直接git clone项目仓库。打开命令行进入包含setup.py文件的目录。执行安装命令# 最常用的方式实际上会调用 pip 或 setuptools 来执行安装 pip install . # 或者使用传统的 setuptools 命令效果类似但推荐用上一种 python setup.py installpip install .中的点号.代表当前目录。这条命令会读取setup.py中的配置构建包并将其安装到你的Python环境或当前虚拟环境中。5.2 开发模式安装-e对于需要边开发边调试的包有一个极其有用的模式可编辑模式Editable Mode或称为开发模式。pip install -e .这个命令不会将包复制到Python的site-packages目录而是在那里创建一个“链接”实际是一个.pth文件指向你本地的源码目录。这意味着你对本地源码的任何修改都会立即反映到导入的包中无需反复执行安装命令。这对于参与开源项目贡献或开发自己的库时进行调试和测试非常方便。5.3 源码安装的常见“坑”与解决之道源码安装听起来很“极客”但坑也不少主要集中在编译依赖上。场景一安装包含C/C扩展的包如NumPy, SciPy, Pandas在Windows上直接对这类包运行python setup.py install几乎百分之百会失败报错信息通常是关于缺少Microsoft Visual C 14.0或更高版本的构建工具。因为你需要一个C编译器来编译这些扩展。解决方案首选方案寻找并安装对应的.whl文件下一节详细讲。这是为Windows预编译好的二进制包无需本地编译。备选方案安装完整的Microsoft Visual Studio Build Tools或者更轻量化的Microsoft C Build Tools。这个过程比较繁琐不推荐新手尝试。场景二依赖系统库的包如数据库驱动、图像处理库例如在Linux上安装mysqlclientPython的MySQL驱动或pillow图像处理库可能会报错找不到mysql.h头文件或zlib库。解决方案 需要使用系统包管理器先安装这些开发库。Ubuntu/Debian:sudo apt-get install python3-dev libmysqlclient-dev libjpeg-dev zlib1g-devCentOS/RHEL:sudo yum install python3-devel mysql-devel libjpeg-turbo-devel zlib-devel安装完这些系统依赖后再尝试pip install mysqlclient pillow通常就能成功了。注意事项源码安装前养成先阅读项目README.md或INSTALL文件的习惯里面通常会写明编译和安装所需的依赖。盲目执行安装命令很可能浪费大量时间在解决编译错误上。6. 方法四.whl文件安装 —— Windows用户的福音.whl文件Wheel格式是Python的一种内置包格式本质上是一个zip压缩包里面包含了预编译好的二进制文件针对特定平台和Python版本和元数据。它的出现彻底解决了源码安装中令人头疼的编译问题尤其是对Windows用户。6.1 如何获取.whl文件从PyPI下载当你使用pip install时pip会优先寻找与你平台匹配的wheel文件进行下载安装。如果找不到才会退而求其次下载源码包。从第三方网站下载对于一些难以编译的包如TensorFlow、PyTorch官方或社区会提供预编译的wheel文件。例如你可以从TensorFlow的官方GitHub Release页面找到对应CUDA版本的wheel。从镜像源下载国内镜像站如清华、阿里云也提供了wheel文件的缓存。6.2 手动安装.whl文件假设你已经下载了一个名为package_name-version-py3-none-any.whl的文件。# 直接使用 pip install 后接文件路径即可 pip install path/to/package_name-version-py3-none-any.whlwheel文件名通常包含重要信息例如numpy-1.24.3-cp39-cp39-win_amd64.whlnumpy-1.24.3: 包名和版本。cp39: 表示适用于CPython 3.9。win_amd64: 表示适用于64位Windows系统。你必须确保wheel文件的平台标签如win_amd64,manylinux2014_x86_64和Python标签如cp39与你的环境完全匹配否则pip会报错不兼容。6.3 为离线环境准备wheel包在无法连接互联网的生产服务器或内网机器上部署Python项目wheel文件是救星。你可以在有网的环境下提前下载好所有依赖的wheel文件。批量下载使用pip download命令。# 在当前目录下载 requests 及其所有依赖的 wheel 文件 pip download requests -d ./wheelhouse # 根据 requirements.txt 下载 pip download -r requirements.txt -d ./wheelhouse离线安装将整个wheelhouse文件夹拷贝到目标离线机器。# 从本地目录安装pip 会优先使用 wheel 文件并处理依赖关系 pip install --no-index --find-links./wheelhouse -r requirements.txt--no-index告诉pip不要从PyPI查找--find-links指定本地wheel文件目录。实操心得对于企业级离线部署我通常会搭建一个内网的PyPI镜像服务如使用devpi或bandersnatch这比手动管理一堆wheel文件要优雅和高效得多。但对于小型项目或临时需求pip download加离线安装的方式已经足够可靠。7. 方法五conda install —— 科学计算领域的王者如果你主要进行数据分析、机器学习或科学计算那么conda是你必须了解的工具。它不仅仅是一个Python包管理器更是一个跨平台的环境管理器可以管理任何语言的包R, Julia, C库等。7.1 conda与pip的核心区别很多人混淆conda和pip下表列出了它们的关键区别特性condapip管理范围跨语言可管理Python、R、C库等任何软件的包和依赖。仅限Python包。环境管理内置强大的环境管理功能 (conda create -n env_name)。需要依赖第三方工具如venv,virtualenv。包来源主要从Anaconda仓库(默认) 和conda-forge社区仓库安装。包经过更严格的依赖解析和兼容性测试。从PyPI安装。二进制包提供的都是预编译好的二进制包无需本地编译开箱即用。优先使用wheel二进制没有则用源码。依赖解决使用SAT求解器理论上能更好地解决复杂的依赖冲突。依赖解析相对简单在复杂环境下容易冲突。安装位置默认安装在conda自己的目录下如~/anaconda3或~/miniconda3。默认安装在当前Python环境的site-packages。简单来说conda提供了一个更高层次的、一体化的科学计算环境解决方案而pip是一个更纯粹、更轻量的Python包安装工具。7.2 conda基础使用安装Miniconda/Anaconda推荐安装Miniconda它只包含conda和其依赖更轻量。Anaconda则预装了数百个科学计算包体积较大。创建环境# 创建一个名为 myenv 的新环境并指定Python版本为3.9 conda create -n myenv python3.9激活环境# Windows conda activate myenv # Linux/Mac source activate myenv # 或 conda activate myenv (新版conda)安装包# 在当前激活的环境中安装 numpy 和 pandas conda install numpy pandas # 安装特定版本 conda install scipy1.9.0 # 从 conda-forge 频道安装软件包更多、更新更快 conda install -c conda-forge jupyterlab退出环境conda deactivate7.3 混合使用conda与pip一个需要小心的操作有时conda仓库里没有某个包或者版本太旧你就需要在conda环境里使用pip。但这是一个需要谨慎对待的操作因为conda无法追踪和管理通过pip安装的包及其依赖这可能导致环境状态混乱依赖冲突。最佳实践建议优先使用conda尽可能使用conda install来安装所有包。不得已再用pip如果conda确实没有再使用pip install。先conda后pip在创建新环境时先用conda安装尽可能多的包特别是那些有复杂C依赖的如numpy, scipy最后再用pip安装剩下的。避免混用不要对同一个包既用conda安装又用pip安装或升级这几乎一定会导致问题。使用--prefix记录如果用了pip可以考虑用pip list --not-required查看哪些是pip安装的以便记录。一个常见的坑在conda环境里如果你用pip升级了一个conda也管理的包比如pip install --upgrade numpyconda的环境记录就“失效”了。下次你用conda update --all时conda可能会降级或重新安装这个包造成混乱。我的经验是一旦决定在某个环境里混用就尽量避免使用conda update --all这样的全局更新命令。8. 方法六IDE图形化安装 —— 新手的快捷入口对于初学者而言在命令行里敲命令可能有些 intimidating。现代集成开发环境IDE提供了非常友好的图形化界面来管理包。8.1 PyCharmPyCharm是功能最全的Python IDE之一。在PyCharm中管理包非常直观打开你的项目。进入File - Settings - Project: [你的项目名] - Python Interpreter。你会看到一个当前解释器已安装包的列表。点击列表上方的号会弹出包管理窗口。在搜索框输入包名如requests选择版本点击Install Package即可。优势界面清晰可以方便地查看已安装包的版本、升级、卸载。PyCharm会自动关联到你项目选择的解释器可能是系统解释器或虚拟环境。8.2 Visual Studio Code (VSCode)VSCode通过扩展来提供Python支持包管理功能同样强大确保已安装Python扩展ms-python.python。按CtrlShiftP打开命令面板。输入Python: Select Interpreter选择正确的Python环境虚拟环境或系统环境。打开终端Ctrl此时终端会自动激活你选中的环境。在终端中你可以直接使用pip install命令。VSCode本身没有专门的包管理GUI但它集成的终端使得操作和命令行完全一致并且环境是正确配置好的。注意事项无论是PyCharm还是VSCode其图形化操作的底层最终都是调用pip或conda命令。它们只是提供了一个更方便的界面。理解背后的命令行原理依然至关重要尤其是在调试安装失败的问题时。9. 方法七系统包管理器安装 —— 谨慎使用的双刃剑在Linux系统上你可以使用系统自带的包管理器如Ubuntu的aptCentOS的yum来安装Python包。命令类似这样# Ubuntu/Debian sudo apt-get install python3-requests # CentOS/RHEL sudo yum install python3-requests这种方法有非常明确的优缺点优点集成性好安装的包与系统其他部分集成度可能更高。自动处理系统依赖如果包依赖某个系统库包管理器会一并安装。版本稳定系统仓库中的Python包版本通常比较旧但非常稳定经过系统维护者的测试。缺点版本滞后仓库中的版本可能比PyPI上的最新版落后好几个大版本无法使用新特性。包名差异包名可能不同如python3-pip而不是pip。环境冲突包被安装到系统目录如/usr/lib/python3/dist-packages/所有用户和项目共享。这极易导致依赖冲突比如你的项目需要新版本的包但系统包管理器不允许你轻易升级因为它可能会破坏其他系统组件的依赖。包不全很多Python包根本不在系统仓库里。结论与建议除非你非常确定自己在做什么否则强烈不建议使用系统包管理器来安装用于项目开发的Python包。它的主要适用场景是安装一些系统工具级别的Python包这些工具不随项目变化且对版本不敏感。例如安装pip本身sudo apt-get install python3-pip对于项目依赖请务必使用虚拟环境配合pip或conda来管理。10. 方法八可执行文件/独立包 —— 开箱即用的便利严格来说这已经不属于Python包管理的范畴但它确实是一种“安装”Python应用的方式。一些开发者使用PyInstaller,cx_Freeze等工具将Python脚本及其所有依赖打包成一个独立的可执行文件如Windows的.exe。对于最终用户来说安装这样的应用就和安装普通软件一样下载安装程序双击运行无需关心Python环境或依赖。例如一些用Python编写的小工具、游戏或客户端程序可能会采用这种分发方式。作为Python开发者你通常不是这种安装方式的“用户”而是“生产者”。当你需要将你的Python程序分发给不懂技术的用户时打包成可执行文件是一个很好的选择。但这涉及到另一个复杂的话题——Python程序打包这超出了本文讨论的范围。11. 实战问题排查手册从“命令找不到”到依赖地狱理论讲完了我们来面对血淋淋的现实。下面是我在多年开发和教学过程中被问得最多的一些问题及其解决方案。11.1 “pip不是内部或外部命令” —— 环境变量配置这是Windows新手遇到的第一只拦路虎。错误信息通常是pip 不是内部或外部命令也不是可运行的程序或批处理文件。或者无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。原因操作系统在命令行中找不到pip.exe这个可执行文件的位置。因为你安装Python时可能没有勾选“Add Python to PATH”将Python添加到环境变量。解决方案检查Python安装首先确认Python已正确安装。打开命令行输入python --version。如果这个命令能正确显示Python版本说明Python本身已加入PATH。找到pip的位置Python安装后pip.exe通常位于Python安装目录\Scripts\下。例如C:\Users\YourName\AppData\Local\Programs\Python\Python39\Scripts\。手动添加Scripts目录到PATH右键点击“此电脑” - “属性” - “高级系统设置” - “环境变量”。在“系统变量”或“用户变量”中找到Path变量点击“编辑”。点击“新建”将上面找到的Scripts文件夹的完整路径粘贴进去。一路点击“确定”退出。重要关闭所有已打开的命令行窗口重新打开一个新的。环境变量的更改只对新打开的终端生效。终极验证在新命令行中输入pip --version应该能显示pip的版本信息。替代方案临时你也可以在每次使用时通过Python解释器来调用pip模块python -m pip install requestspython -m pip的意思是让Python运行pip模块。这种方式不依赖pip是否在PATH中只要python在就行非常可靠推荐在任何不确定的环境下使用。11.2 权限错误Permission Denied在Linux/Mac或Windows没有管理员权限时直接使用pip install可能会报权限错误因为它试图将包安装到系统目录如/usr/local/lib。解决方案最佳实践如前所述永远使用虚拟环境。在虚拟环境里你有当前目录的完全读写权限根本不会遇到系统权限问题。临时方案不推荐如果非要安装到用户目录可以使用--user参数pip install --user package_name这会将包安装到用户专属目录如~/.local/lib/python3.x/site-packages。但多个项目混用用户目录依然可能产生冲突。11.3 依赖冲突Cannot uninstall ‘X’ It is a distutils installed project有时在安装或升级包时会遇到令人崩溃的依赖冲突。一个典型的错误是提示某个包是distutils安装的无法卸载。原因某些包尤其是系统自带的或通过系统包管理器安装的是用旧式的distutils方式安装的pip无法很好地管理它们。解决方案忽略它如果可能如果冲突不影响新包的安装有时可以加上--ignore-installed参数强制安装但这有风险。使用虚拟环境再次强调在一个全新的虚拟环境里安装完全避开系统环境的干扰。这是最干净、最彻底的解决方案。手动清理进阶如果必须在系统环境操作可以尝试找到该包的安装目录通常在site-packages里手动删除其文件和文件夹然后再用pip install。但此操作需谨慎可能破坏其他依赖。11.4 超时与网络错误ReadTimeoutError从PyPI下载包特别是大型包如TensorFlow时很容易因网络问题导致超时。解决方案配置国内镜像源如前文“镜像源配置”部分所述这是解决此问题的根本方法。增加超时时间使用--timeout参数单位是秒。pip install --timeout1000 package_name使用代理如果你在公司内网需要通过代理上网需要为pip配置代理pip install --proxyhttp://your-proxy-ip:port package_name或者在配置文件中永久设置。11.5 版本不匹配Could not find a version that satisfies the requirement这个错误通常意味着你要求的版本不存在或者与当前Python版本、操作系统不兼容。排查步骤检查包名拼写是否拼错了比如request和requests是两个不同的包。检查版本是否存在去PyPI官网https://pypi.org/project/包名/搜索该包查看其发布历史确认你指定的版本号确实存在。检查Python版本兼容性有些新包可能只支持Python 3.8而你的环境是Python 3.6。同样有些旧包可能不支持Python 3。在PyPI的项目页面通常有“Requires: Python 3.7”这样的说明。尝试不指定版本先pip install package_name安装最新版看是否能成功。尝试更早的版本如果最新版失败可能是它刚发布有bug可以尝试上一个次要版本例如pip install package_name2.1.0。12. 总结与个人工具箱配置心得走过了这八种方法你会发现Python包管理的核心思想其实是“隔离”与“精确”。隔离不同项目的环境精确控制每个项目依赖的版本。基于这个思想我个人的标准工作流已经固定下来分享给你作为参考对于绝大多数纯Python项目Web开发、自动化脚本等使用venv创建虚拟环境简单、原生、无额外依赖。python -m venv .venv激活环境后使用piprequirements.txt这是行业标准。通过pip freeze requirements.txt生成清单用pip install -r requirements.txt复现环境。永久配置国内镜像源在用户目录配置pip.ini或pip.conf一劳永逸解决下载慢的问题。IDE配置在PyCharm或VSCode中将解释器指向虚拟环境内的python.exe。对于数据科学、机器学习项目使用 Miniconda因为它更轻量。conda create -n ds_env python3.10优先使用conda install安装核心科学计算栈numpy, pandas, scikit-learn, jupyter。conda能更好地处理这些包复杂的二进制依赖。必要时谨慎混用pip对于conda仓库没有的纯Python包比如某些最新的深度学习工具包在conda环境内使用pip install。并记录下哪些包是pip装的。导出环境使用conda env export environment.yml导出完整环境便于复现。最后再分享一个排查疑难杂症时的“黄金命令”pip install -v。-v是verbose详细模式它会打印出安装过程中的每一个细节包括下载的URL、解压、执行了哪些命令。当安装莫名其妙失败时加上-v参数输出的日志往往能给你最直接的线索。包管理是Python开发的基石初期多花点时间把这些概念和工具理顺后期就能避免无数个深夜的debug。希望这篇长文能帮你把这套工具玩得转用得溜。