mconf/mconf-aggr1.10.0注意:此步骤只需执行一次。
本项目需使用Python 3.9.10版本。开始前,需确保已设置正确版本。强烈建议使用版本管理器如pyenv。关于pyenv的安装说明,请查看pyenv官方文档。
注意:安装
pyenv后,别忘了运行source ~/.bashrc。
安装pyenv后,在项目根目录执行以下命令:
bash$ pyenv install 3.9.10 $ pyenv local 3.9.10 $ pyenv rehash
此时会生成.python-version文件,内容为3.9.10。建议验证Python版本是否切换成功:
bash$ python --version
预期输出:
Python 3.9.10
此后,项目中所有Python相关命令(未使用虚拟环境时)均由pyenv提供。例如,which pip3的输出应类似:
/home/john_doe/.pyenv/shims/pip3
运行项目脚本时,需显式调用Python,如python main.py。不要将脚本设为可执行后直接运行,因为显式调用可确保使用pyenv指定的Python版本;直接运行可能使用系统Python(版本可能不符)。
故障排除:若
pyenv使用异常,确保.bashrc或bash_profile文件末尾包含:eval "$(pyenv init -)"
为控制Python版本及相关库,项目使用poetry管理虚拟环境,这是Python开发中的常见模式。
执行poetry install或poetry shell等命令时,若.venv文件夹不存在,poetry会自动创建虚拟环境。
安装poetry:
bash$ make install-requisites-locally
激活虚拟环境:
bash$ poetry shell
此时命令提示符开头会显示(.venv),表明已进入虚拟环境,所有Python命令均由.venv提供。例如,which pip3的输出应类似:
/home/john_doe/myproject/.venv/bin/pip3
运行脚本时,需显式调用Python,如python main.py。不要将脚本设为可执行后直接运行,以确保使用虚拟环境中的Python版本。
退出虚拟环境:
bash$ exit
注意:不要使用deactivate(venv常用命令),否则需重启poetry shell。
安装开发依赖:
bash$ make install-deps-locally
项目当前使用以下第三方包:
psycopg2 2.7.3.1或更高版本 (官方网站)sphinx 1.6.3或更高版本 (官方网站)sqlalchemy 1.2.0b2或更高版本 (官方网站)验证安装是否成功(在项目根目录):
bash$ python -c "import psycopg2" $ python -c "import sqlalchemy"
成功时无输出。
注意:
Sphinx用于生成文档,无需导入验证。
项目使用标准unittest包进行测试。所有测试文件位于tests/目录,命名模式为*_test.py。测试主脚本为根目录的tests.py,配置文件为config/tests.json。
注意:修改代码后,请运行相关(最好是所有)测试。
关于unittest的更多信息,参见unittest官方文档。
以测试aggregator_test.py为例,有两种方式:
tests.py脚本指定测试文件名(含扩展名):bash$ python tests.py aggregator_test.py
unittest测试tests/目录下的文件:bash$ python -m unittest tests/aggregator_test.py
可通过tests.py脚本运行多个测试模块(称为“测试套件”),用于按功能等维度分组测试。
在config/tests.json的test_suites字段中添加套件名称及tests/目录下的模块列表,即可创建新测试套件。
例如,运行aggregator套件:
bash$ python tests.py aggregator
运行集成测试套件integration:
bash$ python tests.py integration
两种方式:
tests.py(不包含集成测试,需单独运行integration套件):bash$ python tests.py
项目使用Sphinx生成文档。
文档位于docs/目录,主要从Python代码的文档字符串生成。文档字符串格式为numpydoc,文档格式为reStructuredText。
请保持文档字符串始终最新。
生成HTML文档(在docs/目录):
bash$ make html
生成的文件位于docs/_build/html/目录。
可通过Python内置模块http.server启动临时服务器查看文档:
bash$ cd docs/_build/html/ $ python -m http.server
服务器将运行在localhost:8000,可在浏览器中访问。
项目提供多个Dockerfile用于构建应用镜像,基于python镜像。
推荐通过下文的Makefile部分运行Docker相关命令。
Docker镜像标签遵循以下规则:
本地开发镜像标签:
<app>-<完整版本>-<提交哈希>稳定发布镜像标签:
<app>-<数字版本><app>-<主版本><app>-<提交哈希><app>-latest不稳定发布镜像标签:
<app>-<完整版本><app>-<提交哈希>示例:若webhook应用版本为0.0.2-pre-alpha,当前提交哈希为36fba5:
webhook-0.0.2-pre-alpha-36fba5webhook-0.0.2、webhook-0、webhook-36fba5、webhook-latestwebhook-0.0.2-pre-alpha、webhook-36fba5另有staging标签用于预发布镜像。
版本信息来自
.version文件。
可使用单个Docker镜像进行开发,容器内代码会替换为当前目录的项目代码。
手动构建开发镜像:
bash$ docker build -f Dockerfile.development -t mconf/mconf-aggr:dev .
建议同时标记为latest:
bash$ docker tag mconf/mconf-aggr:dev mconf/mconf-aggr:dev-latest
推荐使用Makefile简化操作:
构建开发镜像:
bash$ make docker-build-dev
运行开发镜像并传递额外参数(如端口映射):
bash$ make docker-run-dev EXTRA_OPTS="-p 8000:8000"
为缩短构建时间,建议使用包含dockerize的基础镜像。
dockerize用于从模板文件和环境变量生成Docker容器配置文件,但其安装过程耗时。可预先构建包含dockerize的基础镜像:
dockerize/目录下有两个Dockerfile:
Dockerfile.alpine.dockerize:构建alpine:latest-dockerize(基于alpine:latest,含dockerize)Dockerfile.python3.dockerize:构建python:3.6-alpine-dockerize(基于python:3.6-alpine,含dockerize)通过Makefile构建这两个镜像(在dockerize/目录):
bash$ make docker-build
必须执行此步骤才能使用下文Makefile命令,因为最终镜像依赖这些包含dockerize的基础镜像。
需配置launch.json(VSCode调试配置文件)。例如,调试aggregator:
json{ "version": "0.2.0", "configurations": [ { "name": "Python: Tests", "type": "python", "request": "launch", "program": "${workspaceFolder}/tests.py", "console": "integratedTerminal" }, { "name": "Python: 附加", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] } ] }
配置完成后,确保镜像已构建,通过Makefile运行容器。容器启动后,调试器将等待附加,点击“开始调试”即可在面板中看到调试控制台。
使用flake8进行代码检查,black和isort进行格式化。执行以下命令:
bash$ make lint # 代码检查 $ make format # 格式化
示例.vscode/settings.json配置:
json{ "python.formatting.provider": "black", "python.linting.enabled": true, "python.linting.flake8Enabled": true, "python.sortImports.args": ["--profile=black"], "python.sortImports.path": "${workspaceFolder}/.venv/bin/isort", "[python]": { "editor.codeActionsOnSave": { "source.organizeImports": true }, "editor.formatOnSave": true, "editor.formatOnSaveMode": "file", "editor.rulers": [88] } }
可通过make工具执行以下主要任务:
$ make run$ make docker-build$ make docker-build-dev$ make up$ make up-dev$ make docker-tag$ make docker-tag-unstable$ make docker-tag-latest$ make docker-push$ make docker-push-unstable$ make docker-push-latest$ make test$ make html$ make lint$ make format$ make cleanMakefile默认参数:
AGGR_PATH=<当前目录> DOCKER_USERNAME=mconf REPOSITORY=mconf-aggr
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务