python模块导入困难

时间:2013-11-19 15:41:05

标签: python python-2.7 import module importerror

我对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

由于

2 个答案:

答案 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]

你在某个地方犯了错误。再检查一切。我上面描述的工作原理(pyc文件是由python生成的 - 忽略它们):

> 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, '.')