今天遇到的需求是对工程代码进行打包。
之前的项目比较扁平,都是在同一级,大致结构如下
|----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类。
以上。