使用多个 Python 和 IPython 路径运行 Jupyter

2025-03-20 08:48:00
admin
原创
37
摘要:问题描述:我想使用 Jupyter 笔记本,但在进行基本导入(例如导入 matplotlib)时遇到了困难。我认为这是因为我有几个用户管理的 Python 安装。例如:> which -a python /usr/bin/python /usr/local/bin/python > which ...

问题描述:

我想使用 Jupyter 笔记本,但在进行基本导入(例如导入 matplotlib)时遇到了困难。我认为这是因为我有几个用户管理的 Python 安装。例如:

> which -a python
/usr/bin/python
/usr/local/bin/python

> which -a ipython
/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
/usr/local/bin/ipython

> which -a jupyter
/Library/Frameworks/Python.framework/Versions/3.5/bin/jupyter
/usr/local/bin/jupyter

我以前有 anaconda,但从 ~/anaconda 目录中删除了它。现在,当我启动 Jupyter Notebook 时,出现内核错误:

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/pytho‌n3.5/subprocess.py",
line 947, in init restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/pytho‌n3.5/subprocess.py",
line 1551, in _execute_child raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2]
No such file or directory: '/Users/npr1/anaconda/envs/py27/bin/python' 

我应该怎么办?!


解决方案 1:

解决这个问题相当简单,但需要理解三个不同的概念:

  1. Unix/Linux/OSX 如何$PATH查找可执行文件(%PATH%在 Windows 中)

  2. Python 如何安装和查找包

  3. Jupyter 如何知道要使用哪种 Python

为了完整起见,我将尝试对每个问题进行快速 ELI5,这样您就会知道如何以最佳方式解决此问题。

1.Unix/Linux/OSX $PATH

当您在提示符下键入任何命令(例如python)时,系统会有一个明确定义的顺序来查找可执行文件。此顺序在名为 的系统变量中定义PATH,用户可以指定该变量。要查看PATH,您可以键入echo $PATH

结果是您计算机上的目录列表,将按顺序搜索所需的可执行文件。从上面的输出中,我假设它包含以下内容:

$ echo $PATH
/usr/bin/:/Library/Frameworks/Python.framework/Versions/3.5/bin/:/usr/local/bin/

在 Windows 中echo %path%

可能还穿插了一些其他路径。这意味着当您输入 时python,系统将转到/usr/bin/python。在此示例中,当您输入 时ipython,系统将转到,因为中/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython没有。ipython`/usr/bin/`

了解您正在使用的可执行文件始终很重要,特别是当您的系统上安装了如此多相同的程序时。更改路径并不太复杂;例如,请参阅如何在 Linux 上永久设置 $PATH?。

Windows -如何在 Windows 10 中设置环境变量

  1. Python 如何查找包


当你运行 python 并执行类似操作时import matplotlib,Python 必须进行类似的操作才能找到你想要的包。与$PATHunix 类似,Pythonsys.path指定了以下内容:

$ python
>>> import sys
>>> sys.path
['',
 '/Users/jakevdp/anaconda/lib/python3.5', 
 '/Users/jakevdp/anaconda/lib/python3.5/site-packages',
 ...]

一些重要的事情:默认情况下,中的第一个条目sys.path是当前目录。此外,除非您修改它(除非您确切知道自己在做什么,否则您不应该这样做),否则您通常会site-packages在路径中找到名为的东西:这是当您使用python setup.py install、或pip、或conda或或类似方法安装包时 Python 放置包的默认位置。

需要注意的是,每个 Python 安装都有自己的 site-packages,其中安装了特定 Python 版本的软件包。换句话说,如果您安装了某些东西,例如/usr/bin/python,则~/anaconda/bin/python 无法使用该包,因为它安装在不同的 Python 上!这就是为什么在我们的 Twitter 交流中,我建议您专注于一个 Python 安装,并修复您的安装,$PATH以便您只使用您想要使用的那个。

还有另一个组成部分:一些 Python 包捆绑了独立脚本,您可以从命令行运行这些脚本(例如pip,,,,等)。默认情况下ipython,这些可执行文件将放在与用于安装它们的 Python相同的目录路径中,并且设计为仅适用于该 Python 安装jupyter`pep8`

这意味着,正如您的系统设置的那样,当您运行 时python,您会得到/usr/bin/python,但是当您运行 时ipython,您会得到/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython与 处的 Python 版本相关联的/Library/Frameworks/Python.framework/Versions/3.5/bin/python!此外,这意味着您在运行时可以导入的包python与您在运行时可以导入的包ipython或 Jupyter 笔记本完全分开:您正在使用两个完全独立的 Python 安装。

那么如何解决这个问题呢?首先,确保您的$PATH变量正在执行您想要的操作。您可能有一个类似于~/.bash_profile~/.bashrc的启动脚本来设置此$PATH变量。在 Windows 上,您可以修改用户特定的环境变量。如果您希望系统以不同的顺序搜索内容,您可以手动修改它。当您第一次安装 anaconda/miniconda 时,将有一个选项可以自动执行此操作(将 Python 添加到 PATH):对此选择是,然后python将始终指向~/anaconda/python,这可能就是您想要的。

  1. Jupyter 如何知道要使用哪种 Python


我们还没有完全摆脱困境。您提到在 Jupyter 笔记本中,您遇到了内核错误:这表明 Jupyter 正在寻找不存在的 Python 版本。

Jupyter 的设置使其能够使用多种“内核”或代码执行引擎。这些可以是 Python 2、Python 3、R、Julia、Ruby……有几十种可能的内核可供使用。但为了实现这一点,Jupyter 需要知道在哪里寻找相关的可执行文件:也就是说,它需要知道该文件python位于哪个路径中。

