我对python比较新,所以请原谅我,如果这是根本的话。
我有一个目录,其中包含我的主应用程序代码,位于文件app.py
中。然后我有一个子目录模型,其中包含所需的__init__.py
文件和backend.py
app.py
import model.backend
时{p>} ImportError: no module named model.backend
但是,如果在app.py
所在的同一目录中,我将放入python shell并输入import model.backend
它就可以了。为什么?为什么我可以在shell中导入它而不是在我的应用程序中导入它?
编辑: 我的目录结构类似于
src/
`- myapp
+- __init__.py
+- app.py
`- model/
+- __init__.py
`- backend.py
由于
答案 0 :(得分:1)
src/
`- myapp
+- __init__.py
+- app.py
`- model/
+- __init__.py
`- backend.py
特别是,检查两个地方是否有__init__.py
。
如果是,则PYTHONPATH=..../src
(用正确的路径替换....
)和
from myapp.model import backend
应该可以正常工作。
交互式shell工作的原因是当前目录自动添加到PYTHONPATH。
[编辑:将Model
更改为model
]
> tree myapp/
myapp/
├── app.py
├── __init__.py
├── __init__.pyc
└── model
├── backend.py
├── backend.pyc
├── __init__.py
└── __init__.pyc
1 directory, 7 files
> cat myapp/app.py
from myapp.model import backend
> cat myapp/model/backend.py
print "importing backend"
> PYTHONPATH=. python -m myapp.app
importing backend
> python -m myapp.app
importing backend
(你甚至不需要上面的PYTHONPATH,因为你已经在恰当的水平上运行了。)
答案 1 :(得分:1)
在myapp/__init__.py
中,您可以添加:
import sys
sys.path.insert(1, '.')