繁体   English   中英

如何导入模块python

[英]how to Importing modules python

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

您可以写:

from lib.imdb import IMDb

ia = IMDb()

要么:

from lib import imdb

ia = imdb.IMDb()

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

需要提及的另一点:如果您的testlib.py位于lib foder之上,则需要在lib添加一个__init__.py文件,以使导入工作正常。 该文件可以完全为空。


更新 :此软件包使用的import语句与软件包文件夹无关,但与sys.path的任意文件夹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') 

    在导入语句之前。

在上述任何情况下,您都可以执行以下操作:

from imdb import IMDb
ia = IMDb()

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

检查此示例以获得更好的示例: Python 3模块

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM