在 Jupyter Notebook 中无法导入模块;sys.path 错误

25

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

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

'/usr/bin/python'

然而,从命令行执行它时,返回的结果为:

'//anaconda/bin/python'

我已经尝试卸载和重新安装Anaconda,但问题仍存在。

我还尝试在bash_profile中增加$PYTHONPATH以包括//anaconda/bin/python,但这并没有解决问题。

有没有办法永久地更改Jupyter Notebook中的sys.path,而不仅仅是使用sys.path.append(...)?


sys.executable和sys.path是两个不同的东西。https://docs.python.org/2/library/sys.html - caoanan
@runawaykid,你想接受任何一个答案吗? - user3521099
6个回答

14

我也遇到了同样的问题。在尝试了很多其他地方找到的解决方案后,我终于想出了一个在我的情况下至少能够工作的解决方案。

步骤1:检查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)找到了使用的内核。 - emeralddove
很遗憾,我不熟悉anaconda-navigator(第一次在这里听说)。也许把这个问题作为一个单独的问题来问会是个好主意。我相信肯定有人遇到过同样的问题。 - user3521099
1
再次感谢。我必须在所需的环境中使用python3 -m ipykernel install --user安装内核。并在此环境中安装所需的库(在我的情况下是pillow)。这起作用了。 - emeralddove
1
这是正确的答案。只需确保在虚拟环境中安装了ipykernel即可。 - Shivam Sinha
在Windows上,我只得到一个值“jupyter kernelspec list”。这个“kernel.json”难道不应该针对每个环境有所不同吗? - quest

9
  1. Open a new terminal window and see if this helps. If not, proceed with 2.

  2. Start a standard Python session from the terminal and type this:

    >>> import sys
    >>> sys.executable
    
  3. Do the same in the notebook:

    In [1]: import sys
            sys.executable
    
  4. Compare the results. Hopefully, this gives you a clue what is going on.


2
从终端中,我得到了:'/Users/---/anaconda/bin/python' 从笔记本中,我得到了:'/usr/bin/python'您能给我一些建议,说明这意味着什么,以及我现在应该怎么做吗? - runawaykid
1
尝试使用/Users/---/anaconda/bin/python/jupyter notebook - Mike Müller
1
这将在相同的根环境中启动Jupyter笔记本,但会导致类似的不同sys.path。 - runawaykid
抱歉,请使用:/Users/---/anaconda/bin/jupyter notebook - Mike Müller
再试一次:hash -r - Mike Müller
显示剩余2条评论

4

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

我使用anaconda python安装了一些包,但是我的jupyter笔记本没有使用它们,也无法导入这些模块。我通过以下步骤解决了这个问题:

步骤1:检查你用来安装包的实际python路径

我执行了命令which python,它显示了我用来安装包的默认python路径:

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

步骤2:更改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可以导入我在终端中安装的包。

感谢Mike的回答,因为我基本上按照他的解决方案找到了我的解决方法。 不同之处在于我没有使用conda环境。


1

以上答案均未解决我的问题。在我的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,以确保你的前缀在输出中提到。


0

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

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中的那个指向正确的位置,所有功能正常。


0

win11,miniconda3,virtualenv 名称“sitk”

只需运行:

conda activate sitk
conda install ipykernel
python -m ipykernel install --user --name sitk

解决在Jupyter Lab中导入SimpleITK时出现的错误问题

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接