ImportError: How do I import a python module?

ImportError: How do I import a python module?

我尝试导入 Python 模块但失败了。这是我的文件夹层次结构:

package/
  folder/
    a.py
  utils/
    b.py

在模块 a.py 中,我尝试导入 b.py 但收到 ImportError.

如何使用模块 ba.py 中的函数 test

文件:

a.py

def usetest():
    test()

b.py

def test():
    print("hello world")

可以使用几种不同的语法导入 Python 模块:

  • 一个简单的 import ... 语句:import package.utils.b 现在可以让您使用 package.utils.b.test()。不幸的是它很长。
  • import ... as ... 语句:import package.utils.b as b 将让您使用 b.test()
  • 一个from ... import ...语句:from package.utils.b import test会让你使用test()
  • 一个from ... import ... as ...语句:from package.utils.b import test as test_me会让你使用test_me()

所有这些选项都将 运行 具有完全相同的功能。尝试将它们放在 a.py.

的顶部

指定整个路径,package.utils.b称为绝对形式。也可以相对形式导入:

  • import ..utils.b as b 会让你使用 b.test()。注意开头的 2 个点,表示 上一个文件夹
  • from ..utils.b import test 会让你使用 test().
  • from ..utils.b import test as test_me 会让你使用 test_me().

开头的每个点指定上一个文件夹,除了一个,上面写着“这个文件夹”。

如果您尝试 运行 的主文件在包内 (a.py),您应该切换到包含包的目录,并且 运行 文件使用 -m。在您的情况下,切换到包含 package 和 运行 python -m package.folder.a.

的目录

有关导入模块的详细信息,请参阅 Python Docs

您还可以使用完整路径动态导入 Python 模块。它更高级,不会在此答案中涵盖。

package/ 
  folder/
    a.py
  utils/
    b.py

进口:

如果包是您的主文件夹,则使用以下语法导入模块。

import utils.b as b
b.test() 
**or** 
from utils import b
**or**
To import only method
from utils.b import test
**or**
with alias name
from utils.b import test as my_test (my_test is the method alias name)

导入:

import folder.b as b b.test() or from folder.b import test or with alias name from folder.b import test as my_test (my_test is the alias name)

如果您尝试 运行 的主文件在包内 (a.py),您应该切换到包含包的目录,并且 运行 文件使用 -m