sys.path 和 sys.executable 在 jupyter 中不正确,但没有应用的修复工作

如何解决sys.path 和 sys.executable 在 jupyter 中不正确,但没有应用的修复工作

我已将 jupyter 配置为在远程计算机上使用,并在初始 anaconda 设置时为其设置密码。然后在修复 this issue 后,我被困在另一个sys.pathsys.executablejupyter不正确,但在 python正确强>ipython。请参阅下面的详细信息。 /opt/anaconda3 中的所有用户都安装了 Anaconda3,我的程序使用环境 zud

背景

上述问题解决后,我尝试在 jupyterimport 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 notebook/lab 中检查了 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/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.executableJupyter Notebook/Lab 中不同,但在 Pythonipython 中是正确的。

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

尝试过的补救措施

补救措施 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 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','/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 notebook/lab 并且它适用于环境 zud,但我注意到对于 base 环境它导入了 igraph,它甚至没有安装在base。我从他们那里检查了以下值,which jupyterbase

是正确的
[1]: !which jupyter
[1]: /opt/anaconda3/bin/jupyter

但它从 sys.path 获取 sys.executablezud,这意味着每个人都将被迫使用 zud 环境。

[2]: sys.path
[2]:
['/home/zuddler/python scripts','/home/zuddler/.ipython']
[3]: sys.executable
[3]: '/home/zuddler/.conda/envs/zud/bin/python'

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

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

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

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

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

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

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

解决方法

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

创建并进入虚拟环境后,您可能做了类似的事情

pip install ipykernel

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

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

它应该看起来像这样:

{
 "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 才能使更改生效。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?