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