我正在尝试使用PyCharm(2016.1)在Jupyter笔记本中导入自定义模块。但是,我总是得到“ImportError:没有名为xxx的模块”。导入像NumPy或Matplotlib这样的包可以正常工作。自定义模块和笔记本在同一目录中,我试图将目录设置为源根目录。我怎样才能解决这个问题?非常感谢!
如果您在笔记本中运行以下内容...
import sys
sys.path
...并且您没有看到包含包/模块的目录的路径,有几种方法可以解决它。我不能推测为什么在这个例子中会发生这种情况。我在OS X上从PyCharm本地运行Jupyter而不是在托管Linux服务上看到sys.path
的结果存在一些差异。
一个简单的hacky解决方法是在笔记本中设置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
。
正如Thomas在评论中所述,请确保您的笔记本服务路径和项目路径相同。当你在pycharm中启动你的笔记本时,你应该得到这样的东西:
Serving notebooks from local directory: <path to your project root folder>