标准 Python 项目结构

标准 Python 项目结构

理解 Python 项目的通用结构对于初学者来说非常重要。虽然每个项目可能略有不同,但大多数规范、可维护的 Python 项目都遵循一些常见的组织模式。

常见的项目结构如下:

my_project/ # 项目根目录 ├── my_package/ # 主要 Python 包(模块集合) │ ├── __init__.py # 标识这是一个 Python 包 │ ├── core.py # 核心逻辑 │ ├── utils.py # 工具函数 │ └── ... # 其他模块 ├── tests/ # 单元测试目录 │ ├── __init__.py │ ├── test_core.py │ └── test_utils.py ├── docs/ # 文档(可选) ├── examples/ # 使用示例(可选) ├── requirements.txt # 依赖列表 ├── setup.py 或 pyproject.toml # 项目打包配置(二选一) ├── README.md # 项目说明 ├── .gitignore # Git 忽略文件 └── .env 或 config/ # 配置文件(如数据库连接、API 密钥等)

各部分详解:

1. my_package/ —— 主代码包
  • 这是你实际编写业务逻辑的地方。
  • 文件名应使用小写+下划线(如 data_loader.py)。
  • __init__.py 可以为空,也可以用来控制 from my_package import * 时导出哪些内容。
小知识:

在Python 中,一个目录如果包含 __init__.py 文件(哪怕为空),就被视为一个包package。

当你写 from my_package import * 时,Python 默认会导入该包中所有“公开”的名字(即不以下划线开头的变量、函数、类等)。

我们可以通过在 __init__.py 中定义一个特殊变量 __all__ 来显式指定哪些内容可以被 import * 导入。例如:

core.py 中有函数:process_data()
utils.py 中有函数:log_info() 和 internal_helper()
你想让 from my_package import * 只导入 process_data 和 log_info,那么就在my_package/__init__.py 中写:

注意:__all__只影响 import * 的行为,不影响 from my_package import process_data 这种明确导入方式。
2. tests/ —— 测试目录
  • 使用 pytest 或 unittest 编写测试。
  • 测试文件通常以 test_ 开头,便于自动发现。
  • 建议与源代码分离(不放在包内),避免打包时包含测试代码。
✅ 方法一:使用 unittest(Python 自带)
步骤:创建测试文件(如 test_math_utils.py)继承 unittest.TestCase写以 test_ 开头的方法用 python -m unittest 运行

假设你待测试的工具函数文件为:

那么测试目录test下可以建立测试文件如下:

运行命令:

✅ 方法二:使用 pytest(推荐,更简洁)

运行命令:
3. requirements.txt
  • 列出项目依赖的第三方库,例如:
requests==2.31.0 numpy>=1.20.0
  • 安装命令:pip install -r requirements.txt
4. setup.py 或 pyproject.toml
  • 现代推荐:使用 pyproject.toml(PEP 621 标准)来定义项目元数据和构建方式。
  • 旧项目常用 setup.py,但现在逐渐被取代。
  • 有了这个文件,你的项目就可以通过 pip install -e . 安装为“可编辑模式”,方便开发。

setup.py 是 Python 项目中用于打包、分发和安装项目的脚本,主要基于 Python 标准库 setuptools 或 distutils 编写。它的作用是定义项目的元信息(如名称、版本、作者)、依赖项、入口脚本等,使得项目可以被打包成可分发的安装包(如 .tar.gz 或 .whl),并支持通过 pip install 安装。

from setuptools import setup, find_packages # 读取项目描述(通常从 README.md 读取,增强 PyPI 页面展示) with open("README.md", "r", encoding="utf-8") as f: long_description = f.read() # 从 requirements.txt 读取依赖(可选) def read_requirements(): with open("requirements.txt", "r", encoding="utf-8") as req: return [line.strip() for line in req if line.strip() and not line.startswith("#")] setup( # 项目名称(PyPI 上的唯一标识) name="myproject", # 版本号(遵循语义化版本:主版本.次版本.修订号) version="0.1.0", # 作者信息 author="Your Name", author_email="[email protected]", # 简短描述 description="A sample Python project", # 详细描述(通常用于 PyPI 页面,支持 Markdown) long_description=long_description, long_description_content_type="text/markdown", # 项目主页 url="https://github.com/yourusername/myproject", # 自动发现项目中的包(排除测试目录等) packages=find_packages(exclude=["tests*"]), # 项目支持的 Python 版本 python_requires=">=3.8", # 依赖包(安装时会自动从 PyPI 下载) #install_requires=[ # "requests>=2.25.0", # "pandas>=1.0.0", #], install_requires=read_requirements() #依赖列表 # 可选:开发环境依赖(通过 pip install -e .[dev] 安装) extras_require={ "dev": [ "pytest>=7.0", "flake8>=3.9.0", ] }, # 可选:定义可执行命令(安装后可在终端直接运行) entry_points={ "console_scripts": [ "mycommand = myproject.cli:main", # 命令名 = 模块.函数 ] }, # 分类信息(用于 PyPI 分类展示) classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], )

然后构建分发包,就能生成 .tar.gz.whl 文件。

pip install build python -m build
5. README.md
  • 项目简介、安装步骤、使用示例、贡献指南等。
  • GitHub/GitLab 等平台会自动渲染它作为首页。
