如何导入模块python

时间:2018-01-14 22:40:36

标签: python python-3.x imdbpy

我正在学习如何从目录中导入库,我偶然发现了一个我似乎无法弄清楚的错误。我在名为lib的文件夹中使用IMDBpy python库。下面,我导入的模块不再返回任何错误,但当我移动到第6行时,我收到以下错误:

Traceback (most recent call last):
  File "testlib.py", line 4, in <module>
    from lib.imdb import IMDb
  File "/home/user/Scripts/test/lib/imdb/__init__.py", line 49, in <module>
    import imdb._logging
ImportError: No module named 'imdb'

Python正在抛出错误,因为我正在编写的python测试文件是2个目录。不知道如何在不将所有内容放在同一目录中的情况下使其正常工作。

#!/usr/bin/env python3

from lib.imdb import IMDb

# Create the object that will be used to access the IMDb's database.
ia = imdb.IMDb() # by default access the web.

2 个答案:

答案 0 :(得分:3)

你可以写:

from lib.imdb import IMDb

ia = IMDb()

或:

from lib import imdb

ia = imdb.IMDb()

但导入IMDb然后调用imdb.IMDb()不起作用。

还有一点需要提及:如果您的 testlib.py 位于lib foder之上,那么您需要在__init__.py中添加lib个文件你的导入工作。该文件可以完全为空。

更新:此软件包使用与软件包文件夹无关的import语句,但使用sys.path中的任意文件夹。举例说明导致错误的确切行:

# imdb.__init__.py
imdb._logging

仅当包位于sys.path的一部分文件夹中时才有效,因此要么与执行from imdb import IMDb语句的脚本位于同一路径中,要么位于python dist-package路径中(简化说明)。这个和所有等价的进口可以用

代替
# imdb.__init__.py
from . import _logging

在这种情况下,导入是相对于模块的,因此imdbpy包不需要驻留在sys.path的目录中。

我们现在的结果是我们不能简单地将imdb放在子文件夹中,我们需要将它放在sys.path的文件夹中,或者将它所在的文件夹添加到sys.path。所以,选项是:

  • 安装包
  • 将imdb文件夹移至当前文件夹
  • 写:

    import sys
    sys.path.insert(0, 'absolute/path/to/lib')
    

    在import语句之前。

在上述任何一种情况下,您都可以:

from imdb import IMDb
ia = IMDb()

答案 1 :(得分:-1)

如上所述,导入函数导入对象是不同的。 导入imdb等模块时,可以使用其功能。但是,导入函数时,只能使用该函数,而不能使用它来自的对象/模块。

选中此示例以获取更好的示例:Python 3 modules