当前位置: 首页 > 知识库问答 >
问题:

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

米迪
2023-03-14

我想使用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目录中删除了if。现在,当我启动Jupyter笔记本时,我得到一个内核错误:

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' 

我该怎么办?!

共有3个答案

满俊楠
2023-03-14

还发现没有将虚拟环境放在git repo中,因为读取python包变得不可读。读写时使用的权限似乎不同(写-安装包-使用pip),如何无法读取。因此,对我来说,python库是从系统安装中读取的,而不是从虚拟环境中读取的。

姬选
2023-03-14

@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

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

"/usr/bin/python3.5"

"/usr/bin/python3"

并将其与ctr x一起保存,然后重新启动jupyter笔记本。

庄文栋
2023-03-14

这是相当简单的修复,但它涉及到理解三个不同的概念:

  1. Unix/Linux/OSX如何使用$PATH查找可执行文件(%PATH%在Windows中)
  2. Python如何安装和查找包
  3. Jupyter如何知道使用什么Python

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

当您在提示符处键入任何命令(例如,python)时,系统会有一个定义良好的位置序列来查找可执行文件。该序列在名为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,因为/usr/bin/中没有ipython

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

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

当您运行python并执行类似于导入matplotlib的操作时,python必须玩类似的游戏才能找到您想要的软件包。与unix中的$PATH类似,Python具有sys。指定以下各项的路径

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

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

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

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

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

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

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

Jupyter被设置为能够为代码使用广泛的“内核”或执行引擎。这些可以是Python2、Python3、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可执行文件相关联的内核规范。然后,您可以在Jupyter笔记本中选择此内核来使用该Python运行您的代码。

您可以使用help命令查看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环境。

所以在这样的背景下,你的问题很容易解决:

>

  • 设置您的PATH,以便所需的Python版本是第一个。例如,您可以运行导出PATH="/path/to/python/bin:$PATH"来指定(一次)要使用的Python。要永久执行此操作,请将该行添加到您的中。bash_profile/. bashrc(请注意,anaconda可以在您安装时自动执行此操作)。我建议使用anaconda或minicon da附带的Python:这将允许您安装所需的所有工具。

    确保为该python安装了要使用的包。如果您使用的是conda,您可以键入,例如conda安装jupyter matplotlib Scikit-学习来安装anaconda/bin/python的这些包。

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

    要将模块安装到其他不是由Anaconda管理的Python Jupyter内核中,需要将路径复制到内核的Python可执行文件,然后运行/path/to/Python-m pip install

    希望这是清楚的。。。祝你好运

  •  类似资料:
    • 我正在使用Python(IPython 我有一个3000个唯一ID的数组,可以从API中提取数据,一次只能使用一个ID调用API。 我希望以某种方式同时拨打3组1000个电话,以加快速度。 最好的方法是什么? 提前感谢任何帮助!

    • 我有一个ANT脚本,它使用自定义类路径调用Java11类 ${basedir}/lib/ant目录包含几个JAR A.jar-我的图书馆 这些jars都可以很好地加载到类路径${ant.classpath}中。 工作流程是这样的:A.jar调用B.jar,B.jar调用C.jar。 所以,A.jar调用B.jar中的类没问题。它使用JAVA中的import语句调用类: 这工作完美。 然而,B.ja

    • 问题内容: 我想运行一个名为foo的python脚本。我有绝对路径,可以说:/ Users / me / pythonscripts / 我试过跑步: 但这确实运行了python文件。 问题答案: 尝试使用更多类似… 代替。每个都是自己的过程,并且多个彼此之间没有关系… 您还应该考虑改用,因为这为您提供了较高的可配置性,例如,您可以更改执行路径上下文… 另外,请注意,Python的输出流有问题,这

    • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

    • 问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛

    • 问题内容: 我正在尝试使用Visual Studio Code,到目前为止,它看起来很棒(轻巧,快速等)。 我正在尝试运行一个使用虚拟环境的Python应用程序,但是还使用了不在我的虚拟环境的站点包中的库。 我知道在中,我可以指定一个设置,该设置已经完成并且指向虚拟环境。 我也知道我可以向添加其他路径,到目前为止,我正在添加外部库。问题是,当我调试时,它失败了,因为没有找到中指定的库。 为此必须使