在Jupyter中安装Python包

简介: 对于任何想要学习编程语言的小伙伴来说,选择编程的工具是非常重要的。在编程工具和Python库中的连接中,一直是一个让很多人头疼的问题。文中有彩蛋!!!

彩蛋:作者著作:《Python Data Science Handbook

上述图书是电子书链接,供爱学习的同学学习。

对于使用Jupyter notebook的户来说,你会经常遇到下面的问题:

我安装了软件包X,现在我无法将其导入到notebook中。帮帮我!

这个问题几乎是所有初学者第一个拦路虎,任何语言都是如此。今天我们就来说说Jupyter notebook如何解决这类问题。

从根本上来说,这个问题的根是Jupyter内核与Jupytershell分离的事实,换句话说,安装程序与笔记本中默认使用的是不同的Python版本。在最简单的情况下,这个问题不会出现,但是当调试代码时,需要了解操作系统的复杂性、Python软件包安装的复杂性以及Jupyter本身的复杂性。

在了解了一些在线(AB)和一些关于这个话题的讨论,我决定在这里深入讨论这个问题。这篇文章将解决一些事情:

·         首先,我为一般问题提供一个快速,简单的答案,例如我如何安装一个Python包,以便使用pipconda与我的jupyter笔记本一起工作

·         其次,我将深入到Jupyter笔记本抽象是干什么的,如何将其与操作系统的复杂交互简单化。

·         第三,我将讨论一些我在社区的想法,其中包括JupyterPipConda开发人员可能考虑的一些变化,以减轻用户的认知负担。

本文将重点介绍两种安装Python软件包的方法:pipconda

1.如何在Jupyter中安装软件包

Pipconda

对于许多用户来说,pipconda之间的选择可能是一个令人困惑的选择,我总结了两者之间的本质区别在于:

  • Pip可以任何环境下安装python软件包。
  • condaconda环境中安装任何软件包。

·         如果您使用Anaconda conda安装Python ,则使用安装Python软件包。如果conda告诉你所需的软件包不存在,那么你必须使用pip

即使你在短期内可以解决问题,也可能会出现长期的问题。例如,如果pip install给你一个权限错误,这可能意味着你正在试图在系统中安装/更新python软件包,比如/usr/bin/python。这样做会产生不好的后果,因为操作系统本身通常依赖于Python安装中的特定版本。对于Python的日常使用,你应该使用虚拟环境Anaconda把你的软件包与系统Python隔离。

1.1:如何使用CondaJupyter

如果您使用的是jupyter,并且想要使用conda安装软件包,则可能会使用!记号直接从Jupyter上运行conda作为shell命令:

# DON'T DO THIS!
!conda install --yes numpy
Fetching package metadata ...........
Solving package specifications: .
# All requested packages already installed.
# packages in environment at /Users/jakevdp/anaconda/envs/python3.6:
#
numpy                     1.13.3           py36h2cdce51_0 
AI 代码解读

我将在下面更全面地概述,如果您想从当前的jupyter中使用这些已安装的软件包。

这是一个在一般情况下出现的对话:

# Install a conda package in the current Jupyter kernel
import sys
!conda install --yes --prefix {sys.prefix} numpy
Fetching package metadata ...........
Solving package specifications: .
# All requested packages already installed.
# packages in environment at /Users/jakevdp/anaconda:
#
numpy                     1.13.3           py36h2cdce51_0 
AI 代码解读

这个方法使得conda在当前运行的Jupyter内核中安装软件包。

1.2:如何使用pipJupyter

如果您使用的是Jupyter,并想安装一个软件包pip,您可能会倾向于直接运行pip

# DON'T DO THIS
!pip install numpy
Requirement already satisfied: numpy in /Users/jakevdp/anaconda/envs/python3.6/lib/python3.6/site-packages
AI 代码解读

如果您想从当前的jupyter中使用这些已安装的软件包。

# Install a pip package in the current Jupyter kernel
import sys
!{sys.executable} -m pip install numpy
Requirement already satisfied: numpy in /Users/jakevdp/anaconda/lib/python3.6/s
AI 代码解读
如果你想要在 Jupyter 中直接使用,指令应该是:
$ python -m pip install <package>
AI 代码解读

而不是:

$ pip install <package>
AI 代码解读

因为前者更明确地说明了软件包的安装位置(下面会详细介绍)。

2.为什么Jupyter的安装如此混乱?

上述的方案应该在所有情况下都能正常工作,但为什么还需要额外的方法?这是因为在Jupyter中,shell环境和Python可执行文件是断开的。想要深入理解理解为什么,你就必须要对以下的概念有了解:

  1. 您的操作系统如何查找可执行程序。
  2. Python如何安装和查找软件包。
  3. Jupyter如何决定使用哪个Python可执行文件。

注意:下面的讨论假设操作系统是LinuxUnixMacOSX

2.1您的操作系统如何定位可执行文件?

