【问题标题】:Cannot import modules in jupyter notebook; wrong sys.path无法在 jupyter notebook 中导入模块;错误的系统路径
【发布时间】:2016-03-27 03:14:16
【问题描述】:

我在 iPython/Jupyter 笔记本中导入模块时遇到问题。问题根本在于 sys.path 指向的位置。

从 iPython/Jupyter 笔记本,sys.executable 返回:

'/usr/bin/python'

但是,从命令行,它返回:

'//anaconda/bin/python'

我已尝试卸载并重新安装 anacondas,但问题仍然存在。

我还尝试在我的 bash_profile 中增加 $PYTHONPATH 以包含 //anaconda/bin/python,但这并不能解决它。

是否可以永久更改我的 jupyter 笔记本中的 sys.path,而无需简单地使用 sys.path.append(...)?

【问题讨论】:

标签: python ipython-notebook jupyter-notebook


【解决方案1】:

我刚刚遇到了这个问题。做了一个

find ~ -name kernal.json

得到了

/home/mee/dev/my-venv1/__venv__/share/jupyter/kernels/python3/kernel.json
/home/mee/dev/my-venv2/__venv__/share/jupyter/kernels/python3/kernel.json
/home/mee/.local/share/jupyter/kernels/python3/kernel.json

我查看了~/.local/share/jupyter/kernels/python3/kernel.json 内部,发现它指向/home/alex/dev/my-venv2/__venv__/bin/python3

我删除了~/.local/share/jupyter/kernels/python3/kernel.json,现在my-venv2 中的那个指向了正确的那个,并且一切正常。

【讨论】:

    【解决方案2】:

    我有同样的问题。在对其他地方找到的这个问题进行了许多(比如太多)解决方案之后,我设法找到了一个至少适用于我的情况的解决方案。

    Step1:检查anaconda环境的正确可执行路径。

    进入命令行,激活有问题的conda环境,并检查环境的正确可执行路径。

    conda activate {envronment name};
    然后在python控制台上, (>>>)import sys;sys.executable

    例如在 Linux 上它将是 /media/{username}/{path-to}/anaconda3/envs/{environment name}/bin/python

    第 2 步:更正 jupyter 会话的可执行路径。

    从命令行,检查有问题的 conda 环境的 kernel.json 所在的路径。

    jupyter kernelspec list

    例如在 Linux 上它将是:/home/{username}/.local/share/jupyter/kernels/{environment name}

    打开该文件夹下的kernel.json,替换错误的可执行路径,如下图。

    {
     "argv": [
      "REPLACE-THIS-WITH-THE-CORRECT-EXECUTABLE-PATH",
      "-m",
      "ipykernel_launcher",
      "-f",
      "{connection_file}"
     ],
     "display_name": "environment name",
     "language": "python"
    }
     
    

    希望这也适用于您的情况。

    【讨论】:

    • 感谢您提供非常明确的答复。我正在使用 anaconda-navigator 运行。知道如何在 anaconda-navigator 调用时更改 jupyter 拾取的内核吗?我通过import sys print(sys.executable)找到了使用的内核
    • 不幸的是我对 anaconda-navigator 不熟悉(在这里第一次听说)。将其作为一个单独的问题提出可能是个好主意。我很确定一定有人遇到过同样的问题。
    • 再次感谢您。我必须使用python3 -m ipykernel install --user 在所需的环境中安装内核。并在此环境中安装了所需的库(在我的情况下为枕头)。这行得通。
    • 这是正确答案。只需确保 ipykernel 已安装在 virtualenv 中即可。
    • 在 Windows 上我只得到一个值jupyter kernelspec list。这个kernel.json 不应该因环境而异吗?
    【解决方案3】:

    以上答案都没有解决我的问题。在我的 Windows 系统中,我尝试了这个,它成功了。

    conda create --name {envname}
    conda install ipykernel --name {envname}
    python -m ipykernel install --prefix=C:/anaconda/envs/{envname} --name {envname}
    activate envname
    pip install jupyter
    

    检查笔记本后记中的 sys.executable 以确保输出中提到了您的前缀。

    【讨论】:

      【解决方案4】:

      我的系统是 Mac。我遇到了同样的问题。

      我使用我的 anaconda python 安装了软件包,但我的 jupyter notebook 没有使用它并且无法导入模块。我通过以下步骤解决了这个问题:

      Step1:检查你安装包的实际python路径

      我运行which python,它显示了我用来安装包的默认python:

      ➜  ~ which python
      /Users/my_name/opt/anaconda3/bin/python
      

      Step2:将jupyter内核的python路径改为上述路径

      我运行 jupyter kernelspec list,它显示了我的 jupyter notebook 可以使用的 2 个内核:

      Available kernels:
        python3    /Users/my_name/Library/Jupyter/kernels/python3
        python2    /usr/local/share/jupyter/kernels/python2
      

      由于我通常在我的jupyter中使用python3,所以我选择编辑第一个内核的配置,运行: vi /Users/my_name/Library/Jupyter/kernels/python3/kernel.json

      将第一个路径替换为"/Users/my_name/opt/anaconda3/bin/python"(如which python 命令所示。)

      {
       "argv": [
        "/Users/my_name/opt/anaconda3/bin/python",
        "-m",
        "ipykernel_launcher",
        "-f",
        "{connection_file}"
       ],
       "display_name": "heterodimers",
       "language": "python"
      }
      

      保存并退出kernel.json 文件。

      之后,我的jupyter notebook就可以导入我在终端安装的包了。

      感谢迈克的回答,因为我基本上是按照他的解决方案找到我的。不同的是我没有使用conda环境。

      【讨论】:

        【解决方案5】:
        1. 打开一个新的终端窗口,看看是否有帮助。如果没有,请继续执行 2。

        2. 从终端启动标准 Python 会话并输入:

          >>> import sys
          >>> sys.executable
          
        3. 在笔记本上做同样的事情:

          In [1]: import sys
                  sys.executable
          
        4. 比较结果。希望这能让您知道发生了什么。

        【讨论】:

        • 从终端,我得到:'/Users/---/anaconda/bin/python' 从笔记本,我得到:'/usr/bin/python' 你能给我一些建议吗这意味着什么,我现在应该做什么?
        • 试试/Users/---/anaconda/bin/python/jupyter notebook
        • 这会在相同的根环境中启动 jupyter notebook,但会导致类似的分歧 sys.path。
        • 对不起,请使用:/Users/---/anaconda/bin/jupyter notebook
        • 再试一次:hash -r
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 2019-06-04
        • 1970-01-01
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        相关资源
        最近更新 更多