Python脚本模块化拆分及跨模块导入问题解决方案咨询
标准模块化拆分方案
项目结构
data_analyzer_project/ ├── data_analyzer/ │ ├── __init__.py │ ├── data/ │ │ ├── __init__.py │ │ ├── loader.py # 数据导入逻辑 │ │ └── cleaner.py # 数据清洗逻辑 │ ├── analysis/ │ │ ├── __init__.py │ │ ├── height_sum.py # 身高求和分析 │ │ ├── age_mean.py # 年龄均值分析 │ │ └── height_age_product.py # 身高年龄乘积分析 │ └── presentation/ │ ├── __init__.py │ └── display.py # 结果展示逻辑 ├── entrypoints/ │ ├── __init__.py │ ├── main_height_sum.py │ ├── main_age_mean.py │ └── main_height_age_product.py ├── pyproject.toml ├── setup.py └── README.md
核心模块代码示例
1. 数据导入模块 (data_analyzer/data/loader.py)
import pandas as pd def load_data(file_path: str): """从CSV文件加载原始数据""" return pd.read_csv(file_path)
2. 数据清洗模块 (data_analyzer/data/cleaner.py)
import pandas as pd def clean_data(raw_data: pd.DataFrame) -> pd.DataFrame: """处理缺失值、转换数据类型,返回清洗后的数据集""" cleaned_data = raw_data.dropna(subset=['height', 'age']) cleaned_data['height'] = cleaned_data['height'].astype(float) cleaned_data['age'] = cleaned_data['age'].astype(int) return cleaned_data
3. 身高求和分析模块 (data_analyzer/analysis/height_sum.py)
import pandas as pd def calculate_height_sum(cleaned_data: pd.DataFrame) -> float: """计算有效身高的总和""" return cleaned_data['height'].sum()
4. 结果展示模块 (data_analyzer/presentation/display.py)
def display_result(title: str, result): """格式化展示分析结果""" print(f"=== {title} ===") print(result) print("==============")
独立入口脚本示例(以身高求和为例)
entrypoints/main_height_sum.py
from data_analyzer.data.loader import load_data from data_analyzer.data.cleaner import clean_data from data_analyzer.analysis.height_sum import calculate_height_sum from data_analyzer.presentation.display import display_result def main(): # 步骤1:导入并清洗数据 raw_data = load_data("sample_data.csv") # 替换为你的实际数据路径 cleaned_data = clean_data(raw_data) # 步骤2:执行分析计算 height_sum = calculate_height_sum(cleaned_data) # 步骤3:展示结果 display_result("身高总和分析", f"所有有效身高总和: {height_sum:.2f} cm") if __name__ == "__main__": main()
其他入口脚本(main_age_mean.py、main_height_age_product.py)逻辑一致,仅需替换对应的分析模块引用。
配置文件
pyproject.toml
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "data-analyzer" version = "0.1.0" authors = [ { name="Your Name", email="your.email@example.com" } ] description = "Modular data analysis tool for height and age metrics" readme = "README.md" requires-python = ">=3.8" dependencies = [ "pandas>=2.0" ] [project.scripts] analyze-height-sum = "entrypoints.main_height_sum:main" analyze-age-mean = "entrypoints.main_age_mean:main" analyze-height-age-product = "entrypoints.main_height_age_product:main"
setup.py
from setuptools import setup setup()
解决导入问题的关键操作
安装开发版包:在项目根目录执行以下命令,将
data_analyzer包安装为可编辑模式,Python会全局识别该包,彻底解决模块找不到的问题:pip install -e .使用绝对导入:所有入口脚本和核心模块间的引用均使用绝对导入(如
from data_analyzer.data.loader import load_data),避免相对导入的路径限制。独立入口目录:将所有任务入口脚本放在
entrypoints目录下,与核心业务代码分离,既保证职责清晰,也避免运行时的路径混乱。
运行方式
- 直接运行脚本:
python entrypoints/main_height_sum.py - 使用安装后的命令:
analyze-height-sum
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

