在不同的上下文中导入模块
import module in different contexts
我有这样的文件结构:
work/
├─ analysis.ipynb
├─ app/
│ ├─ __init__.py
│ ├─ class_a.py
│ ├─ script.py
│ ├─ utils.py
文件 class_a.py
包含 class MyClass
以及从 utils
导入的内容,如下所示:
from utils import useful_function
class MyClass():
...
然后我尝试像这样在 analysis.ipynb
中导入 MyClass
:
from app.class_a import MyClass
并得到一个错误:
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-4-8eeb8559d767> in <module>
2 import os
3 from datetime import datetime
----> 4 from app.class_a import MyClass
5 from app.utils import useful_function
6 ...
~/Documents/work/app/class_a.py in <module>
1 import pandas as pd
----> 2 from utils import useful_function
3
4 class MyClass():
5 '''indeed very necessary class for me
ModuleNotFoundError: No module named 'utils'
我发现如果我将 app
文件夹中的所有导入更改为如下内容:
from app.utils import useful_function
然后我可以从analysis.ipynb
导入我需要的所有东西
但是 app
应该像我 运行 和 python script.py
一样工作,除非以原始方式编写导入,否则这不起作用。
我不了解模块和包装,所以甚至不能准确地问一个问题,但是我如何对齐导入“样式”以便能够 运行 python scripts.py
从app
目录并从 analys.ipynb
?
导入 MyClass
import
语句搜索 sys.path
中的路径列表,所以我将这些行添加到我的 analysis.ipynb
:
import sys
sys.path.append('/path/to/work/app/')
以防有人和我有同样的疑问和挣扎。
我有这样的文件结构:
work/
├─ analysis.ipynb
├─ app/
│ ├─ __init__.py
│ ├─ class_a.py
│ ├─ script.py
│ ├─ utils.py
文件 class_a.py
包含 class MyClass
以及从 utils
导入的内容,如下所示:
from utils import useful_function
class MyClass():
...
然后我尝试像这样在 analysis.ipynb
中导入 MyClass
:
from app.class_a import MyClass
并得到一个错误:
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-4-8eeb8559d767> in <module>
2 import os
3 from datetime import datetime
----> 4 from app.class_a import MyClass
5 from app.utils import useful_function
6 ...
~/Documents/work/app/class_a.py in <module>
1 import pandas as pd
----> 2 from utils import useful_function
3
4 class MyClass():
5 '''indeed very necessary class for me
ModuleNotFoundError: No module named 'utils'
我发现如果我将 app
文件夹中的所有导入更改为如下内容:
from app.utils import useful_function
然后我可以从analysis.ipynb
但是 app
应该像我 运行 和 python script.py
一样工作,除非以原始方式编写导入,否则这不起作用。
我不了解模块和包装,所以甚至不能准确地问一个问题,但是我如何对齐导入“样式”以便能够 运行 python scripts.py
从app
目录并从 analys.ipynb
?
MyClass
import
语句搜索 sys.path
中的路径列表,所以我将这些行添加到我的 analysis.ipynb
:
import sys
sys.path.append('/path/to/work/app/')
以防有人和我有同样的疑问和挣扎。