首页 > 解决方案 > sys.path 和 sys.executable 在 jupyter 中不正确,但没有应用的修复程序有效

问题描述

我已将 jupyter 配置为从远程计算机使用,并在初始 anaconda 设置时为其设置密码。然后在解决这个问题之后,我被困在另一个问题中。sys.path并且在jupytersys.executable中不正确,但在pythonipython中正确。请参阅下面的详细信息。Anaconda3 已为所有用户安装,我正在为我的程序使用环境。/opt/anaconda3zud

背景

解决上述问题后,我尝试import igraphjupyter中尝试,但结果ModuleNotFoundError如下:

import igraph
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-73ffca960e68> in <module>
----> 1 import igraph

ModuleNotFoundError: No module named 'igraph'

然后很快我使用我的环境检查了以下详细信息zud,这是正确的。

(zud) zuddler@silp252-dl360:~$ which python
/home/zuddler/.conda/envs/zud/bin/python
(zud) zuddler@silp252-dl360:~$ which ipython
/home/zuddler/.conda/envs/zud/bin/ipython
(zud) zuddler@silp252-dl360:~$ which jupyter
/home/zuddler/.conda/envs/zud/bin/jupyter
(zud) zuddler@silp252-dl360:~$ which conda
/opt/anaconda3/bin/conda

(zud) zuddler@silp252-dl360:~$ conda env list
# conda environments:
#
zud                   *  /home/zuddler/.conda/envs/zud
base                     /opt/anaconda3

然后我检查了pythonipythonsys.path和jupyter notebook / labsys.executable

在 Python 中:

>>> import sys
>>> sys.path
['', '/home/zuddler/.conda/envs/zud/lib/python39.zip', '/home/zuddler/.conda/envs/zud/lib/python3.9', '/home/zuddler/.conda/envs/zud/lib/python3.9/lib-dynload', '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages']
>>> sys.executable
'/home/zuddler/.conda/envs/zud/bin/python'

在 ipython 中:

**In [1]: import sys

In [2]: sys.path
Out[2]:
['/home/zuddler/.conda/envs/zud/bin',
 '/home/zuddler/.conda/envs/zud/lib/python39.zip',
 '/home/zuddler/.conda/envs/zud/lib/python3.9',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/lib-dynload',
 '',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages/IPython/extensions',
 '/home/zuddler/.ipython']

In [3]: sys.executable
Out[3]: '/home/zuddler/.conda/envs/zud/bin/python'**

在 Jupyter 笔记本/实验室中:

[1]: import sys
[2]: sys.path
[2]:
['/home/zuddler/python scripts',
 '/opt/anaconda3/lib/python38.zip',
 '/opt/anaconda3/lib/python3.8',
 '/opt/anaconda3/lib/python3.8/lib-dynload',
 '',
 '/opt/anaconda3/lib/python3.8/site-packages',
 '/opt/anaconda3/lib/python3.8/site-packages/IPython/extensions',
 '/home/zuddler/.ipython']
[3]: sys.executable
[3]: '/opt/anaconda3/bin/python'

sys.path并且sys.executableJupyter Notebook/Lab中有所不同,但在Pythonipython中是正确的。

另外,为了确认当前的 jupyter 是否正在运行,我!which jupyter在 jupyter notebook 中运行并收到/home/zuddler/.conda/envs/zud/bin/jupyter确认正确的 jupyter notebook 正在运行。

尝试过的补救措施

补救措施 1:我尝试了此处此处提到的修复,并在/home/zuddler/.ipython/profile_default/ipython_config.py文件中添加了以下行

c.InteractiveShellApp.exec_lines = [
  'import sys; sys.path.append("/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages")'
]

然后重新启动 jupyter notebook 并尝试再次导入 igraph 并略有不同 ModuleNotFoundError

import igraph
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-73ffca960e68> in <module>
----> 1 import igraph

~/.conda/envs/zud/lib/python3.9/site-packages/igraph/__init__.py in <module>
     32 # pylint: disable-msg=W0401
     33 # W0401: wildcard import
---> 34 from igraph._igraph import *
     35 from igraph.clustering import *
     36 from igraph.cut import *

