我尝试导入Python模块,但失败了。这是我的文件夹层次结构:
package/
folder/
a.py
utils/
b.py
在模块a.py
中,我尝试导入b.py
,但是收到了ImportError
。
如何从模块test
到b
使用函数a.py
?
文件:
a.py
def usetest():
test()
b.py
def test():
print("hello world")
答案 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