Jason's Blog

April 21, 2025

Python封装包

0.6 min to read

今天遇到的需求是对工程代码进行打包。

之前的项目比较扁平,都是在同一级,大致结构如下

|----src
       |-----*.py

尔后对代码直接进行打包,关键配置代码如下


# 加上初始化
__init__.py

# 直接打包
python -m build

# 直接安装
pip install *.whl

#进行测试
python test.py

遇到的问题是,第一:这样封装的包四面漏风,存在用A类可以访问B类的方法等,安全性不足,健壮性更别提。第二:如果不是第一次安装,pip install会因为版本不变而跳过更新。第三个问题是,每个py文件中import没有采取相对路径,所以打包成包之后导入会错误。

解决方案是第一把所有的py文件打包到一个文件夹中形成子模块,并在每个模块中设置__init__.py,从而实现包之间的隔离。第二就是在pip install后加上--upgrade或者--force--xx,第三就是一个深刻的认识。

from . import A

这个意思是从.(当前文件夹)找到A文件进行import

from .A import A

这个意思是从当前文件夹的A文件导入A中的A类

这个很重要,否则会出现Project.A.A.A()初始化类的情况,即从Project初始化调用了A文件,A文件又调用了A,A才能调用A类。

以上。