jupyter中的sys.path和sys.executable不正确,但应用的修复程序无效

2024-06-02 04:51:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我已将jupyter配置为从远程计算机使用,并在初始anaconda设置时为其设置密码。然后在修复this issue之后,我被另一个陷阱困住了sys.path和{}在jupyter不正确,但在pythonipython正确。请参阅下面的详细信息。Anaconda3是为/opt/anaconda3中的所有用户安装的,我正在为我的程序使用一个zud环境

背景

一旦上述问题得到解决,我试图在jupyter中import igraph,但它给出了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

然后我在pythonipythonjupyter笔记本/实验室中检查了sys.pathsys.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.pathsys.executable在Jupyter笔记本/实验室中不同,但在Python和ipython中是正确的

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

试过的补救办法

补救措施1:我尝试了herehere提到的修复方法,并在/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笔记本并尝试再次导入igraph,得到的结果略有不同

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:我尝试了fix given on this post并在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笔记本/实验室,它在zud环境下工作,但我注意到在base环境中,它导入了igraph,甚至没有安装在base中。我从中检查了以下值,which jupyter对于base是正确的

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

但它从{}中获得了{}和{},这意味着每个人都将被迫使用{}环境

[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:this post应用以下步骤也无法解决问题,并给出了错误的sys.pathsys.executable

  1. Deleting IPython and Jupyter from the system
  2. rm -rf ~/.local/share/ipython
  3. Reinstall IPython and Jupyter

补救措施4:我尝试按照{a6}中的建议打开{},但它也给出了错误的{}和{}

其他补救措施:我读了this,但没有找到解决办法

PS:我注意到this post也提到了与我相关的问题,但没有得到解决

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


Tags: importhomebinlibipythonsyssitejupyter
1条回答
网友
1楼 · 发布于 2024-06-02 04:51:50

我也有这个问题很久了。我是这样解决的

创建并进入虚拟环境后,您可能会执行以下操作

pip install ipykernel

ipython kernel install user name=myenv以使其在jupyter实验室/笔记本中可见

这个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实验室/笔记本,以使更改生效

我不完全理解为什么有时会发生,有时不会,但希望这个修复也能帮助你

相关问题 更多 >