Python 3:与脚本在同一目录中的模块:" ImportError:没有名为&#34的模块;

时间:2014-12-08 19:20:18

标签: python python-3.x

我试图从IPython shell导入模块(venues)。 venues模块已正确导入,但它会尝试自行导入名为makesoup的模块,但无法执行此操作。

我位于~目录中,正在尝试导入位于子目录venues.py中的processors文件。 makesoup.py文件也位于processors子目录中,这意味着它附近的任何Python脚本应该能够找到它,对吗?

In [1]: import processors.venues
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-765135ed9288> in <module>()
----> 1 import processors.venues

~/processors/venues.py in <module>()
      7 """
      8 
----> 9 import makesoup
     10 import re
     11 

ImportError: No module named 'makesoup'

我在 __init__.py~目录中添加了空processors,但未成功。

注意:{I}位于makesoup时,processors模块已正确导入,但我知道这不是它应该工作的唯一方式。

2 个答案:

答案 0 :(得分:30)

  

makesoup.py文件也位于processors子目录中,这意味着它附近的任何Python脚本都应该可以找到它,对吗?

没有。此功能was changed in Python 3和该语法不再有效。

import makesoup更改为此:

from . import makesoup

或者对此:

from processors import makesoup

这两种情况都会导致无法直接运行python processors/venues.py,但您仍然可以从主目录中执行python -m processors.venues

答案 1 :(得分:1)

有时候,这不起作用:

from . import xxx

也许有人会告诉您在目录下添加 init .py。它也不适用于某些特殊情况。

最有用的方法是首先使用以下命令检查sys.path:

import sys
print(sys.path)

然后,您可以找到应该从哪里导入。

还有另一种方式:

import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname("__file__"), '..')))

或改用插入函数:

sys.path.insert(0, xxx)

这两种方式适用于小型项目。如果您的项目既复杂又庞大,我建议您选择第一个。