如何导入模块python

2024-06-20 12:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习如何从目录中导入库,我偶然发现了一个我似乎无法理解的错误。我在一个名为lib的文件夹中使用imdbpython库。下面,我导入的模块不再返回任何错误,但是当我移到第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测试文件位于两个目录之上。不知道如何在不将所有内容都放在同一目录下的情况下工作。在

^{pr2}$

Tags: 模块inpyimport目录文件夹lib错误
2条回答

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

请检查以下内容以获得更好的示例:Python 3 modules

你可以写下:

from lib.imdb import IMDb

ia = IMDb()

或者:

^{pr2}$

但是导入IMDb然后调用imdb.IMDb()是行不通的。在

还有一点要提:如果你的测试库.py位于libfoder之上,然后您需要在lib中添加一个__init__.py文件,以便导入工作。文件可以完全为空。在


更新:此包使用的import语句不是相对于包文件夹的,而是相对于sys.path中的任意文件夹的。这正是导致错误的一条直线:

# imdb.__init__.py
imdb._logging

只有当包位于sys.path的一部分的文件夹中时,此方法才有效,因此要么位于执行from imdb import IMDb语句的脚本相同的路径中,要么位于python dist包路径中(简化解释)。这种和所有同等的进口商品可以用

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

相关问题 更多 >