这些路径在 jupyter 中指定kernelspec,用户可以根据自己的需要进行调整。例如,这是我的系统上的内核列表:

$ jupyter kernelspec list
Available kernels:
  python2.7        /Users/jakevdp/.ipython/kernels/python2.7
  python3.3        /Users/jakevdp/.ipython/kernels/python3.3
  python3.4        /Users/jakevdp/.ipython/kernels/python3.4
  python3.5        /Users/jakevdp/.ipython/kernels/python3.5
  python2          /Users/jakevdp/Library/Jupyter/kernels/python2
  python3          /Users/jakevdp/Library/Jupyter/kernels/python3

每个目录都包含一些元数据,这些元数据指定了内核名称、可执行文件的路径和其他相关信息。

您可以手动调整内核,编辑上面列出的目录中的元数据。

安装内核的命令可能会根据内核而变化。IPython 依赖于ipykernel 包,其中包含安装 Python 内核的命令:例如

$  python -m ipykernel install

它将创建一个与用于运行此命令的 Python 可执行文件关联的 kernelspec。然后,您可以在 Jupyter 笔记本中选择此内核,以使用该 Python 运行您的代码。

您可以使用帮助命令查看ipykernel提供的其他选项:

$ python -m ipykernel install --help
usage: ipython-kernel-install [-h] [--user] [--name NAME]
                              [--display-name DISPLAY_NAME] [--prefix PREFIX]
                              [--sys-prefix]

Install the IPython kernel spec.

optional arguments:
  -h, --help            show this help message and exit
  --user                Install for the current user instead of system-wide
  --name NAME           Specify a name for the kernelspec. This is needed to
                        have multiple IPython kernels at the same time.
  --display-name DISPLAY_NAME
                        Specify the display name for the kernelspec. This is
                        helpful when you have multiple IPython kernels.
  --prefix PREFIX       Specify an install prefix for the kernelspec. This is
                        needed to install into a non-default location, such as
                        a conda/virtual-env.
  --sys-prefix          Install to Python's sys.prefix. Shorthand for
                        --prefix='/Users/bussonniermatthias/anaconda'. For use
                        in conda/virtual-envs.

注意:最新版本的anaconda附带了笔记本的扩展,如果ipykernel其中安装了包,它应该会自动检测您的各种 conda 环境。

总结:修复您的问题

因此,有了这个背景,您的问题就很容易解决:

  1. 设置您的PATHPython 版本,以便首先使用所需的 Python 版本。例如,您可以运行export PATH="/path/to/python/bin:$PATH"以指定(一次)您想要使用的 Python。要永久执行此操作,请将该行添加到您的.bash_profile/ .bashrc(请注​​意,当您安装 anaconda 时,它可以自动为您执行此操作)。我建议使用 anaconda 或 miniconda 附带的 Python:这将允许您使用conda install所需的所有工具。

  2. 确保已为该Python 安装要使用的软件包。如果您使用的是 conda,则可以键入例如conda install jupyter matplotlib scikit-learn安装这些软件包anaconda/bin/python

  3. 确保您的 Jupyter 内核指向您想要使用的 Python 版本。当您conda install jupyter这样做时,它应该会自动设置anaconda/bin/python。否则,您可以使用jupyter kernelspec命令或python -m ipykernel install命令来调整现有内核或安装新内核。

  4. 要将模块安装到非 Anaconda 管理的其他 Python Jupyter 内核中,您需要将路径复制到内核的 Python 可执行文件并运行/path/to/python -m pip install <package>

解决方案 2:

@jakevdp解释得很好。

当我更新我的 ubuntu 时,我也遇到了同样的问题,我通过更改内核配置文件 (kernel.json) 解决了这个问题。要列出内核文件的位置。使用

jupyter kernelspec list

它将回归

Available kernels:
  python3    /home/user1/.local/share/jupyter/kernels/python3
  python2    /usr/local/share/jupyter/kernels/python2

我使用的是 python3,所以我将文件更改为

/home/user1/.local/share/jupyter/kernels/python3

按照以下步骤

nano /home/user1/.local/share/jupyter/kernels/python3/kernel.json

在那里
argv
我改变了第一个参数(即python3目录路径)的形式

"/usr/bin/python3.5"

"/usr/bin/python3"

并将其保存
ctr+x
并重新启动 jupyter-notebook。

解决方案 3:

还发现不要将虚拟环境放在 git repo 中,因为这样就无法读取 python 包了。似乎在读取和写入(写入 - 安装包 - 使用 pip)时使用了不同的权限,因此无法读取。因此,对我来说,python 库是从系统安装中读取的,而不是从虚拟环境中读取的。

解决方案 4:

如果您只想将包安装到当前环境中以便能够导入它,您可以使用%pip%condamagicks。

正如您提到的 anaconda,您可能应该使用它conda来安装:

# Install a conda package in the current Jupyter kernel
%conda install <dependency_name>

或者,如果您需要使用pip

# Install a pip package in the current Jupyter kernel
%pip install <python_package_name>

解决方案 5:

@jakevdp 的上述回答和他的博客https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/对出了什么问题给出了相当好的想法,但是仅仅从 shell 更新路径对我来说不起作用,有两种方法对我有用

使用魔法命令更新笔记本上的路径,在单元格上运行

originalPath = %env PATH
%env PATH = [local anaconda path]/kernels/[custom_kernel]/bin/:$originalPath

或者你甚至可以更新 kernel.json 并在 env 中设置路径

{
    "argv": [
        "[custom kernel path]/bin/python",
        "-m",
        "ipykernel_launcher",
        "-f",
        "{connection_file}"
    ],
    "env": {
        "PATH": "[custom kernel path]/bin/:[rest of the paths]"
    },

    "display_name": "custom_kerbel",

    "language": "python"
}
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用