您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

这很容易解决,但是涉及到理解三个不同的概念:

为了完整起见,我将尝试对每种方法进行快速的ELI5处理,以便您了解如何以最佳方式为您解决此问题。

当您在提示符下键入任何命令(例如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/pythonipython在此示例中,当您键入时,系统将转到/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython,因为ipythonin中没有/usr/bin/

知道您使用的是什么可执行文件总是很重要的,尤其是当系统中安装了相同程序的安装次数如此之多时。改变路径并不太复杂;参见例如如何在Linux上永久设置$ PATH?

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

当您运行python并执行类似的操作时import matplotlib,Python必须玩类似的游戏才能找到您想要的软件包。类似于$PATHunix,Python具有sys.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使用python setup.py install或来安装软件包时放置软件包的认位置。pipconda,或类似方式。

需要注意的重要一点是, ,其中 安装 软件包。换句话说,如果您为安装了某些东西,例如/usr/bin/python,则~/anaconda/bin/python ,因为它是安装在其他Python上的!这就是为什么在我们的Twitter交流中,我建议您专注于一个Python安装,并对其进行修复,$PATH以便仅使用要使用的Python 。

有此另一个组件:一些Python包都带有独立的脚本捆绑在一起,你可以在命令行(例子是运行pipipythonjupyterpep8,等)认情况下,这些可执行文件将被放在 为Python的用于安装它们,并且仅设计用于 。

这意味着,随着系统的设置,在运行时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,这可能就是您想要的。

我们还没有完全摆脱困境。您提到在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运行代码

您可以使用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版本优先。例如,您可以运行export PATH="/path/to/python/bin:$PATH"(一次)指定要使用的Python。要永久执行此操作,请将该行添加.bash_profile/中.bashrc(请注意,anaconda在安装时会自动为您执行此操作)。我建议使用anaconda或miniconda随附的Python:这将允许您使用所需的conda install所有工具。

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

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

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

希望这很清楚…祝你好运!

python 2022/1/1 18:42:17 有288人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