当您正在使用的终端输入如下命令pythonjupyteripythonpipconda,你的操作系统包含一个定义良好的机制,他可以找到可执行文件的名称。

LinuxMac系统上,系统将首先检查与命令匹配的别名,如果失败,则引用$PATH环境变量:

!echo $PATH
/Users/jakevdp/anaconda/envs/python3.6/bin:/Users/jakevdp/anaconda/envs/python3.
AI 代码解读

$PATH列出目录,按顺序,将搜索任何可执行文件:例如,如果我python在上面键入我的系统$PATH,它将首先查找/Users/jakevdp/anaconda/envs/python3.6/bin/python,如果不存在,它将查找/Users/jakevdp/anaconda/bin/python,依此类推。

2.2Python如何查找包

Python使用类似的机制来定位导入的包。Python在导入时搜索的路径列表位于:

 

默认情况下,Python查找模块的第一个地方是一个空路径,即当前的工作目录。如果没有找到该模块,则将它放在位置列表中,直到找到该模块。您可以使用__path__导入的模块的属性找出哪个位置已被使用:

import numpy
numpy.__path__
['/Users/jakevdp/anaconda/lib/python3.6/site-packages/numpy']
AI 代码解读

在大多数情况下,你安装了Pythonpipconda将被放置在一个名为目录site-packages。要认识到的重要一点是每个Python可执行文件都有自己的site-packages。这意味着当你安装一个软件包时,它与特定的python可执行文件相关联,并且默认只能用于Python安装。

我们可以打印sys.path每个可用python可执行文件的变量来看到这一点,使用Jupyter令人愉快的是将Pythonbash命令混合在一个代码块中的功能:

paths = !type -a python
for path in set(paths):
    path = path.split()[-1]
    print(path)
    !{path} -c "import sys; print(sys.path)"
    print()
AI 代码解读

这里的全部细节并不是特别重要,但是需要强调的是,每个Python可执行文件都有自己独特的路径,除非您修改sys.path,否则不能导入安装在不同Python环境中的软件包。

我将再次强调:Jupyter中的shell环境必须与启动它的Python版本相匹配。

2.3 Jupyter如何执行代码:Jupyter内核

下一个相关的问题是Jupyter如何选择执行Python代码,这使我们想到Jupyter内核的概念。

Jupyter内核是指Jupyter在内执行代码的一系列文件。对于Python内核,这将指向一个特定的Python版本,但Jupyter被设计得更通用:Jupyter几十个可用的内核,包括Python 2Python 3JuliaRRubyHaskell,甚至C ++Fortran

如果您使用Jupyter,则可以随时使用内核选择内核菜单项来更改内核。

要查看您的系统上可用的内核,可以在shell中运行以下命令:

!jupyter kernelspec list
Available kernels:
  python3       /Users/jakevdp/anaconda/envs/python3.6/lib/python3.6/site-packages/ipykernel/resources
  conda-root    /Users/jakevdp/Library/Jupyter/kernels/conda-root
  python2.7     /Users/jakevdp/Library/Jupyter/kernels/python2.7
  python3.5     /Users/jakevdp/Library/Jupyter/kernels/python3.5
  python3.6     /Users/jakevdp/Library/Jupyter/kernels/python3.6
AI 代码解读

这些列出的内核中的每一个都是一个包含名为kernel.json的文件的目录,其中指定了内核应该使用哪种语言和可执行文件。例如:

