我下面有一个项目。
project/
├ main/
├ modules/
├ moduleA.py
├ test/
├ testA.py
├ modules/
├ moduleC.py
我编写了下面的moduleA.py
和moduleC.py
程序。
# moduleA.py
def funcA():
print("A")
# moduleC.py
def funcC():
print("C")
在我想在testA.py
中用moduleC.funcC()
测试moduleA.funcA()
的情况下,我担心将moduleC.funcC()
导入testA.py
的代码。
import inspect
import os
import sys
PYPATH = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/"
sys.path.append(PYPATH + "./../")
from main.modules.moduleA import funcA # This is OK.
# from test.modules.moduleC import funcC # ModuleNotFoundError
from modules.moduleC import funcC # This is OK.
if __name__ == "__main__":
funcA()
funcC()
我想用from test.modules.moduleC import funcC
将funcC()
导入到testA.py
。
你认为这可行吗?
因为python已经有一个名为test的模块,并且在python的测试中没有模块。因此,将test目录重命名为其他目录即可。或更改系统路径的默认顺序
是的,它是完全可行的。Python定义了两种类型的包,常规包和命名空间包。常规包是Python 3.2及更早版本中存在的传统包。常规包通常实现为包含">init.py"文件的目录。导入常规包时,会隐式执行此">init.py"文件,并且它定义的对象绑定到包命名空间中的名称。'init.py'文件可以包含与任何其他模块相同的Python代码,并且Python在导入模块时会向模块添加一些附加属性。