1

我正在学习如何从目录中导入库,但我偶然发现了一个我似乎无法弄清楚的错误。我在名为 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.
4

2 回答 2

3

你可以写:

from lib.imdb import IMDb

ia = IMDb()

或者:

from lib import imdb

ia = imdb.IMDb()

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

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


更新:此包使用与包文件夹无关的导入语句,而是与sys.path. 一个说明是导致错误的确切行:

# imdb.__init__.py
imdb._logging

sys.path这仅适用于包驻留在属于from imdb import IMDb. 这个和所有等效的进口可以被替换为

# 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')
    

    在导入语句之前。

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

from imdb import IMDb
ia = IMDb()
于 2018-01-14T22:51:25.817 回答
-1

如上所述,导入对象与导入函数是不同的。当您导入一个模块时,imdb您可能会使用它的功能。但是,当您导入一个函数时,您只能使用该函数,而不是它来自的对象/模块。

检查这个以获得更好的例子:Python 3 modules

于 2018-01-14T23:14:26.983 回答