是的,我知道这是一个经常出现的问题,但我仍然找不到令人信服的答案。我甚至在https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html阅读但无法找到如何解决问题:
我正在运行包含jupyter(ipython)笔记本的python 3.6项目。我希望笔记本能够导入一个自定义的本地helpers.py
包,我稍后可能会在其他来源中使用它。
项目结构类似于:
my_project/
│
├── my_project/
│ ├── notebooks/
│ └── a_notebook.ipynb
│ ├── __init__.py # suppose to make package `my_project` importable
│ └── helpers.py
│
├── tests/
│ └── helpers_tests.py
│
├── .gitignore
├── LICENSE
├── README.md
├── requirements.txt
└── setup.py
在笔记本中导入helpers
时出现错误:
----> 4 import helpers
ModuleNotFoundError: No module named 'helpers'
我也尝试了from my_project import helpers
,我得到了同样的错误ModuleNotFoundError: No module named 'my_project'
我终于(暂时)使用了通常的技巧:
import sys
sys.path.append('..')
import helpers
但它看起来很糟糕,我仍在寻找更好的解决方案
人们可以通过sys.path
告诉python在哪里寻找模块。我有这样的项目结构:
project/
│
├── src/
│ └── my_module/
│ ├── __init__.py
│ └── helpers.py
├── notebooks/
│ └── a_notebook.ipynb
...
我能够像这样加载模块:
import sys
sys.path.append('../src/')
from my_module import helpers
应该能够从任何地方加载模块。
如果将notebooks
目录移出一个级别,然后从包中显式导入模块,则应执行此操作。所以你的目录看起来像这样:
my_project/
│
├── my_project/
│ ├── __init__.py
│ └── helpers.py
├── notebooks/
│ └── a_notebook.ipynb
...
然后你在笔记本中的import语句将是:
from my_project import helpers
。
我认为你需要在__init__.py
目录中使用notebooks/
模块。我之前没有真正使用过Jupyter笔记本,所以我可能错了。您可能还需要尝试将import语句更改为:
import .. helpers
指示import语句是针对位于Jupyter笔记本的父目录中的本地程序包。
请尝试以下行:
from my_project.helpers import what_you_need
这条线也应该有效:
import my_project.helpers