精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如果構建自己的Python包

開發 前端
在運維開發中,如果有多項目的需求,基本都是需要公共庫的,否則需要被多項目調用的模塊要重復編寫,復制到其他項目非常不方便,并且難以保證代碼質量,所以非常推薦編寫自己或團隊的公共代碼庫。?

前言

在日常開發中,我們經常會把一些通用的函數、類或者模塊抽取出來,以便在不同的項目中復用。隨著代碼的積累,如何將這些工具封裝為一個標準的 Python 包(Python Package),并且方便團隊甚至社區使用,就成為一個值得思考的問題。本文將從零開始,介紹如何構建、打包和發布自己的 Python 包。

一、為什么要構建Phthon包?

1. 代碼復用:將常用的工具函數和邏輯沉淀為獨立模塊,避免復制粘貼。

2. 團隊協作:通過 PyPI 或內部源發布,團隊成員可以直接 pip install 使用。

3. 版本管理:獨立的包可以有清晰的版本迭代,不影響主項目。

4. 生態兼容:遵循 Python 社區標準,可以更好地融入現有生態。

二、單倉庫多模塊

在實際運維開發中,往往不僅僅是一個獨立的 Python 包,而是需要在**同一個倉庫(monorepo)** 中維護多個模塊(package)。這種模式能夠更好地統一管理依賴、版本以及 CI/CD 流程,適合團隊協作和多服務共存的場景。

三、目錄結構示例

├── MANIFEST.in
├── README.md
├── docs
├── exec.py
├── publish.sh
├── pyproject.toml
├── src
│   ├── pytbox
│   │   ├── __pycache__
│   │   ├── alert
│   │   ├── alicloud
│   │   ├── base.py
│   │   ├── categraf
│   │   ├── cli
│   │   ├── cli.py
│   │   ├── common
│   │   ├── database
│   │   ├── dida365.py
│   │   ├── feishu
│   │   ├── log
│   │   ├── onepassword_connect.py
│   │   ├── onepassword_sa.py
│   │   └── utils
│   └── pytbox.egg-info
│       ├── PKG-INFO
│       ├── SOURCES.txt
│       ├── dependency_links.txt
│       ├── entry_points.txt
│       ├── requires.txt
│       └── top_level.txt
└── tests
    ├── alert
    │   ├── __pycache__
    │   ├── config_dev.toml
    │   ├── test_ping.py
    │   └── test_traffic.py
    ├── categraf
    │   ├── conf
    │   └── instances.toml
    ├── conftest.py
    ├── test_base.py
    ├── test_feishu.py
    ├── test_logger.py
    ├── test_onepassword_connect.py
    ├── test_onepassword_sa.py
    ├── test_victoriametrics.py
    └── utils
        ├── __pycache__
        └── test_timeutils.py
29 directories, 38 files

四、開發環境搭建

我使用的是 devcontainer 作為開發環境,可以用 VSCode 遠程到 Linux 并配置 devcontainer,可以解決環境本身,可以隨時更換 Python 版本,還能解決多人協作開發時,環境配置不一致的問題。

通過 VSCode 的 Remote SSH 登錄到一臺 Linux Server,需要先安裝 Docker 環境。

在項目根目錄下創建 .devcontainer 文件夾,并創建 devcontainer.json 文件,由于內容較長,可以在 github 中搜索 pytbox 項目,并參考我的配置。

Dockfile.dev 參考如下:

# 使用官方 Python 3.11 鏡像作為基礎鏡像
FROM python:3.11-slim
# 設置工作目錄
WORKDIR /app
ENV PYTHONPATH=/app/automation \
    TZ=Asia/Shanghai \
    PIP_DISABLE_PIP_VERSION_CHECK=1 
# 修改為國內源
COPY debian.sources /etc/apt/sources.list.d/debian.sources
# 安裝系統依賴
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

創建完成后可以 Shift + Command/Alt + P ,選擇 Dev Containers: Retbuild Container Without Cache 構建自己的開發環境,需要注意的是,下載鏡像時間會比較久,需要耐心等待。

五、準備 pyproject.toml 文件

yproject.toml 已經取代了過去的 setup.py,成為 構建與依賴管理的統一入口。對于單倉庫、多模塊項目,它不僅定義了整個倉庫的依賴,還能靈活指定每個子模塊的配置。

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "myproject"
version = "0.1.0"
description = "A monorepo Python project"
authors = [{ name = "YourName", email = "you@example.com" }]
license = { text = "MIT" }
readme = "README.md"
requires-python = ">=3.8"
dependencies = [
    "requests>=2.0"
]
[project.optional-dependencies]
dev = ["pytest", "black", "ruff"]

