对于Python初学者来说,Python Project的结构和模块之间的调用方法难以理解和掌握。这里进行举例测试,在Python中自建模块,并由其他模块进行调用,来分析自建模块的使用方法以及出现的一些问题。

1. 分析Python Project的文件层次结构

这是一个Python Project,其结构如下图所示:

python中lr建模 python怎么建模_python中lr建模

其中每个Python文件被称为一个模块。为了便于管理和使用,可以将同种类型的多个Python模块放入一个包(package)中,每个包(package)下面会自动创建“__init__.py”模块,该模块可以为空,它的存在用于标识其所在的文件夹是一个包(package),而不是普通的文件夹。

2. 创建Python自建模块

这里创建para模块,用于存放程序所用的常量。(图中的para.py文件)

# package01/para.py

PI = 3.1415926

再创建func模块,用于存放程序中需要调用的函数。(图中的func.py文件)

# package01/func.py

def calculate(a,b):
    return a+b

将上述两个文件放入package01包中,以便于其他Python模块对其进行调用。

为了便于观察,在package01包中的__init__.py中写入如下代码:

# package01/__init__.py

print("调用了package01中的模块")

if __name__ == '__main__':
    print("执行了package01/__init__.py")

这里插一句,如果单独运行__init__.py,则得到如下结果:

Out:
调用了package01中的模块
执行了package01/__init__.py

 3. 调用自建模块

为了调用package01中para模块和func模块,分别创建test01和test02两个模块。其中test01.py放在另一个包package02中,而test02.py放在根目录中。

(1)其他包内的模块

对于包package02中的test01.py,写入代码如下:

# package02/test01.py

import package01.para as para

p = para.PI

运行后报错:

Traceback (most recent call last):
  File "G:/lwc/workspace/Python/20220609/package02/test01.py", line 3, in <module>
    import package01.para as para
ModuleNotFoundError: No module named 'package01'

 No module named 'package01',可能是Python的运行环境中不包含此目录导致的。解决方法可以参考其他博主的博客。

(2)根目录中的模块

对于根目录中的test02.py,写入代码如下:

# test02.py

from package01.para import PI as p
from package01.func import calculate as ccl

print("p = " + str(p))

a,b = 3,5
c = ccl(a,b)
print("a + b = " + str(c))

运行后的输出结果如下:

Out:
调用了package01中的模块
p = 3.1415926
a + b = 8

可见根目录中的模块可以调用包内的自建模块,在调用时还会执行package01/__init__.py中的代码。

4. 小结

可见Python自建模块可用于根目录中的模块对其进行调用,但在其他包中的模块对其进行调用时却会报错。其解决方案有待进一步研究。