目录
[四、Java 项目结构(最常见)](#四、Java 项目结构(最常见))
[五、Python 项目结构(最常见)](#五、Python 项目结构(最常见))
[十六、Java 选手最关心的 10 个问题(直白回答)](#十六、Java 选手最关心的 10 个问题(直白回答))
[十七、一个更规范的 Python 项目结构(推荐)](#十七、一个更规范的 Python 项目结构(推荐))
[十八、Java → Python 迁移时的结构改造思路](#十八、Java → Python 迁移时的结构改造思路)
一、这篇文章怎么用
如果你会 Java,但刚学 Python,最容易卡住的不是语法,而是"项目怎么搭、目录怎么放、怎么跑起来"。这篇文章就用最通俗的方式,把 Java 项目结构和 Python 项目结构一一对照,让你一眼明白。
写作风格:具体、直白、可照抄。每一节都给出"Java 写法/结构 → Python 写法/结构"的对照。
二、先给你一张总览对照
- Java 项目:Maven/Gradle + src/main/java + resources + target/build
- Python 项目:venv + requirements.txt + package 目录 + main.py
- Java 入口:public static void main → Python 入口:if name == 'main':
- Java 依赖:pom.xml / build.gradle → Python 依赖:requirements.txt
- Java 打包:jar/war → Python 打包:wheel/可执行脚本
三、为什么项目结构这么重要
你在 Java 里写项目,一般不会把所有代码堆在一个文件里,因为:
- 人多协作,不分层会乱
- 有配置文件、资源文件、日志、测试代码
- 构建工具需要固定目录结构
Python 也是一样。只是 Python 没有硬性规定,但不代表随便放。你要做"能跑 + 好找 + 好维护"。
四、Java 项目结构(最常见)
先看 Maven 项目:
project-root/
src/
main/
java/
com/example/app/
App.java
resources/
application.yml
test/
java/
com/example/app/
AppTest.java
pom.xml
一句话理解:Java 结构固定,分层清晰,构建工具靠目录识别。
五、Python 项目结构(最常见)
一个最常见的 Python 小项目结构:
project-root/
venv/ (或 .venv/)
app/
init.py
tests/
test_main.py
requirements.txt
一句话理解:Python 没有固定模板,但推荐"代码包 + 测试 + 依赖"。
六、入口文件对照
Java 的入口是 main;Python 的入口是 if name == 'main'。
// Java
public class App {
public static void main(String[] args) {
System.out.println("hello");
}
}
Python
def main():
print("hello")
if name == 'main':
main()
一句话理解:Python 用 if 来判断"直接运行还是被导入"。
七、依赖管理对照
Java 依赖写在 pom.xml 或 build.gradle。Python 依赖写在 requirements.txt。
// Java (pom.xml 片段)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Python (requirements.txt)
flask==3.0.0
requests==2.31.0
一句话理解:Java 依赖随项目走;Python 依赖随环境走。
八、构建/运行方式对照
Java 通常要先编译后运行;Python 是解释执行。
// Java
mvn clean package
java -jar target/app.jar
Python
python app/main.py
一句话理解:Python 不需要编译,但需要虚拟环境。
九、包与模块的放法
Java 包名靠目录 + package 声明;Python 包名靠文件夹 + init.py。
// Java
package com.example.app.service;
Python
app/service.py
一句话理解:Java 通过 package 绑定目录,Python 通过文件夹组织模块。
十、配置文件放哪里
Java 常见:resources/application.yml;Python 常见:config.py / .env。
Python (config.py)
DEBUG = True
DB_URL = "sqlite:///test.db"
一句话理解:Python 配置不固定,但建议独立文件,不要散在代码里。
十一、日志放哪里
Java 多用 logback/log4j;Python 用 logging 标准库。
Python
import logging
logging.basicConfig(level=logging.INFO)
logging.info("start")
一句话理解:Python 有内置日志,不需要额外装依赖。
十二、测试代码放哪里
Java 用 src/test/java;Python 常用 tests/。
tests/test_main.py
def test_add():
assert 1 + 1 == 2
一句话理解:Python 测试更轻量,放 tests 目录即可。
十三、快速搭一个可跑项目(Java)
这里用最小 Spring Boot 举例,结构清晰,能跑起来:
project-root/
src/main/java/com/demo/App.java
src/main/resources/application.yml
pom.xml
// App.java
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
一句话理解:一个类 + 一个配置文件就能跑。
十四、快速搭一个可跑项目(Python)
这里用 Flask 举例:
project-root/
app/
init.py
requirements.txt
app/main.py
from flask import Flask
app = Flask(name)
@app.route('/')
def hello():
return 'hello'
if name == 'main':
app.run()
一句话理解:一个文件就能启动 Web。
十五、常见目录/文件对照表
- Java src/main/java → Python app/ 或 src/
- Java src/main/resources → Python config/ 或直接 config.py
- Java pom.xml → Python requirements.txt
- Java target/ → Python pycache/ (可忽略)
十六、Java 选手最关心的 10 个问题(直白回答)
-
Python 没有 Maven/Gradle?→ 有 pip + venv,依赖写 requirements.txt。
-
Python 的 main 在哪?→ 任何文件里都可以,但建议 main.py。
-
Python 项目要不要分层?→ 需要,至少分 controller/service/dao。
-
Python 资源文件放哪?→ 放 config/ 或 resources/,自己定但要固定。
-
Python 怎么打包?→ 简单项目直接运行,工程化可用 wheel/pyinstaller。
-
Python 测试怎么跑?→ pytest 一行命令即可。
-
Python 配置多环境怎么做?→ 用 .env 或 config.py + 环境变量。
-
Python 依赖版本怎么锁?→ requirements.txt 写死版本号。
-
Python 项目入口怎么写清楚?→ 统一用 main.py + if name == 'main':
-
Python 要不要写 init.py?→ 要,保证包识别。
十七、一个更规范的 Python 项目结构(推荐)
project-root/
app/
init.py
controller/
init.py
user_controller.py
service/
init.py
user_service.py
dao/
init.py
user_dao.py
config/
tests/
test_user.py
requirements.txt
一句话理解:和 Java 分层一模一样,只是目录名字更随意。
十八、Java → Python 迁移时的结构改造思路
- 把 controller/service/dao 直接搬到 Python 目录,名字用小写+下划线
- 每个 Java 类文件,对应一个 Python .py 文件
- Java 的 resources,改成 Python 的 config 文件夹
- Java 的 main 类,改成 Python main.py
一句话理解:结构不变,语法变。这样迁移成本最低。
补充说明
Java 项目是"规范模板",Python 项目是"约定模板"。你可以沿用 Java 的分层习惯,只是把每层放进 Python 的包里。这样你会很舒服,不会迷路。
Python 项目里尽量保证:入口清楚、配置集中、业务分层、测试目录独立。只要做到这四点,项目结构就不会乱。
如果你一个人写小脚本,可以只用一个 main.py;但一旦项目超过 5 个文件,就建议拆目录。