如何导入模块 python
how to Importing modules python
我正在学习如何从目录中导入库,但我偶然发现了一个我似乎无法弄清楚的错误。我在名为 lib 的文件夹中使用 IMDBpy python 库。下面,我正在导入不再 returns 任何错误的模块,但是当我移动到第 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
文件夹之上,那么您需要添加一个 __init__.py
文件在 lib
内,以便您的导入工作。该文件可以完全为空。
更新:这个包使用的导入语句不是相对于包文件夹,而是相对于 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
之类的模块时,您可以使用它的功能。但是,当您导入一个函数时,您只能使用该函数,而不能使用它来自的object/module。
检查这个以获得更好的例子:Python 3 modules
我正在学习如何从目录中导入库,但我偶然发现了一个我似乎无法弄清楚的错误。我在名为 lib 的文件夹中使用 IMDBpy python 库。下面,我正在导入不再 returns 任何错误的模块,但是当我移动到第 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
文件夹之上,那么您需要添加一个 __init__.py
文件在 lib
内,以便您的导入工作。该文件可以完全为空。
更新:这个包使用的导入语句不是相对于包文件夹,而是相对于 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
之类的模块时,您可以使用它的功能。但是,当您导入一个函数时,您只能使用该函数,而不能使用它来自的object/module。
检查这个以获得更好的例子:Python 3 modules