6. .gitignore
  • 指定哪些文件不应提交到版本控制(如 __pycache__/.env*.log 等)。因为有些文件:
- 是临时生成的(如 __pycache__/

- 包含敏感信息(如 .env

- 是本地配置(如 IDE 配置文件)

- 体积很大(如数据集、模型文件)

💡 你可以从 github/gitignore 获取官方 Python .gitignore 模板。

7. 配置管理
  • 敏感信息(如密码、密钥)不要硬编码在代码中。
  • 推荐使用 .env 文件或单独的 config/ 目录管理不同环境(dev/test/prod)的配置。
✅方式一:使用 .env 文件 + python-dotenv
创建 .env 文件:

在config.py代码中加载:

在业务代码中使用:

✅ 方法二:使用 config目录

假设你的配置如下:

其中development.py如下

那么在启动环境时进行配置:

Read more

Github如何上传项目(超详细小白教程)

Github如何上传项目(超详细小白教程)

目录 * 一、Github与Git * 二、git的下载安装 * 三、Github的注册 * 四、Github的上传 * 1.GitHub的上传原理 * 2.远程仓库的申请 * 3.本地仓库的关联 * 4.项目的首次上传 * 5.上传时的常见错误 一、Github与Git 1.Git 是一个免费的开源分布式版本控制系统,你可以使用它来跟踪文件中的更改。你可以在 Git 中处理所有类型的项目。使用 Git,你可以将更改添加到代码中,然后在准备好时提交(或保存)它们。这意味着你还可以返回之前所做的更改。开发者常将 Git 与 GitHub 一起使用。 2.GitHub是一个基于git的代码托管平台,在github上可以建立仓库用于存放项目。GitHub 是一个免费的开源系统,所以我们可以在上面找到有用的资料,也可以保存自己做的一些开源项目,以供别人参考,当然GIthub也提供了付费的私人仓库,以供有人需要将一些不公开的项目放入云端仓库,

By Ne0inhk

告别 Copilot 时代:Cursor, Kiro 与 Google Antigravity 如何重新定义编程?

如果说 GitHub Copilot 开启了 AI 辅助编程的“副驾驶”时代,那么 2024-2025 年则是 AI Agent(智能体) 全面接管 IDE 的元年。 现在的开发者不再满足于简单的代码补全,我们需要的是能理解整个项目架构、能自主规划任务、甚至能像真人同事一样工作的“编程搭子”。 今天,我们盘点三款目前最受瞩目、处于风口浪尖的 AI 编程工具:Cursor、Kiro 以及 Google 的重磅新品 Antigravity。无论你是想提升效率,还是想尝鲜最前沿的 Agentic Workflow,这三款神器都不容错过。 1. Cursor:当下体验最好的 AI 代码编辑器 定位:目前最成熟、最流畅的 VS Code 替代者 Cursor

By Ne0inhk
2025年9月9日首发!即梦 4.0 接口开发全攻略:AI 辅助零代码实现,开源 + Docker 部署,小白也能上手

2025年9月9日首发!即梦 4.0 接口开发全攻略:AI 辅助零代码实现,开源 + Docker 部署,小白也能上手

1.前言 即梦4.0是字节跳动旗下即梦AI推出的多模态大模型,其正式名称为“seedream4.0”。该模型于2025年9月5日正式上线,并已逐步向用户开放,9月8日全面对用户开放。即梦4.0是基于字节跳动自研的Seedream4.0模型,具备强大的中文生成能力和多模态处理能力,支持多模态生图、图像编辑、组图生成等功能。 功能特点如下: 前几天给大家使用dify 来实现即梦4.0功能《dify案例分享-免费玩转即梦 4.0 多图生成!Dify 工作流从搭建到使用全攻略,附案例效果》 这个接口目前全网还没有,我也算是第一时间来实现的。那么这个接口是如何开发的呢?下面给大家介绍一下这个接口开发过程。 2.即梦代码开发过程 1 获取开源项目 项目地址 https://github.com/zhizinan1997/jimeng-free-api-all 把源码下载本地 解压 项目目录 D:\工作临时\2025\9月\2025年9月11日\

By Ne0inhk
永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源

永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源

永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源,可以移植到各类mcu上。 附赠高频注入仿真模型 一、代码整体架构与应用场景 本文档所分析的代码是一套针对永磁同步电机(PMSM)的无感磁场定向控制(FOC)驱动解决方案,核心启动策略采用高频注入法,在电机达到一定转速后可平滑切换至观测器实现高速控制。代码基于CMSIS标准开发,手写开源且具备良好的可移植性,可适配各类主流微控制器(MCU),同时附带高频注入仿真模型,适用于工业自动化、家电驱动、新能源汽车辅助电机等对电机控制精度和稳定性要求较高的场景。 永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源,可以移植到各类mcu上。 附赠高频注入仿真模型 代码整体架构遵循模块化设计理念,主要包含项目配置层、CMSIS标准库层、电机控制核心层(高频注入启动、观测器控制、FOC算法)以及硬件适配层。其中,项目配置层包含编译器配置、内存分配、调试工具配置等文件;CMSIS标准库层提供DSP数学运算、内核启动等基础支持;电机控制核心层是驱动方案的核

By Ne0inhk