開發環境下安裝依賴可以執行  pip install .[dev] ,另外,如果模塊依賴其他的包,例如 requests ,推薦手動寫入到 dependencies 下。

六、命令行工具

如果有命令行工具的需求,也就是說用戶使用 pip install pytbox 后,希望執行 pytbox --help 使用命令行工具,可以按如下步驟操作。

在 pyproject.toml 下加入:

[project.scripts]
pytbox = "pytbox.cli:main" # 添加命令行入口點

在項目根目錄創建 exec.py 文件,作為入口。

#!/usr/bin/env python3
"""
開發環境可執行文件 - 支持新的模塊化 CLI
"""
import sys
from pathlib import Path
# 添加 src 目錄到 Python 路徑
src_path = Path(__file__).parent / 'src'
if src_path.exists():
    sys.path.insert(0, str(src_path))
from pytbox.cli import main
if __name__ == "__main__":
    main()

在 src/pytbox 下創建 cli.py。

#!/usr/bin/env python3
"""
Pytbox 命令行工具 - 入口文件(保持向后兼容)
"""
from pytbox.cli import main
if __name__ == "__main__":
    main()

然后在 src/pytbox/cli 目錄下創建 main.py。

#!/usr/bin/env python3
"""
Pytbox 主命令行入口
"""
import click
from .categraf import categraf_group
@click.group()
@click.version_option()
def main():
    """Pytbox 命令行工具集合"""
    pass
# 注冊子命令組
main.add_command(categraf_group, name='categraf')
if __name__ == "__main__":
    main()

在 src/pytbox/cli 目錄下就可以創建多個目錄,以實現各種這樣的功能,例如我創建的 src/pytbox/cli/categraf 用于生成 categraf 的配置。

示例文件 src/pytbox/cli/categraf/commands.py

"""
Categraf 相關命令 - 支持 rich 美化輸出
"""
import shutil
from pathlib import Path
import click
from ...utils.richutils import RichUtils
from ...categraf.build_config import BuildConfig
rich_utils = RichUtils()
@click.group()
def categraf_group():
    """Categraf 配置管理工具"""
    pass
@categraf_group.command('get-instances')
@click.option('--output-dir', '-o', type=click.Path(exists=True), default='.')
def get_instances(output_dir):
    """獲取 Categraf 實例配置"""
    instances_template_path = Path(__file__).parent.parent.parent / 'categraf' / 'instances.toml'
    dest_path = Path(output_dir) / 'instances.toml'
    shutil.copy(instances_template_path, dest_path)
    rich_utils.print(msg=f'已將 {instances_template_path} 復制到 {dest_path}', style='info')

七、手動發布到 Pypi

準備 PYPI 的 API Token,這一步需要在 pypi 官網上配置。

export TWINE_USERNAME="__token__"
export TWINE_PASSWORD="pypi-xxxxxxxxxxxxxxxx"

安裝依賴工具并發布。

