我在 ~/tensorflow 中有一个 virtualenv,我可以在 Pycharm 中设置一个带有 .py 文件的项目来使用该 virtualenv 的 python(通过更改项目解释器)。事情就是这样进行的。但是,我无法在同一项目中获得 Jupyter 笔记本来查看 virtualenv 的包。看起来好像它只是为笔记本使用了不同的 python。
笔记本连接的服务器在同一个 virtualenv 中启动。 Web 客户端也可以在同一个 jupyter 服务器上正常工作。
我的猜测是 Pycharm 与 Jupyter 服务器的连接是使用不同的内核以某种方式建立的,但我不知道为什么或如何更改它。
jupyter Notebook 不使用虚拟环境的 python 发行版,除非您直接在 jupyter 内核上指定它。
事实上,如果您在通过类似
./venv/bin/python -m jupyter notebook
的命令激活venv后运行jupyter笔记本,则只有包含终端命令的笔记本单元(以!
开头的单元)在虚拟环境中运行。
您可以使用可用的 jupyter 内核或制作一个新内核。要查看可用的内核,请使用
jupyter kernelspec list
命令查找其路径。要制作新内核,请在终端中使用 ipython kernel install --user --name=venv
。
那么您应该考虑将内核更改为在虚拟环境中使用的Python分发路径。因此,请使用
jupyter kernelspec list
查找所需内核的路径。在此路径中,您应该看到 kernel.json
文件,其中包含:
{
"argv": [
"/PycharmProjects/myProject/venv/bin/python3",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "venv",
"language": "python",
"metadata": {
"debugger": true
}
}
您应该将此文件中的第一个成员
argv
指定为虚拟环境中使用的python发行版的路径。
要找到虚拟环境中使用的python,首先激活您的venv,然后在终端中提示
which python3
以查看venv中使用的python路径。
配置内核以在 venv 中使用 python 发行版后,您应该运行 jupyter notebook 并从顶部菜单中选择正确的内核。
注意
您可以通过
jupyter kernelspec uninstall venv
删除多余的内核
我的问题是我有多个内核,PyCharm 启动默认内核。一种方法可能是设置 PyCharm 来指定选择启动的内核,我没有研究如何做到这一点。我只是更改了 Jupyter 中的默认内核,这对我有用(我有一个用于张量流的 virtualenv)。
c.MultiKernelManager.default_kernel_name = 'tensorflow'
。
本文告诉您如何做到这一点: https://www.geeksforgeeks.org/using-jupyter-notebook-in-virtual-environment/
本质上,您需要从虚拟环境中创建一个新内核。然后可以从 Jupyter 的内核列表中选择该内核。