ImportError:如何导入python模块?

时间:2020-09-02 01:04:29

标签: python python-3.x python-import importerror

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

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

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

如何从模块testb使用函数a.py

文件:

a.py

def usetest():
    test()

b.py

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

3 个答案:

答案 0 :(得分:1)

可以使用几种不同的语法来导入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()。请注意开头的两个点,即上一个文件夹
  • 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模块。它更高级,不会在此答案中涵盖。

答案 1 :(得分:0)

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

导入:

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

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)

答案 2 :(得分:0)

导入:

import folder.b as b b.test()from folder.b import test或别名为from folder.b import test as my_test(my_test是别名)

如果您尝试运行的主文件位于软件包(a.py)内,则应切换到包含软件包的目录,然后使用-m

运行该文件。