一个项目如果代码不规范会导致可读性差、维护困难、容易引入 Bug,并降低代码的可扩展性和一致性。在团队协作中,不统一的风格会增加合并冲突,影响开发效率。此外,代码不规范可能导致测试困难,影响 CI/CD 流程,甚至带来安全隐患。
本教程将带你从0开始,将一个简单的 Python 脚本逐步演化为规范的工程项目,涵盖 Git版本管理、代码规范检查、单元测试、CI/CD、文档管理,以及打包发布等关键环节。
代码管理:从零开始搭建 Git 项目
1
什么是Git
Git 是一个分布式版本控制系统,用于跟踪文件的更改,特别适用于软件开发。它允许多个开发者协作开发代码,同时保留所有更改的历史记录。(详述:https://git-scm.com/video/what-is-git)
2
为什么要使用 Git
📌代码历史可追溯,支持版本回滚
📌支持多人协作,提高团队效率
📌便于分支管理,降低开发冲突
📌可托管到 github gitlab等,方便备份与共享
3
创建一个GitHub项目
1.首先你要有一个GitHub 账号,如果没有的话请先注册*(https://github.com/signup)。*
2.登录账号,创建一个项目(New repository)例如:my-project。(https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnew)
3.只需要输入项目名称 (Repository name) 即可,项目描述(Description)选填。Public 是公开,可以在 GitHub 搜到,Private 是私密项目,只有自己和项目成员能看到。点击 Create repository。

4
初始化 Git 仓库并推送到 GitHub
1.在 GitHub 上创建一个新的项目仓库(Repository)。
2.准备好提交代码需要的 token 创建教程
(https://blog.youkuaiyun.com/chengwenyang/article/details/120060010)。
3.在本地初始化 Git 仓库并推送代码:
>
>>
mkdir
my-project &&
cd
my-project
>
>>
echo
"# test"
>> README.md
>
>> git init
#
首次使用需要设置用户名和邮箱
>
>> git config --global user.name
"你的用户名"
>
>> git config --global user.email
"你的邮箱"
>
>> git add README.md
>
>> git commit -m
"test"
>
>> git branch -M main
>
>> git remote add origin <your-repo-url>
>
>> git push -u origin main
4.输入用户名及token 即可推到远程仓库:
>>> git push -u origin main
Username
for
'https://github.com'
: lwj-st
Password
for
'https://lwj-st@github.com'
:
Enumerating objects: 3,
done
.
Counting objects: 100% (3/3),
done
.
Writing objects: 100% (3/3), 223 bytes | 223.00 KiB/s,
done
.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/lwj-st/my-project.git
* [new branch] main -> main
Branch
'main'
set
up to track remote branch
'main'
from
'origin'
.
5
添加基本的工程文件
- README.md介绍项目用途,示例:
#
my-project
#
# 介绍
这是一个示例 Python 项目,支持自动化测试、Docker 部署,并符合 PEP 8 代码规范。
#
# 安装
pip install my-project
- .gitignore忽略不需要提交的文件,如编译生成的二进制文件、日志文件等规则*(https://monsterhxw.github.io/posts/git-gitignore-tutorials/)*示例:
__pycache__
*.pyc
test/
dist/
tmp/
.vscode
build
*.lock
*.db
- requirements.txt记录项目依赖示例:
lazyllm
-
Dockerfile:镜像构建文件 创建并推送镜像。
-
setup.py:打包与发布文件 使用 setuptools 进行打包。
6
添加主项目文件
项目代码以 【第2讲:10分钟上手一个最小可用RAG系统】为例,添加主代码文件。
- my_project/retriever.py
from
lazyllm
import
Retriever, Document
def
create_retriever
(
path:
str
, query:
str
):
"""
创建并执行检索
Args:
path (str): 文档的绝对路径
query (str): 查询语句
Returns:
list: 检索结果
"""
doc = Document(path)
retriever = Retriever(doc, group_name=
"CoarseChunk"
, similarity=
"bm25_chinese"
, topk=
3
)
return
retriever(query)
- my_project/__init__.py
from
.
retriever
import
create_retriever
__version__ =
'0.1.0'
__all__ = [
'create_retriever'
]
版本管理和分支策略
良好的分支管理策略有助于多人协作和稳定版本发布。
1
常见分支命名
主分支(main):始终保持稳定可发布状态
开发分支(dev):用于日常开发
功能分支(feature/*):用于开发新功能,完成后合并回 dev
修复分支(hotfix/*):用于紧急修复生产环境 bug
2
Git 分支管理操作示例
#
创建并切换到开发分支
>
>> git checkout -b dev
#
在dev分支上新创建功能分支
>
>> git checkout -b feature/new-feature
...修改代码...
>
>> git add .
>
>> git commit -m
"Add new feature"
>
>> git push origin feature/new-feature
#
开发完成后合并回 dev
>
>> git checkout dev
>
>> git merge feature/new-feature
>
>> git push origin dev
3
在github上提交pull request
- 当改好的代码提到远程仓库后就可以提交pull request了。
- 进入 GitHub 仓库主页,点击 “Pull Requests” -> “New Pull Request”。
- 如果是同一仓库的Pull Requests 选择对应的 base (目标分支) 和 compare (比对分支)即可。
- 如果是fork仓库的Pull Requests 则有 base repository (目标仓库)和 base (目标分支)默认是fork的源仓库信息,head repository (源仓库)和 compare (比对分支)默认是自己仓库的信息。
- 添加 PR 说明,点击 “Create Pull Request”。
4
解决冲突
当多个开发者同时修改同一部分代码并尝试合并时,Git 可能会提示conflict(代码冲突)
1.同分支冲突解决
- 当提交代码Git 检测到冲突时,它会输出类似以下信息:
To https:
//github.com/lwj-st/my-project.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to
'https://github.com/lwj-st/my-project.git'
hint: Updates were rejected because the remote contains work that you
do
hint:
not
have locally. This
is
usually caused
by
another repository pushing
hint: to the same
ref
. You may want to first integrate the remote changes
hint: (e.g.,
'git pull ...'
) before pushing again.
hint: See the
'Note about fast-forwards'
in
'git push --help'
for
details.
- 执行git pull merge远程分支
CONFLICT (content):
Merge
conflict
in
requirements.txt
Automatic
merge
failed; fix conflicts
and
then
commit
the result.
- 此时,你可以运行git status查看哪些文件存在冲突,输出示例:
>>> git status
On branch dev
Your branch
and
'origin/dev'
have diverged,
and
have
1
and
1
different commits
each
, respectively.
(
use
"git pull"
to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts
and
run
"git commit"
)
(
use
"git merge --abort"
to abort the merge)
Unmerged paths:
(
use
"git add <file>..."
to mark resolution)
both modified: requirements.txt
no
changes added to commit (
use
"git add"
and
/
or
"git commit -a"
)
- 直接修改文件,保留正确的代码然后添加并提交:
>
>> git add requirements.txt
>
>> git commit -m
"解决冲突"
>
>> git push
2.PR冲突解决
- 如果PR冲突则会在页面出现 This branch has conflicts that must be resolved(这个分支有必须解决的冲突)如下:

- 页面修改,直接点击 Resolve conflicts (解决冲突);
- 编辑冲突文件保留需要的内容后点击 标记为 **Mark as resolved(已解决)**即可;
- Git 会在有冲突的文件中标记冲突部分,格式如下:

<<<<<<< dev
xxxx
=======
xxxx
>>>>>>> main
-
<<<<<<< dev 表示 合并进来的 dev 的代码;
-
======= 是分隔符;
-
main 表示 当前分支(main) 的代码。
代码规范与自动检查
为了保证代码质量,我们需要遵循统一的编码规范。
1
常用代码格式化与风格检查
1.black:自动格式化代码
- 安装 black:
>
>> pip install black
- 格式化整个项目 black .
>>> black .
reformatted /root/my_project/__init__.py
reformatted /root/my_project/retriever.py
All
done
! ✨ 🍰 ✨
2 files reformatted.
特点
- 强制代码格式化(不能自定义样式,减少团队争议)
- 默认 88 字符换行(可调整)
- 自动调整引号(优先使用双引号)
- 对 if-else、列表等结构进行优化
2.flake8:代码风格检查
- 安装 flake8
>
>> pip install flake8
- 检查整个项目 flake8 . 有问题的话会有日志提示,没日志信息就是最好的信息
>
>> flake8 .
特点
- 代码风格检查:基于 PEP 8 规范,检测缩进、命名、行长度等问题。
- 语法错误检测:发现未定义变量、语法错误等潜在 Bug。
- 复杂性分析:通过 McCabe 复杂度检查,提示代码是否过于复杂。
- 插件扩展性:支持第三方插件,可扩展检查规则(如类型检查)。
3.pre-commit:在提交代码前自动运行检查
- 安装pre-commit
>
>> pip install pre-commit
- 初始化pre-commit
>
>> pre-commit install
- 在 .pre-commit-config.yaml 中添加规则:
repos:
- repo: https://github.com/psf/black
rev: 23.1.0
hooks:
-
id
: black
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
hooks:
-
id
: flake8
单元测试与代码质量保障
1
为什么要写单元测试
- 可以确保改动后仍然保持正确性,提高代码质量;
- 提高代码的可维护性,降低维护成本;
- 单元测试可以发现 Bug,避免意外改动影响已有功能,提高开发效率;
- 单元测试可以作为文档,帮助团队理解代码。
2
使用 pytest 编写测试
Pytest 是 Python 语言中最流行的测试框架之一,它可以帮助我们自动化测试代码,确保代码按照预期运行,减少人工测试的工作量。
1.测试用例规则
- 文件名 必须以 test_ 开头或 _test.py 结尾。
- 类名 必须以 Test 开头,并且不能有init方法。
- 函数/方法 必须以 test_ 开头。
- 可通过 pytest.ini 自定义规则。
2.安装 pytest:
>
>> pip install pytest
3.创建 tests/test_retriever.py:
import
pytest
from
my_project
import
create_retriever
# 测试文档路径
TEST_PATH =
"./data_kb"
def
test_retriever_contains_keyword
():
test_query =
"为我介绍一下2008年北京奥运会"
expected_keyword =
"奥运比赛"
results = create_retriever(TEST_PATH, test_query)
top_content = results[
0
].get_content()
if
results
else
""
assert
expected_keyword
in
top_content,
f"检索结果中未找到关键词 '
{expected_keyword}
'"
def
test_retriever_empty_query
():
results = create_retriever(TEST_PATH,
""
)
assert
isinstance
(results,
list
),
"结果应该是列表类型"
4.运行测试:(提前准备好测试数据 ./data_kb):
>>>
export
PYTHONPATH=
${PWD}
:
$PYTHONPATH
>>> pytest --disable-warnings tests/test_retriever.py
====================================
test
session starts ====================================
platform linux -- Python 3.10.9, pytest-8.3.3, pluggy-1.5.0
rootdir: /root
plugins: anyio-4.4.0, hydra-core-1.3.2
collected 2 items
tests/test_retriever.py .. [100%]
===================================== 2 passed
in
0.01s =====================================
- –disable-warnings 忽略警告日志(只会打印错误日志)
3
pytest中常用的标记(扩展)
1.pytest 提供了 markers(标记) 机制,可以用来分类测试、控制测试执行、参数化测试等。以下是一些常见的 pytest 标记及其用途。
2.示例 tests/test_server.py
# content of test_server.py
import
pytest
@pytest.mark.webtest
def
test_send_http
():
pass
# perform some webtest test for your app
@pytest.mark.device(
serial=
"123"
)
def
test_something_quick
():
pass
@pytest.mark.device(
serial=
"abc"
)
def
test_another
():
pass
class
TestClass
:
def
test_method
(
self
):
pass
3.然后,您可以将测试运行限制为仅运行标有 的测试webtest:
>>> pytest -v -m webtest
====================================
test
session starts ====================================
platform linux -- Python 3.10.9, pytest-8.3.3, pluggy-1.5.0 -- /opt/miniconda3/envs/lazyllm/bin/python
cachedir: .pytest_cache
rootdir: /root/my-project
plugins: anyio-4.4.0, hydra-core-1.3.2
collected 4 items / 3 deselected / 1 selected
tests/test_server.py::test_send_http PASSED [100%]
======================== 1 passed, 3 deselected, 3 warnings
in
0.01s ========================
4.此外,您可以限制测试运行,仅运行与一个或多个标记关键字参数匹配的测试,例如,仅运行标有device和特定的测试serial=“123”:
>>> pytest -v -m
"device(serial='123')"
====================================
test
session starts ====================================
platform linux -- Python 3.10.9, pytest-8.3.3, pluggy-1.5.0 -- /opt/miniconda3/envs/lazyllm/bin/python
cachedir: .pytest_cache
rootdir: /root/my-project
plugins: anyio-4.4.0, hydra-core-1.3.2
collected 4 items / 3 deselected / 1 selected
tests/test_server.py::test_something_quick PASSED [100%]
======================== 1 passed, 3 deselected, 3 warnings
in
0.03s ========================
5.更多信息可参考 markers*(https://docs.pytest.org/en/stable/example/markers.html)*
4
测试覆盖率
- 在持续集成(CI)中,测试覆盖率是衡量代码质量的重要指标。使用 pytest 结合 pytest-cov 插件,可以生成详细的测试覆盖率报告,帮助开发者分析哪些代码未被测试。
- 执行测试,添加覆盖率统计:
>
>>
export
PYTHONPATH=
${PWD}
:
$PYTHONPATH
>
>> pytest --cov=my_project --cov-append --cov-report=html
- 测试完成后,可以在 htmlcov 目录 查看HTML 报告。
- pytest --cov=my-project 统计 my-project 目录下的代码覆盖率。
- –cov-append 确保多次运行时,覆盖率不会被重置。
- –cov-report=html 生成可视化 HTML 报告,帮助分析测试覆盖率。
- 详细可参考 pytest-cov*(https://pytest-cov.readthedocs.io/en/latest/)*

持续集成(CI):让测试自动化
1
为什么要CI
1.传统项目开发测试会遇到下面的问题:
- 传统手动运行测试,可能会忘记或执行不完整。
- 多人协作时,每个人的测试环境可能不同,导致“在我电脑上能跑”的问题。
- 如果代码合并后才手动测试,可能要到后期才发现 Bug,修复成本更高。
- 代码变更较多时,手动测试可能遗漏边界情况。
- 不同开发者的代码风格不同,可能导致代码风格混乱。
2.使用GitHub Actions CI有下面的优点:
- 每次提交(push)或拉取请求(pull request)时,自动运行测试,避免问题进入主分支。
- 开发者能在第一时间知道代码是否通过所有测试。
- 代码测试在标准化的GitHub Runner环境运行,不受开发者本地环境影响。
- 可以并行运行多个测试,加快反馈速度。
- 使用 prettier、black、flake8、eslint 等工具,自动检查代码格式,保持代码风格一致。
- Github 提供免费的runner使用,可以免费使用。
2
配置 CI
- 添加 .github/workflows/test.yml :
name: Run Tests
on: [push, pull_request]
jobs
:
test
:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version:
"3.10"
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: |
export
PYTHONPATH=
${PWD}
:
$PYTHONPATH
pytest
- 可实现每次提交pr或合入分支时进行测试:

代码文档管理:用 MkDocs 搭建文档系统
1
为什么要用MkDocs
1.在项目开发过程中,文档管理常常遇到以下问题:
- 不同开发者可能使用 Word、Markdown、PDF、Wiki等不同格式,导致难以维护。
- 许多文档存储在本地,缺少版本控制,难以追踪更改历史。
- 需要手动更新编译,过程繁琐。
2.使用MkDocs 可以很好的解决这些问题:
- 使用 Markdown 编写,简单易读,统一格式,降低学习成本。
- Git 版本控制,文档与代码一起管理,随代码更新而更新。
- 结合 GitHub Actions 或 Read the Docs,提交代码后自动生成最新文档,无需手动更新。
2
使用 MkDocs 生成文档
1.安装依赖包,有关详细信息,请参阅安装指南(https://www.mkdocs.org/user-guide/installation/)。
>
>> pip install mkdocs
2.初始化 MkDocs:
>
>> mkdocs new my-project
>
>>
cd
my-project
3.创建文件目录如下:有一个配置文件mkdocs.yml,以及一个名为 docs 的文件夹,其中包含您的文档源文件(是docs_dir (https://www.mkdocs.org/user-guide/configuration/#docs_dir)配置设置的默认值)。目前该 docs 文件夹仅包含一个名为index.md 的文档页面。
my
-project/
├── docs
│ └── index.md
└── mkdocs.yml
4.查看项目
-
通过运行以下命令启动服务器mkdocs serve:
端口被占用时可以用 -a 指定端口 mkdocs serve -a 0.0.0.0:8008
$ mkdocs serve
INFO - Building documentation...
INFO - Cleaning site directory
INFO - Documentation built
in
0.22
seconds
INFO - [
15
:
50
:
43
] Watching paths
for
changes:
'docs'
,
'mkdocs.yml'
INFO - [
15
:
50
:
43
] Serving
on
http:
//127.0.0.1:8000/
- 在浏览器中打开http://127.0.0.1:8000/,您将看到显示的默认主页:
- 详细配置参考:https://www.mkdocs.org/

3
托管到 Read the Docs
1.为什么选择Read the Docs ?
在开发项目时,良好的文档是不可或缺的。相比把文档散落在本地文件、Markdown 文件或 Wiki 页面上,Read the Docs 提供了一个高效的在线文档托管和自动构建平台,特别适合开源项目和持续更新****的技术文档。
托管到 Read the Docs 的几个核心优势:
- 自动构建:推送代码到 GitHub,Read the Docs 就会 自动构建并更新文档。
- 版本管理:支持多个文档版本,可以让用户查看不同版本的文档(比如 latest、stable、v1.0)
- 在线搜索: 提供在线搜索功能,可以快速查找内容。
- 免费托管:完全免费,不需要额外购买服务器或域名。且自带https安全访问,无需配置 SSL 证书。
2.添加.readthedocs.yaml 文件配置说明
*(*https://docs.readthedocs.com/platform/stable/config-file/v2.html)。
# .readthedocs.yaml
# Read the Docs 配置文件
# 必需的版本字段
version: 2
# 设置构建环境
build:
os: ubuntu-24.04
tools:
python:
"3.10"
# MkDocs 需要 Python
# 配置 MkDocs
mkdocs:
configuration: mkdocs.yml
# 默认的 MkDocs 配置文件
# 可选:指定 Python 依赖(如果有)
#python:
# install:
# - requirements: requirements.txt # 如果你有依赖文件
3.注册 Read the Docs(https://about.readthedocs.com/?ref=app.readthedocs.org) 账号 (选择github自动登录)。
4.在 Read the Docs 主页,点击 导入一个项目(Import a Project)。
5.选择需要托管的 GitHub 仓库,点击 ➕ 继续。
6.设置
- 名称 :默认仓库名
- 默认分支 :选主分支
- 语言:该项目的文档所呈现的语言
7.点击下一页,系统会开始自动构建文档。
8.Read the Docs 会自动构建并托管文档。
9.查看文档 https://.readthedocs.io/ 换成自己的项目名。
制品
1
为什么要做制品
在 Python 项目开发过程中,除了编写代码,我们通常还需要将项目打包成 可发布、可安装、可复现 的格式,这些被称为 制品(Artifacts)。制品可以是 Python 包(wheel、sdist)、Docker 镜像、二进制文件、可执行程序。
项目制作制品的核心意义:
- 便于发布与分发:如果没有制品,用户需要自己下载源码、安装依赖、配置环境,过程繁琐且容易出错。
- 确保环境一致性:不同环境(开发、测试、生产)可能依赖不同版本的软件,导致程序行为不一致。
- 便于测试与回滚:有对应的制品方便直接选用对应的版本的制品使用,如果没有制品,每次测试都需要重新搭建环境,回滚版本困难。
2
whl包制品
1.为什么要做whl包制品
.whl(Wheel)是一种 Python 包的二进制分发格式,相比源码安装更高效,广泛用于发布和部署 Python 项目。
- 提高安装速度: 打成whl包可以直接通过 pip install my-project.whl 比源码安装更快。
- 行业共识:现在python制品通常都是做成whl包,并上传官方pypi仓库,方便更好的传播与使用。
2.使用 setuptools 进行打包
在 setup.py 中定义:
from
setuptools
import
setup, find_packages
setup(
name=
"my_project"
,
version=
"0.1.0"
,
packages=find_packages(),
install_requires=[
"lazyllm"
,
],
author=
"Your Name"
,
author_email=
"your@email.com"
,
description=
"A simple RAG retriever package"
,
long_description=
open
(
"README.md"
).read(),
long_description_content_type=
"text/markdown"
,
python_requires=
">=3.6"
,
)
生成 .whl 包:
>>> python setup.py bdist_wheel
running bdist_wheel
running build
running build_py
creating build
creating build/lib
creating build/lib/my_project
....
adding
'my_project-0.1.0.dist-info/WHEEL'
adding
'my_project-0.1.0.dist-info/top_level.txt'
adding
'my_project-0.1.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
>>>
ls
dist/
my_project-0.1.0-py3-none-any.whl
3.注册pypi账号
1️⃣访问 PyPI 官网(https://pypi.org/)创建账号并登录。
2️⃣点击右上角 “Account settings”(https://pypi.org/account/login/?next=%2Fmanage%2Faccount%2F) 进入设置页面。
3️⃣在 “API tokens”(API 令牌) 部分,点击 “Add API token”(添加 API 令牌)。
4️⃣配置 Token:
-
名称(Name):例如 INDEX_PYPI_TOKEN
-
作用范围(Scope):
Entire account(整个账户):允许管理所有 PyPI 项目(不推荐)
Specific project(指定项目):建议选择你的项目名称(更安全)
5️⃣点击 Create token(创建令牌)。
6️⃣复制生成的 API Token(仅显示一次,注意:不要泄露此令牌!)
4.制作并推送whl包
7️⃣本地添加 ~/.pypirc 文件
[pypi]
username
= __token__
password
= pypi-xxxxxxxxxxxxxxxxxxxYjNjNS0xMDExNWMwMzhlNDMiXQAABiDpxiNjoqIT3SJDNrQPP-BJl_AhO7pHErgKvOnS4jzNrQ
8️⃣安装工具及上传制品
>
>> pip install twine
>
>> twine upload dist/*
5.通过持续部署来发布应用
通过集成github action实现自动化发布,是github项目经常使用的一种方式,不用人为手动构建,可以在设定情况下构建包并上传到官方pypi仓库 (比如 打tag)。
1️⃣进入你的 GitHub 仓库 。
2️⃣点击 “Settings” → “Secrets and variables” → “Actions”。
3️⃣在 “Secrets” 部分点击 “New repository secret”。
4️⃣填写:
- Name(名称):如 INDEX_PYPI_TOKEN
- Value(值):粘贴你的 API Token
5️⃣点击 “Add secret”。
6️⃣仓库中添加.github/workflows/publish-to-pypi.yaml文件
name: Publish to PyPI
on:
push:
tags:
-
"v*"
# 仅在创建 tag(如 v1.0.0)时触发
jobs
:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version:
"3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build twine
- name: Build package
run: python -m build
- name: Upload to PyPI
env
:
INDEX_PYPI_TOKEN:
${{ secrets.INDEX_PYPI_TOKEN }
}
run: |
twine upload --username __token__ --password
$INDEX_PYPI_TOKEN
dist/*
每次打tag时,会自动触发编译whl包,并上传至官方仓库。
6.使用
1️⃣其他人可以通过pip来安装你的项目,默认最新版本。
>
>> pip install my-project
2️⃣也可以限制版本安装。
>
>> pip install
"my-project==0.1.0"
>
>> pip install
"my-project>=0.1.0"
3
镜像制品
1.为什么要做Docker镜像
Docker 是一种开源的容器化平台,用于自动化应用部署。它通过容器技术将应用程序及其依赖打包成一个轻量、可移植的单元,能在不同环境中一致运行。
使用Docker制作镜像制品有以下好处:
- 环境一致性:避免“在我机器上能跑,但在服务器上不行”的问题。保证在 开发、测试、生产 环境,代码和依赖都一样。
- 便于部署和扩展:一次构建,随处运行,可以在 服务器、Kubernetes、云环境 运行。
- 行业影响力:Docker在业内使用广泛,有自己的官网,基于此有利于更好的传播与使用。
2.注册 Docker Hub 账号
- 访问Docker Hub 官网(https://hub.docker.com/)并注册一个账号。注册的账号名就是 命名空间(Namespace)。
- 注册成功后,登录你的 Docker Hub 账户。
3.创建仓库(Repository)
1️⃣点击右上角的 Create a repository (创建仓库)。
(https://login.docker.com/u/login/identifier?state=hKFo2SBUYU1nRFFVaWZkRlhPTmJKT3dzM3hYT3cwWjJwLWIxOaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEVIYWhYS1paMGw5OFpOTDBZX2JRci1wUmtxeFVNejh4o2NpZNkgbHZlOUdHbDhKdFNVcm5lUTFFVnVDMGxiakhkaTluYjk)
2️⃣填写仓库信息:
-
Repository Name(仓库名称):如 my-project
-
Visibility(可见性):
Public(公开):任何人都可以拉取你的镜像
Private(私有):只有你或授权用户可以访问
3️⃣点击 Create(创建)。
4.登录 Docker Hub
在终端或命令行运行:
>
>> docker login
然后浏览器打开https://login.docker.com/activate,并输入终端对应的code SPQK-WMDJ 。如果登录成功,会显示:Login Succeeded

5.构建并推送镜像
1️⃣编辑Dockerfile
# 1. 选择基础镜像
FROM python:3.10
# 2. 设置环境变量
ENV PYTHONUNBUFFERED=1
# 3. 创建应用文件夹
RUN
mkdir
/app
# 4. 拷贝源码
COPY my_project /app/my_project
COPY requirements.txt /tmp/requirements.txt
ENV PYTHONPATH=
"/app:
${PYTHONPATH}
"
# 5. 安装依赖
RUN pip install -r /tmp/requirements.txt \
&&
rm
-rf /tmp/requirements.txt
# 6. 创建非 root 用户,提升安全性
RUN useradd -m myuser
USER myuser
# 7. 设置默认启动命令
CMD [
"/bin/bash"
]
2️⃣构建镜像
>
>> docker build -t username/my-project:0.1.0 .
3️⃣发布镜像
>
>> docker push username/my-project:0.1.0
6.镜像使用
1️⃣拉取镜像
>
>> docker pull username/my-project:0.1.0
2️⃣容器使用
>
>> docker run -it --name my-project username/my-project:0.1.0
大模型算是目前当之无愧最火的一个方向了,算是新时代的风口!有小伙伴觉得,作为新领域、新方向人才需求必然相当大,与之相应的人才缺乏、人才竞争自然也会更少,那转行去做大模型是不是一个更好的选择呢?是不是更好就业呢?是不是就暂时能抵抗35岁中年危机呢?
答案当然是这样,大模型必然是新风口!
那如何学习大模型 ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。但是具体到个人,只能说是:
最先掌握AI的人,将会比较晚掌握AI的人有竞争优势。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
但现在很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习路线完善出来!

在这个版本当中:
您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型路线+学习教程已经给大家整理并打包分享出来, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、大模型经典书籍(免费分享)
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套大模型报告(免费分享)
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、大模型系列视频教程(免费分享)

四、2025最新大模型学习路线(免费分享)
我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊
L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计
L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

L5阶段:专题集丨特训篇 【录播课】

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码,免费领取


被折叠的 条评论
为什么被折叠?