ModuleNotFoundError: No module named 'igraph._igraph'

我迅速检查sys.pathsys.executable

[1]: sys.path
[1]:
['/home/zuddler/python scripts',
 '/opt/anaconda3/lib/python38.zip',
 '/opt/anaconda3/lib/python3.8',
 '/opt/anaconda3/lib/python3.8/lib-dynload',
 '',
 '/opt/anaconda3/lib/python3.8/site-packages',
 '/opt/anaconda3/lib/python3.8/site-packages/IPython/extensions',
 '/home/zuddler/.ipython',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages']
[2]: sys.executable
[2]: '/opt/anaconda3/bin/python'

这似乎是一个死胡同,所以我回滚了这个修复。

补救措施 2:我尝试了这篇文章中给出的修复,并在 kernel.json 中替换了正确的可执行路径

列出的内核是:

(zud) zuddler@silp252-dl360:~$ jupyter kernelspec list
Available kernels:
  python3    /opt/anaconda3/share/jupyter/kernels/python3

我做了以下更改/opt/anaconda3/share/jupyter/kernels/python3/kernel.json

{
"argv": [
"/opt/anaconda3/bin/python","/home/zuddler/.conda/envs/zud/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}

之后,我重新启动了 jupyter notebook/lab 并且它适用于 environment zud,但我注意到base它导入的环境igraph甚至没有安装在base. 我从他们那里检查了以下值,which jupyter对于base

[1]: !which jupyter
[1]: /opt/anaconda3/bin/jupyter

但它正在回升sys.path,这意味着每个sys.executablezud都将被迫使用zud环境。

[2]: sys.path
[2]:
['/home/zuddler/python scripts',
 '/home/zuddler/.conda/envs/zud/lib/python39.zip',
 '/home/zuddler/.conda/envs/zud/lib/python3.9',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/lib-dynload',
 '',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages',
 '/home/zuddler/.conda/envs/zud/lib/python3.9/site-packages/IPython/extensions',
 '/home/zuddler/.ipython']
[3]: sys.executable
[3]: '/home/zuddler/.conda/envs/zud/bin/python'

这又是一个死胡同,所以我回滚了这个修复。

补救措施 3:应用这篇文章中的以下步骤也没有解决问题,并且给出了错误sys.pathsys.executable

  1. 从系统中删除 IPython 和 Jupyter
  2. rm -rf ~/.local/share/ipython
  3. 重新安装 IPython 和 Jupyter

补救措施 4:我尝试按照这篇文章~/.conda/envs/zud/bin/jupyter lab --no-browser中的建议打开,但它也给出了错误的 and 。sys.pathsys.executable

其他补救措施:我读了这个,但没有找到解决方案。

PS:我注意到这篇文章也提到了我的一个相关问题,但没有得到解决。

我将对此进行更多研究,以期找到解决方案,如果您能提供解决方案,我将不胜感激。

标签: pythonjupyter-notebookipythonjupytersys

解决方案


我也有这个问题很长一段时间了。这是我解决它的方法。

创建并进入虚拟环境后,您可能会执行类似的操作

pip install ipykernel

ipython kernel install --user --name=myenv为了使其在 jupyter lab/notebook 中可见。

这个 ipykernel 映射文件位于/home/user/.local/share/jupyter/kernels/myenv/kernel.json

它应该看起来像这样:

{
 "argv": [
  "/usr/bin/python3",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "language": "python",
 "display_name": "myenv"
}

这里的问题是虚拟环境 python 出于某种原因映射到系统 python。您想更改 python 指针以指向您的虚拟环境 python,它类似于/home/user/.virtualenvs/myenv/bin/python3.

TL;博士:

cat /home/user/.local/share/jupyter/kernels/myenv/kernel.json

如果其中有/usr/bin/python3,请将其更改为/home/user/.virtualenvs/myenv/bin/python3

您可能需要重新启动 Jupyter Lab/Notebook 才能使更改生效。

我不完全理解为什么有时会发生有时不会,但希望此修复程序也能对您有所帮助。


推荐阅读