[英]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
。 因此,选项为:
写:
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.