我正在学习如何从目录中导入库,我偶然发现了一个我似乎无法弄清楚的错误。我在名为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.
答案 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
。所以,选项是:
写:
import sys
sys.path.insert(0, 'absolute/path/to/lib')
在import语句之前。
在上述任何一种情况下,您都可以:
from imdb import IMDb
ia = IMDb()
答案 1 :(得分:-1)
如上所述,导入函数导入对象是不同的。
导入imdb
等模块时,可以使用其功能。但是,导入函数时,只能使用该函数,而不能使用它来自的对象/模块。
选中此示例以获取更好的示例:Python 3 modules