npr*_*oss 41 python ipython jupyter jupyter-notebook
我想和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
Run Code Online (Sandbox Code Playgroud)
我曾经有过anaconda,但是从〜/ anaconda目录中删除了.现在,当我启动一个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'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?!
jak*_*vdp 133
这很容易修复,但它涉及到三个不同的概念:
$PATH用于查找可执行文件(%PATH%在Windows中)为了完整起见,我会尝试在每个上面快速完成ELI5,这样你就会知道如何以最好的方式解决这个问题.
当您在提示符下键入任何命令时(例如python),系统会有一个明确定义的位置序列,以查找可执行文件.此序列在被调用的系统变量中定义,PATH用户可以指定.要查看您的内容PATH,您可以输入echo $PATH.
结果是计算机上的目录列表,将对其进行搜索以获得所需的可执行文件.从上面的输出,我假设它包含这个:
$ echo $PATH
/usr/bin/:/Library/Frameworks/Python.framework/Versions/3.5/bin/:/usr/local/bin/
Run Code Online (Sandbox Code Playgroud)
在窗户中 echo %path%
可能还有一些其他路径穿插.这意味着当您键入时python,系统将转到/usr/bin/python.当您键入ipython,在这个例子中,系统会去/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython,因为没有ipython在/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',
...]
Run Code Online (Sandbox Code Playgroud)
一些重要的事情:默认情况下,第一个条目sys.path是当前目录.另外,除非你修改它(除非你确切知道你在做什么,否则你不应该这样做),你通常会site-packages在路径中找到一些东西:这是Python在你使用时安装包的默认位置python setup.py install,或者pip或者conda,或类似的手段.
需要注意的重要一点是,每个python安装都有自己的站点包,其中为特定的Python版本安装了包.换句话说,如果您安装了某些内容,例如/usr/bin/python,则~/anaconda/bin/python 无法使用该软件包,因为它安装在不同的Python上!这就是为什么在我们的Twitter交流中,我建议你专注于一个Python安装,并修复你,$PATH以便你只使用你想要使用的那个.
还有另一个组件这样的:一些Python包都用,你可以在命令行中运行独立的脚本(例子是捆绑的pip,ipython,jupyter,pep8,等)默认情况下,这些可执行文件将被放在同一目录路径为Python的用于安装它们,并且只能用于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
Run Code Online (Sandbox Code Playgroud)
其中每个都是一个包含一些元数据的目录,这些元数据指定了内核名称,可执行文件的路径以及其他相关信息.
您可以手动调整内核,编辑上面列出的目录中的元数据.
安装内核的命令可以根据内核而改变.IPython依赖于ipykernel包,它包含一个安装python内核的命令:例如
$ python -m ipykernel install
Run Code Online (Sandbox Code Playgroud)
它将创建与用于运行此命令的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.
Run Code Online (Sandbox Code Playgroud)
注意:最近版本的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>
希望这很清楚......祝你好运!
小智 9
@jakevdp解释得很好。
当我更新我的 ubuntu 时,我也遇到了同样的问题,我通过更改内核配置文件(kernel.json)解决了它。列出内核文件位置。使用
jupyter kernelspec list
Run Code Online (Sandbox Code Playgroud)
它会返回
Available kernels:
python3 /home/user1/.local/share/jupyter/kernels/python3
python2 /usr/local/share/jupyter/kernels/python2
Run Code Online (Sandbox Code Playgroud)
我使用的是 python3 所以我更改了文件
/home/user1/.local/share/jupyter/kernels/python3
Run Code Online (Sandbox Code Playgroud)
通过以下步骤
nano /home/user1/.local/share/jupyter/kernels/python3/kernel.json
Run Code Online (Sandbox Code Playgroud)
在里面
argv
我改变了第一个参数(即python3目录路径)形式
"/usr/bin/python3.5"
Run Code Online (Sandbox Code Playgroud)
到
"/usr/bin/python3"
Run Code Online (Sandbox Code Playgroud)
并保存
ctr+x
并重新启动 jupyter-notebook。
| 归档时间: |
|
| 查看次数: |
28199 次 |
| 最近记录: |