!cat /Users/jakevdp/Library/Jupyter/kernels/conda-root/kernel.json
{
 "argv": [
  "/Users/jakevdp/anaconda/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "python (conda-root)",
 "language": "python"
}
AI 代码解读

如果你想创建一个新的内核,可以使用jupyter ipykernel命令来完成。例如,我使用以下内容作为模板,为我的conda环境创建了上述内核:

$ source activate myenv
$ python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
AI 代码解读

3.一些建议

所以,综上所述,安装在Jupyter的包是从根本上说Jupytershell环境和Python的内核不匹配,这意味着你必须做的不是简单地多了解pip installconda install做事情的工作。

我有一些想法,其中一些可能是有用的:

3.1Jupyter 的潜在策略

正如我所提到的,根本问题是Jupytershell环境和计算内核之间的不匹配。那么,我们是否可以按照内核规范来强制二者匹配呢?

也许,这个github问题展示了一种在内核启动时修改shell变量的方法。

基本上,在你的内核目录中,你可以添加一个如下所示的脚本kernel-startup.sh(并确保你改变了权限以便它是可执行的):

#!/usr/bin/env bash
# activate anaconda env
source activate myenv
# this is the critical part, and should be at the end of your script:
exec python -m ipykernel $@
AI 代码解读

3.2新的Jupyter Magic函数

我们可以通过在Jupyter中引入%pip%conda魔术功能来简化用户体验,从而检测当前的内核并使某些软件包安装在正确的位置。

PIP Magic

例如,下面是如何定义一个%pip在当前内核中工作的魔术函数:

from IPython.core.magic import register_line_magic
@register_line_magic
def pip(args):
    """Use pip from the current kernel"""
    from pip import main
    main(args.split())
AI 代码解读

请注意,Jupyter开发者Matthias Bussonnier已经在他的pip_magic仓库中发布了基本的内容,所以你可以做的是:

$ python -m pip install pip_magic
AI 代码解读

Conda Magic

同样,我们可以定义一个conda Magic,如果你输入的话会做正确的事情%conda install XXX。这比pip Magic更有意义,因为它必须首先确认环境是conda兼容的,然后(与缺少有关的python -m conda install)必须调用一个子进程来执行相应的shell命令:

from IPython.core.magic import register_line_magic
import sys
import os
from subprocess import Popen, PIPE
def is_conda_environment():
    """Return True if the current Python executable is in a conda env"""
    # TODO: make this work with Conda.exe in Windows
    conda_exec = os.path.join(os.path.dirname(sys.executable), 'conda')
    conda_history = os.path.join(sys.prefix, 'conda-meta', 'history')
    return os.path.exists(conda_exec) and os.path.exists(conda_history)
@register_line_magic
def conda(args):
    """Use conda from the current kernel"""
    # TODO: make this work with Conda.exe in Windows
    # TODO: fix string encoding to work with Python 2
    if not is_conda_environment():
        raise ValueError("The python kernel does not appear to be a conda environment.  "
                         "Please use ``%pip install`` instead.")
        conda_executable = os.path.join(os.path.dirname(sys.executable), 'conda')
    args = [conda_executable] + args.split()
        # Add --prefix to point conda installation to the current environment
    if args[1] in ['install', 'update', 'upgrade', 'remove', 'uninstall', 'list']:
        if '-p' not in args and '--prefix' not in args:
            args.insert(2, '--prefix')
            args.insert(3, sys.prefix)
    # Because the notebook does not allow us to respond "yes" during the
    # installation, we need to insert --yes in the argument list for some commands
    if args[1] in ['install', 'update', 'upgrade', 'remove', 'uninstall', 'create']:
        if '-y' not in args and '--yes' not in args:
            args.insert(2, '--yes')
    # Call conda from command line with subprocess & send results to stdout & stderr
    with Popen(args, stdout=PIPE, stderr=PIPE) as process:
        # Read stdout character by character, as it includes real-time progress updates
        for c in iter(lambda: process.stdout.read(1), b''):
            sys.stdout.write(c.decode(sys.stdout.encoding))
        # Read stderr line by line, because real-time does not matter
        for line in iter(process.stderr.readline, b''):
            sys.stderr.write(line.decode(sys.stderr.encoding))
AI 代码解读

如果在Jupyter默认的Magic命令集中添加了类似于上述的pip Magicconda Magic,我认为解决用户在尝试安装Jupyter使用的Python包时常见的问题可能会有很长的路要走。

在提出了今天可以使用的一些简单解决方案之后,我详细解释了为什么这些解决方案是必要的:归结起来,在Jupyter中,内核与外壳断开连接。内核环境可以在运行时更改,而shell环境是在笔记本启动时确定的。

最后:对于创建Python数据科学生态系统基础的Jupytercondapip和相关工具的开发人员忠心的感谢。这篇文章写在一个Jupyter笔记本里面。您可以查看静态版本在这里或下载完整的在这里

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖组织翻译。

文章原标题《installing-python-packages-from-jupyter》,作者:Jake VanderPlas.

个人博客:http://jakevdp.github.io/pages/about.html ,Python Data Science Handbook的作者。

其博客地址,可以免费阅读本书。

译者:虎说八道,审阅:

文章为简译,更为详细的内容,请查看

目录
打赏
0
0
0
0
1811
分享
相关文章
|
21天前
|
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
42 4
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
180 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
162 7
手把手教你安装PyCharm 2025:开发者的Python IDE配置全流程+避坑指南
本教程详细介绍了PyCharm 2025版本在Windows系统下的安装流程及配置方法,涵盖AI代码补全与智能调试工具链等新功能。内容包括系统要求、安装步骤、首次运行配置(如主题选择与插件安装)、创建首个Python项目,以及常见问题解决方法。此外,还提供了切换中文界面和延伸学习资源的指导,帮助用户快速上手并高效使用PyCharm进行开发。
1735 60
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
2076 10
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
249 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
2159 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
使用 pipx 安装并执行 Python 应用程序 (1)
使用 pipx 安装并执行 Python 应用程序 (1)
440 17
python安装、vscode安装、conda安装:一文搞定Python的开发环境(史上最全)
尼恩架构团队推出了一系列《LLM大模型学习圣经》PDF,旨在帮助读者深入理解并掌握大型语言模型(LLM)及其相关技术。该系列包括Python基础、Transformer架构、LangChain框架、RAG架构及LLM智能体等内容,覆盖从理论到实践的各个方面。此外,尼恩还提供了配套视频教程,计划于2025年5月前发布,助力更多人成为大模型应用架构师,冲击年薪百万目标。

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问