日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

jekenis父子结构项目打包_全栈之DevOps系列 - 发布 Python 项目 开源/私有 包

發布時間:2025/3/12 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jekenis父子结构项目打包_全栈之DevOps系列 - 发布 Python 项目 开源/私有 包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DevOps目前并沒有權威的定義,普遍認為,DevOps 強調的是高效組織團隊之間如何通過自動化的工具協作和溝通來完成軟件的生命周期管理,從而更快、更頻繁地交付更穩定的軟件。

作者以 dukepy 系列項目中 dkimageapp 子項目(關于圖像處理的實用工具Python依賴庫模塊)的發布為例,詳細解釋了發布的每個步驟。作者建議與 dkimageapp 項目一樣,在構建整個項目的時候,使用項目模板來進行初始化構建,這樣項目結構也比較優秀,推薦 cookiecutter-pypackage(快速建立工程模板的Python命令行工具)項目。使用示例:

pip install cookiecuttercookiecutter https://gitee.com/siq/cookiecutter-pypackage.git

dkimageapp 代碼和文檔托管于Gitee:

61Duke/dkimageapp?gitee.com

作者在2017-09-27寫的《打包自己寫的python庫(betubedl)并且發布到pypi上》上有一段對pypi和pip挺有意思說法,不見得正確,做此記錄:

pip 是一個現代的,通用的 Python 包管理工具。提供了對Python 包的查找、下載、安裝、卸載的功能。而PyPI(Python Package Index)是python官方的第三方庫的倉庫,所有人都可以下載第三方庫或上傳自己開發的庫到PyPI。PyPI推薦使用pip包管理器來下載第三方庫。所以這兩者在我看來,就是父子關系。PyPI帶領著pip這個包管理器為python的開源資源庫夜以繼日地忙碌著。

注意:本文假設你已經有一個想要打包和發布的項目。

第 0 步:獲取項目許可證

在做其他事之前,由于你的項目要開源,因此應該有一個許可證。獲取哪種許可證取決于項目包的使用方式。開源項目中一些常見許可證有 MIT 或 BSD。如果是公司企業私有項目,最好也有類似的許可證聲明,允許或者不允許使用者就行轉載、使用,這樣項目生態會更加規范。當然,這個不是必要的。

cookiecutter-pypackage 項目中提供可以選擇的開源許可證,直接使用就好。

第 1 步:讓你的代碼準備就緒

要將項目進行打包,你需要做一些預備工作:

  • 讓你的項目結構正確就位。通常情況下,項目庫的根目錄包含一個以項目名稱命名的文件夾,項目的核心代碼應該位于此文件夾中。在這個文件夾之外是運行和構建包(測試、文檔等)所需的其他代碼。
  • 核心文件夾應包括一個(或多個)模塊和一個 __init__.py 文件,該文件包含你希望讓終端用戶訪問的類/函數。此文件還可以包含包的版本,以便于終端用戶訪問。
  • 理想情況下,應使用 logging 包來設置合理的日志記錄系統(而不是用 print 輸出)。
  • 理想情況下,應將你的核心代碼分配到一個或多個類中。

cookiecutter-pypackage 項目中上述項目準備工作,直接使用就好。

以 dkimageapp 項目為例:

dkimageapp 項目結構示例

第 2 步:使用打包工具創建 setup.py

在你的項目有了一套結構之后,你應該在項目庫的根目錄下添加 setup.py 文件。這有助于所有發布和版本維護過程的自動化。以下是 dkimageapp 的 setup.py 的示例:

#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (c) 61DUke.# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR # PURPOSE. # See the Readme Document for more details. # Create: 2020-12-27"""The setup script."""from setuptools import setup, find_packages import oswith open("README.rst", "r", encoding="utf-8") as readme_file:readme = readme_file.read()with open("HISTORY.rst", "r", encoding="utf-8") as history_file:history = history_file.read()dir_ = os.path.dirname(os.path.abspath(__file__)) requirements = open(os.path.join(dir_, "requirements.txt"), "r", encoding="utf-8").read().splitlines()setup_requirements = ["pytest-runner", ]test_requirements = ["pytest>=3", ]setup(author="61Duke",author_email="loveweihaitong@foxmail.com",python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",classifiers=["Development Status :: 2 - Pre-Alpha","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Natural Language :: English","Programming Language :: Python :: 2","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3","Programming Language :: Python :: 3.5","Programming Language :: Python :: 3.6","Programming Language :: Python :: 3.7",],description="dkimageapp是61Duke于2020年整合工作與學習研發關于圖像處理的實用工具Python依賴庫模塊,該模塊統一規范的API""接口,承載個人未來工作中開發有關圖像處理實際應用。該模塊由算法科學家61Duke獨家研發,提供圖像裁剪、合并、圖像格式轉換、""色調占比提取、顏色相似度、圖像定位和圖像檢索等功能。dkimageapp 模塊為各個項目和業務提供支持。",entry_points={"console_scripts": ["dkimageapp=dkimageapp.cli:main",],},install_requires=requirements,license="MIT license",long_description=readme + "nn" + history,include_package_data=True,keywords="dkimageapp",name="dkimageapp",packages=find_packages(include=["dkimageapp", "dkimageapp.*"]),setup_requires=setup_requirements,test_suite="tests",tests_require=test_requirements,url="https://gitee.com/weihaitong/dkimageapp",version="0.1.0",zip_safe=False, )

