Python项目结构合理性咨询及dog.py导入方式优化方案求解
问题
项目结构与模块导入疑问
我自学Python已有一段时间,但始终未能掌握规范的项目结构。当前我的项目结构如下:
my_project/ src/ __init__.py dog.py animal.py main.py
(注:原结构中__init__.pyt为笔误,需改为__init__.py才能识别为Python包)
各脚本代码如下:
animal.py
class animal: def __init__(self, kind): self.kind = kind if __name__=='__main__': a=animal("mammal")
dog.py
if __name__=='__main__': from animal import animal else: from .animal import animal class dog(animal): def __init__(self, name, age): super().__init__('Mammal') self.name = name self.age = age if __name__=='__main__': d=dog("Fido", 3)
init.py
from .animal import * from .dog import *
main.py
import src d=src.dog("Fido", 3)
我的问题是:当前这种项目结构是否至少可行?另外我认为dog.py中的导入方式十分繁琐,找不到既能单独运行dog.py进行开发测试,又能在src目录外部(如运行main.py时)正确导入模块的其他方法。
回答
1. 当前项目结构的可行性
修正__init__.pyt为__init__.py后,这个结构完全可行,属于Python最基础的包结构,能满足小型项目的运行需求。不过从代码规范角度,建议类名遵循PEP8的大驼峰命名法(比如Animal而非animal,Dog而非dog),提升代码可读性。
2. 简化dog.py的导入方式
你当前的导入写法确实冗余,以下两种方案可以实现“单文件运行测试+外部调用正常导入”的需求:
方案一:统一使用绝对导入(推荐)
把项目根目录(my_project/)添加到Python的模块搜索路径,这样不管是单独运行dog.py还是通过main.py调用,都能用统一的绝对导入语句:
# dog.py from src.animal import Animal # 同步修正类名为大驼峰 class Dog(Animal): def __init__(self, name, age): super().__init__('Mammal') self.name = name self.age = age if __name__=='__main__': d=Dog("Fido", 3)
添加搜索路径的方式:
- 临时配置:运行
dog.py前,终端执行export PYTHONPATH=/你的项目路径/my_project(Linux/macOS)或set PYTHONPATH=C:\你的项目路径\my_project(Windows) - 永久配置:把
my_project路径添加到系统环境变量的PYTHONPATH中
方案二:动态添加项目路径到搜索列表
在dog.py开头加入代码,自动识别项目根目录并添加到搜索路径,无需手动配置环境变量:
# dog.py import sys from pathlib import Path # 获取项目根目录(my_project/)的绝对路径 project_root = Path(__file__).parent.parent sys.path.append(str(project_root)) from src.animal import Animal class Dog(Animal): def __init__(self, name, age): super().__init__('Mammal') self.name = name self.age = age if __name__=='__main__': d=Dog("Fido", 3)
这种方式更灵活,适合本地开发测试场景。
3. 额外规范建议
__init__.py避免用*导入,明确写出需要导出的类,比如from .animal import Animal; from .dog import Dog,减少命名冲突风险- 后续项目复杂度提升后,建议单独创建
tests/目录存放测试代码,代替在模块内写if __name__=='__main__'的临时测试逻辑
内容的提问来源于stack exchange,提问作者pawelofficial
相关产品推荐
相关产品推荐

