使用PyCharm在Jupyter笔记本中导入自定义模块的问题

时间:2016-05-01 06:16:29

标签: import ipython pycharm jupyter-notebook

我尝试使用PyCharm(2016.1)在Jupyter笔记本中导入自定义模块。但是,我总是得到" ImportError:没有名为xxx"的模块。导入像NumPy或Matplotlib这样的包可以正常工作。自定义模块和笔记本位于同一目录中,我尝试将目录设置为源根目录。我怎样才能解决这个问题?非常感谢!

2 个答案:

答案 0 :(得分:2)

如果您在笔记本中运行以下内容...

import sys
sys.path

...并且您看不到包含软件包/模块的目录的路径,围绕它有几种方法。我无法推测为什么在此示例中可能会发生这种情况。在OS X与托管Linux服务上从PyCharm在本地运行Jupyter时,我发现sys.path的结果存在一些差异。

一个容易解决的变通办法是在笔记本中设置sys路径,以反映软件包/模块的根目录。例如,如果您的笔记本位于包或模块所在的子目录中,并且sys.path仅反映该子目录:

import sys
sys.path.append("../")

重点是sys.path必须包含软件包和模块所根目录,因此您添加的路径将取决于情况。

如果使用virtualenv作为项目解释器,也许更合适的解决方案是为项目创建setup.py并使用pip将项目安装为可编辑包。例如。 pip install -e .然后,只要Jupyter从该virtualenv运行,导入就不会有任何问题。

我在OS X上遇到的一个丑陋陷阱是Jupyter在启动时引用了错误的virtualenv。通过检查sys.path的结果,这也应该显而易见。我真的不知道我是如何无意管理此设置的,但是我认为这是由于我第一次让Jupyter在PyCharm工作而引起的困扰。与其使用本地虚拟环境启动Jupyter,不如使用~/Library/Jupyter/kernels/.python/kernel.json中定义的环境运行。我可以通过清除该目录来清除它,例如rm -r ~/Library/Jupyter/kernels/.python

答案 1 :(得分:0)

正如Thomas在评论中所述,请确保您的笔记本服务路径和项目路径相同。当你在pycharm中启动你的笔记本时,你应该得到这样的东西:

Serving notebooks from local directory: <path to your project root folder>