cookiecutter-pypackage 項目中也會將setup.py生成好,直接使用就好。

注意事項:

  • 如果你的包有依賴項,處理這些依賴項的簡單方法是在配置文件中通過 install_requires 參數來添加依賴項(如果列表很長,你可以像上面那樣指向一個 requirements.txt 文件)。
  • 如果你希望在任何人安裝包時(從項目庫中)下載元數據,則應通過 package_data 參數來添加這些元數據。
  • 有關 setup() 函數的更多信息,請參見:setuptools 文檔

注意:第 3 步到第 6 步是可選的(但強烈推薦),但是如果你現在馬上想發布你的包,可以直接跳到第 7 步。

第 3 步:設置本地測試和檢查測試覆蓋率

此時還沒有完成,你的項目還應該有單元測試。盡管有許多框架能幫助你做到,但一種簡單的方法是使用 pytest。所有測試都應該放在一個專用的文件夾中(例如名為 tests/或 testing 的文件夾)。在這個文件夾中放置你需要的所有測試文件,以便盡可能多地包含你的核心代碼。

第 4 步:標準化語法和代碼風格

你還需要確保你的代碼遵循 PEP8 準則(即具有標準樣式并且語法正確)。同樣,有很多工具可以幫助你解決。這里我們用了 flake8。

第 5 步:創建一個合理的文檔

現在你的項目已經測試過了,結構也很好了,是時候添加一個合理的文檔。首先是要有一個好的 readme 文件,它會在你的代碼托管項目庫的根目錄上顯示。

由于 readme 文件應該相當綜合,因此通常會有一個更詳細的文檔。你可以用 sphinx 來完成,然后在 readthedocs 上管理文檔。與文檔相關的文件通常放在 docs/文件夾中。sphinx 和 readthedocs 相關教程。

cookiecutter-pypackage 項目中也會生成很多標準的項目文檔和作者、貢獻和歷史等文檔,直接使用就好。

以下是 dkimageapp 的 README.rst 的示例:

第 6 步:創建持續集成

此時,你的項目離發布就緒不遠了。但是,在每次提交之后,必須更新文檔、運行測試以及檢查樣式和覆蓋率似乎有點難以應付。幸運的是,持續集成(CI)可以幫助你完成。你可以在每次提交之后使用 GitHub 的 webhook 來自動執行所有的這些操作。

第 7 步:創建你的第一個 release 和 publication

構建發布版本的包

在項目根目錄下使用 python setup.py sdist bdist_wheel ,這將在新創建的dist目錄中創建兩個文件,一個源歸檔文件和一個wheel文件。以 dkimageapp 項目為例:

開源:

PyPI:首先需要創建一個帳戶(注冊傳送門PyPI),其次在項目根目錄下使用 twine upload dist/* 去上傳并發布包給開源的PyPI社區倉庫。

私有(使用pypiserver):

  • 安裝依賴 :pip install pypiserver passlib
  • 創建packages目錄
  • 以無認證方式啟動pypiserver:pypi-server -p 8080 -P . -a . ./packages
  • 上傳到私有pypi服務:twine upload --repository-url https://test.pypi.org/legacy/ dist/*
  • 以 dkimageapp 項目為例:

    使用密碼保護PyPI源

    當希望使用密碼來控制Python包的上傳操作的時候, 需要使用Apache htpasswd 文件.

    pypiserver 需要 passlib 包來讀取 htpasswd 文件. 使用以下命令來安裝 passlib :

    pip install passlib

    要生成 htpasswd 文件, 需要安裝 apache2-utils 工具包. 在Ubuntu上使用以下命令安裝:

    apt-get install -y apache2-utils

    接下來就可以用 htpasswd 命令來生成密碼文件. 假設密碼文件路徑為 /root/.pypipasswd , 第一次生成密碼文件的命令如下:

    htpasswd -c /root/.pypipasswd sam

    上述命令中的最后一個參數sam是用戶名, 執行命令后, 會提示輸入密碼.

    當需要在已有的密碼文件中添加新的用戶名和密碼時, 不能再使用-c參數, 否則會將已有的數據覆蓋. 比如, 要在上一步生成的文件里添加一個新用戶名 john :

    htpasswd /root/.pypipasswd john

    接下來就可以使用密碼文件來控制上傳操作了. 當啟動 pypiserver 時, 通過-P參數來指定所要使用的密碼文件. 默認情況下, 上傳操作會需要密碼驗證, 如果希望其他操作也需要密碼驗證, 可以使用-a參數. 具體-a參數的使用可以查閱_pypiserver_的啟動命令幫助, 這里不再展開.

    pypi-server -P /root/.pypipasswd

    第 7 步:下載使用發布的庫

    以 dkimageapp 項目為例:

    現在,你的包應該已經發出去,并且任何人/指定人可以使用了!雖然大部分工作都完成了,但是你仍然需要維護你的項目,你需要進行一些更新:這大體上意味著每次進行重大更改時都要更改版本,創建新的 release,并再次執行第 7 步。


    本文為2017-09-27的《打包自己寫的python庫(betubedl)并且發布到pypi上》博客的遷移,并做了全面性擴展,日后在此繼續更新內容...

    贊助

    感謝支持 感謝贊助 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的jekenis父子结构项目打包_全栈之DevOps系列 - 发布 Python 项目 开源/私有 包的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。