pip install build twine
# 構建
python -m build
# 發布到 PYPI
twine upload dist/*

八、Github action 自動發布到 Pypi

強烈推薦使用 Action 自動發布,只要推送代碼到 Github 就可以自動完成后續的步驟。

1. 在.github/workflows 目錄下創建 publish.yml 文件。

2. 示例如下:

name: Publish to PyPI
on:
  push:
    tags: [ 'v*' ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Install build tools
        run: pip install build twine
      - name: Build package
        run: python -m build
      - name: Publish to PyPI
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
        run: twine upload dist/*

3. 在倉庫中的 Settings -> Secrets and variables -> Actions -> Repository secrets 下創建 name 為 PYPI_API_TOKEN 的 secret。

4. 推薦使用 shell 腳本 push 到倉庫中,代碼有些長,可以在 pytbox 庫的根目錄下參考 publish.sh。

九、總結

在運維開發中,如果有多項目的需求,基本都是需要公共庫的,否則需要被多項目調用的模塊要重復編寫,復制到其他項目非常不方便,并且難以保證代碼質量,所以非常推薦編寫自己或團隊的公共代碼庫。

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2020-04-09 14:23:44

PythonMarkdown編輯器

2018-03-22 11:00:45

PythonRSS

2021-07-25 21:28:55

人臉識別人工智能工具

2025-02-10 12:00:00

圖像分類OpenCVPython

2018-07-27 16:18:30

PythonTwitter機器人

2015-09-06 10:58:36

PHP框架搭建結構

2015-10-26 13:41:41

Aleax查詢服務

2014-07-30 09:35:36

DockerPaaS

2011-09-09 10:49:18

2013-11-20 09:26:21

AngularJSJavaScript

2012-11-13 11:29:51

Ubuntu

2023-07-30 17:34:53

KV存儲ChunkPosit

2016-09-18 10:08:38

Linux發行版SUSE Studio

2022-02-21 12:29:01

for循環前端

2021-11-05 15:31:01

UbuntuLinux

2020-02-24 11:11:10

IT企業技術

2011-04-26 15:18:23

CentOS發行版

2022-06-23 09:44:01

LinuxLive CD

2023-12-12 13:07:16

2018-04-23 13:10:01

點贊
收藏

51CTO技術棧公眾號

www.在线播放| 动漫精品一区一码二码三码四码| jizz内谢中国亚洲jizz| 欧美激情综合五月色丁香小说| 国产三级精品网站| 激情小说中文字幕| 国产一区二区三区天码| 欧美美女网站色| 日韩免费视频播放| 午夜激情视频在线观看| 成人aa视频在线观看| 国产精品视频精品视频| 麻豆视频在线免费看| 免费观看不卡av| 日韩欧美区一区二| 亚洲高清在线免费观看| 国语对白在线刺激| 国产精品久久久久久久久免费樱桃 | 久久中文字幕av| 亚洲电影免费观看高清| 亚洲欧美日本一区二区三区| 樱花草涩涩www在线播放| 亚洲色图制服诱惑| 日本午夜精品电影| 日批视频在线播放| 国产一区二区三区在线观看精品| 欧美中文字幕视频| 国产亚洲精品成人| 一区二区影视| 色系列之999| 真实乱视频国产免费观看| aaa国产精品| 日韩一级二级三级| 激情在线观看视频| 经典三级一区二区| 欧美午夜性色大片在线观看| 91精品一区二区三区四区| a天堂中文在线| 久久综合999| 韩国成人一区| 免费观看毛片网站| 成人av午夜影院| 国产成人精品福利一区二区三区 | 亚洲精品日产| 亚洲第一av色| 欧美乱大交xxxxx潮喷l头像| 在线看一级片| 亚洲另类在线一区| 国产香蕉一区二区三区| 精品视频在线一区二区| 国产精品福利在线播放| 亚洲成人av动漫| 92国产在线视频| 国产精品青草综合久久久久99| 免费在线国产精品| 韩国中文免费在线视频| 久久久久久久久久久99999| 免费看成人午夜电影| 亚洲色欧美另类| 91麻豆国产精品久久| 久草精品电影| 九色在线观看| 中文字幕乱码亚洲精品一区| 亚洲最大免费| a黄色片在线观看| 亚洲乱码中文字幕| 欧美精品卡一卡二| 日本乱码一区二区三区不卡| 色综合久久99| 亚洲国产高清av| 国产一区二区三区视频在线 | 国产成人鲁鲁免费视频a| 久久久久久在线观看| 免费成人av资源网| 91人人爽人人爽人人精88v| 精品国产伦一区二区三区| 国产成人免费视频网站| 国产一区二区不卡视频在线观看| 三级在线观看| 国产精品麻豆视频| 日韩精品一区二区在线视频| 日本免费一区二区六区| 欧美视频日韩视频| 三级黄色片免费观看| 国产主播性色av福利精品一区| 亚洲免费小视频| jizzjizz日本少妇| 伊人久久大香线蕉综合热线| 日韩av电影在线免费播放| 自拍偷拍色综合| 国产精品996| 欧美日韩在线高清| av激情在线| 色欧美乱欧美15图片| 欧美又黄又嫩大片a级| 农村少妇一区二区三区四区五区| 一区二区三欧美| 日韩在线观看视频一区二区| 午夜亚洲视频| 成人免费网站在线看| 五月婷婷六月丁香| 亚洲图片激情小说| 草草久久久无码国产专区| 国产精品成人3p一区二区三区| 亚洲精品国产欧美| 日韩成人毛片视频| 日精品一区二区| 国产伦精品一区二区三区在线 | 欧美激情国内自拍| 蜜桃一区二区| 久久久久久久久电影| 又骚又黄的视频| www.欧美日韩| 女女百合国产免费网站| 姬川优奈av一区二区在线电影| 日韩欧美一二三区| 亚洲色偷偷综合亚洲av伊人| 久久精品一本| 久草精品电影| 国产三线在线| 欧美一区2区视频在线观看| 无码一区二区三区在线| 尹人成人综合网| 亚洲综合第一页| 亚洲搞黄视频| 色综合久久久久综合体桃花网| 在线观看免费视频国产| 香蕉av一区二区| 国产精品视频一| 蜜桃视频在线观看网站| 婷婷国产v国产偷v亚洲高清| 久久无码人妻一区二区三区| 日韩欧美午夜| 国产精品美女www| 男人的天堂在线| 欧美视频13p| 91福利视频免费观看| 亚洲五月综合| 91视频国产高清| 美女羞羞视频在线观看| 欧美色图12p| 国产在线观看h| 视频一区在线视频| 欧美精品尤物在线| 女生影院久久| 亚洲午夜久久久久久久| 一级片免费在线播放| 国产亚洲人成网站| 亚洲国产精品毛片av不卡在线| 久久av网址| 国产成人精品免费视频| 国产精品久久久久一区二区国产| 在线一区二区观看| 久久午夜精品视频| 久久精品国产一区二区| 国产又黄又爽免费视频| 亚洲第一二区| 午夜精品福利在线观看| 男人天堂亚洲二区| 欧美日韩一区中文字幕| 黄色免费一级视频| 精品亚洲成a人| 在线观看成人免费| 视频精品一区| 97涩涩爰在线观看亚洲| 久久视频www| 欧美日韩综合一区| 国产日韩欧美在线观看视频| 成人av在线一区二区| 116极品美女午夜一级| 欧美一区二区三| 成人精品网站在线观看| а_天堂中文在线| 亚洲精选在线观看| 亚洲一卡二卡在线观看| 亚洲黄色免费网站| 国产精品探花一区二区在线观看| 日韩精品1区2区3区| 在线免费观看成人网| av综合网页| 日本欧美中文字幕| 免费av在线网站| 亚洲精品在线一区二区| 自拍偷拍18p| 亚洲美女淫视频| 中文字幕xxx| 韩国女主播成人在线观看| 日韩视频免费播放| 久久国产中文字幕| 国产精品yjizz| 日本一区二区三区视频在线| 欧美激情精品在线| 国产美女视频一区二区三区| 日韩午夜小视频| 神马久久久久久久| 一区二区三区免费网站| 国产亚洲精品熟女国产成人| 国产不卡一区视频| www亚洲成人| 亚洲久久一区二区| 综合操久久久| 国产成人久久| 动漫美女被爆操久久久| 青青伊人久久| 啪一啪鲁一鲁2019在线视频| 97caopor国产在线视频| 中文字幕欧美国内| 天天干天天爱天天操| 91精品综合久久久久久| 国产成人无码专区| 亚洲宅男天堂在线观看无病毒| 免费看的黄色网| 91在线观看下载| 北条麻妃亚洲一区| 免播放器亚洲一区| 爱福利视频一区二区| 亚洲天堂久久| 国产美女视频免费| 欧美日韩国产传媒| 黄色小网站91| 波多野结衣在线一区二区| 91精品久久久久久久久青青| **欧美日韩在线观看| 亚洲91精品在线| 日本片在线观看| 久久久精品在线观看| 888av在线| 国产一区二区三区视频在线观看| 人妻精品无码一区二区| 精品奇米国产一区二区三区| 91国产精品一区| 欧美日韩色综合| 亚洲av无码不卡| 色999日韩国产欧美一区二区| 免费在线观看黄网站| 亚洲成人在线免费| 久久精品国产亚洲av香蕉| 一区二区三区中文字幕电影| 成人做爰视频网站| 亚洲三级小视频| 国产suv精品一区二区68| 最好看的中文字幕久久| 男人av资源站| 国产精品不卡在线| 人妻人人澡人人添人人爽| 亚洲丝袜美腿综合| 国产黄在线免费观看| 最新日韩av在线| 国产suv一区二区三区| 亚洲男人的天堂在线aⅴ视频| 懂色av懂色av粉嫩av| 一区二区在线观看视频在线观看| 波多野结衣亚洲色图| 亚洲综合色丁香婷婷六月图片| 久草免费在线视频观看| 性久久久久久久久久久久| 亚洲一区欧美在线| 色婷婷亚洲一区二区三区| 伊人久久久久久久久久久久| 欧美天堂一区二区三区| 国产又大又黑又粗| 日韩欧美国产综合在线一区二区三区 | 国产欧美精品| 欧美污视频网站| 免费在线观看视频一区| 一个色综合久久| 国产成人在线影院| 中出视频在线观看| 国产人久久人人人人爽| 免费精品在线视频| 亚洲综合成人在线视频| 三级黄色在线视频| 欧美色视频在线观看| 国产视频第一页| 亚洲国产欧美一区二区三区同亚洲| 日韩资源在线| www.日韩av.com| free性护士videos欧美| 国产精品大陆在线观看| 成人免费观看49www在线观看| 国产91亚洲精品一区二区三区| 欧美变态网站| 亚洲午夜精品国产| 91久久久久| 久久撸在线视频| 波多野结衣中文一区| 99久久99久久精品免费看小说.| 亚洲激情欧美激情| 无码人妻久久一区二区三区不卡| 欧美日本在线观看| 少妇一级淫片免费看| 国产午夜精品视频| www视频在线免费观看| 欧美在线视频一区| 伦一区二区三区中文字幕v亚洲| 国产精品久久国产三级国电话系列| 国产成人1区| 久久这里只有精品8| 日本欧美一区二区| 大乳护士喂奶hd| 亚洲视频精选在线| 日韩在线视频不卡| 精品久久久久久久人人人人传媒| 岛国大片在线观看| 久久久久免费视频| 亚洲精品自拍| 蜜桃传媒视频第一区入口在线看| 欧美精品首页| 国产一二三区av| 久久久天堂av| 久久露脸国语精品国产91| 欧美一级精品在线| 成人网视频在线观看| 97精品免费视频| 日韩中文字幕| 欧美性视频在线播放| 免费观看成人鲁鲁鲁鲁鲁视频| 屁屁影院国产第一页| 亚洲免费看黄网站| 亚洲天堂一二三| 亚洲女人被黑人巨大进入al| 波多野结衣中文字幕久久| 亚洲一区二区久久久久久 | 91亚洲精品国产| 国产一区在线观看视频| 欧美h片在线观看| 在线免费观看不卡av| 青青草视频免费在线观看| 欧美精品久久久久a| 午夜视频一区二区在线观看| 看全色黄大色大片| 激情六月婷婷综合| 战狼4完整免费观看在线播放版| 欧美综合欧美视频| 国产日产精品久久久久久婷婷| 热久久99这里有精品| 清纯唯美亚洲经典中文字幕| 亚洲精品蜜桃久久久久久| 国产精品原创巨作av| 欧美成人三级在线观看| 欧美一级片在线观看| av在线播放国产| 91丨九色丨国产| 亚洲午夜视频| 日本一卡二卡在线| 天天操天天干天天综合网| 奇米视频7777| 亚洲一区二区毛片| av在线网站观看| 日韩欧美在线看| 韩日视频在线| 国产精品一区二区久久久| 久久中文字幕av一区二区不卡| 天天摸天天舔天天操| 亚洲日本在线看| 国产极品久久久| 久久久久国产视频| 欧美顶级毛片在线播放| 精品免费国产一区二区| 日韩久久精品| 青青草原播放器| 亚洲图片有声小说| 天堂网在线播放| 日本国产高清不卡| 91蜜臀精品国产自偷在线| 五月天六月丁香| 亚洲成人免费观看| 毛片在线播放网址| 国产精品一区二区三区免费视频| 午夜精品视频一区二区三区在线看| 亚洲免费在线播放视频| 亚洲电影第三页| 国产免费av在线| 91在线国产电影| 99av国产精品欲麻豆| 亚洲天堂岛国片| 日韩欧美一区在线观看| www.九色在线| 一本一本a久久| 成人午夜视频免费看| 亚洲色成人www永久网站| www.xxxx欧美| 免费成人三级| 超碰人人草人人| 欧美日韩另类视频| 日本暖暖在线视频| 国产亚洲欧美一区二区三区| 秋霞国产午夜精品免费视频| 丝袜美腿小色网| 亚洲欧美日本精品| 国产一区二区视频在线看| 精品一卡二卡三卡| 亚洲精品成人精品456| 日韩大胆人体| 亚洲自拍在线观看| 久久一区欧美| 国产一级二级毛片| 日韩视频欧美视频| 五月综合久久| 原创真实夫妻啪啪av|