<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python | 如何發(fā)布自己的庫到 PYPI(可通過pip安裝)

          共 4507字,需瀏覽 10分鐘

           ·

          2021-01-24 07:18

          在我們安裝 Python第三方庫的時候,通常都是通過pip命令安裝。

          pip install xxx

          真是又酷炫又方便!


          那么,當我們自己寫了一些自認為不錯的庫,想要分享給大家使用(或者是想要裝X時)能不能也能做到這樣呢?

          來源:知乎 -?霾大

          鏈接:https://zhuanlan.zhihu.com/p/79164800


          環(huán)境需求

          1. 擁有一個 PyPI · The Python Package Index 的賬號

          2. 已經(jīng)寫好能正常使用的庫/方法/項目 (可本地調(diào)用)


          步驟

          1. 創(chuàng)建一個這樣的目錄結(jié)構(gòu),我們接下來的命令都在 example_pkg/__init__.py 目錄進行

          /packaging_tutorial  /example_pkg    __init__.py

          2. 編輯 example_pkg/__init__.py ,寫入以下內(nèi)容

          name = "example_pkg"

          3. 創(chuàng)建 packaging_tutorial/setup.py


          setup.py 是 setuptools 的構(gòu)建腳本,用于告知 setuptools 我們要上傳到PYPI的庫的信息(庫名、版本信息、描述、環(huán)境需求等)。


          下面是 setup.py 的示例:

          import setuptools
          with open("README.md", "r") as fh: long_description = fh.read()
          setuptools.setup( name="example-pkg-your-username", version="0.0.1", author="Example Author", author_email="[email protected]", description="A small example package", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/pypa/sampleproject", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ],)

          參數(shù)解析

          • name:庫名

          • version:版本號

          • author:作者

          • author_email:作者郵箱(如:別人發(fā)現(xiàn)了bug或者提建議給我們添加功能聯(lián)系我們用的)

          • description:簡述

          • long_description:詳細描述(一般會寫在README.md中)

          • long_description_content_type:README.md中描述的語法(一般為markdown)

          • url:庫/項目主頁,一般我們把項目托管在GitHub,放該項目的GitHub地址即可

          • packages:使用setuptools.find_packages()即可,這個是方便以后我們給庫拓展新功能的(詳情請看官方文檔)

          • classifiers:指定該庫依賴的Python版本、license、操作系統(tǒng)之類的


          4. 創(chuàng)建 packaging_tutorial/README.md ,向其寫入自己對該庫的簡介、描述。

          # Example Package
          This is a simple example package. You can use[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)to write your content.

          5. 創(chuàng)建 packaging_tutorial/LICENSE ,對于每一個創(chuàng)建的庫來說 LICENSE 是很重要的,這告訴大家我們的庫能用在什么方面(商用?之類的)還有免責啊之類的;一般來說我們選擇MIT。

          MIT License
          Copyright (c) [year] [fullname]
          Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:
          The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.
          THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.

          MIT LICENSE 的大概意思是

          • 軟件可以隨便用,隨便改

          • 可以免費,可以收費

          • 軟件的源文件里必須有這個許可證文檔

          • 我提供這個軟件不是為了犯法,你要用它來犯法,那與我無關(guān)

          • 你用這個軟件犯事了,責任全在你自己,與其他貢獻者無關(guān)


          關(guān)于 setup.py 的寫法,大家可以參照我先前寫的 maida 庫,地址我會放在文末。


          6. 確保我們已安裝最新setuptoolswheeltwine ,下面是安裝/更新命令

          python3 -m pip install --user --upgrade setuptools wheel twine

          7. 打包的我們的庫/項目

          python3 setup.py sdist bdist_wheel

          此時在當前目錄我們會看到以下:

          dist/  example_pkg_your_username-0.0.1-py3-none-any.whl  example_pkg_your_username-0.0.1.tar.gz

          8. 使用 twine 將打包好的庫/項目上傳到PYPI

          (需用到PYPI帳號密碼)(此時只是上傳到PYPI測試服,還不能 pip install 這個庫/項目)

          python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

          我們會看到如下界面:

          上傳成功之后,我們可以去PYPI的測試服查看是否上傳成功,能上傳成功的話就說明肯定也能成功上傳到PYPI正式服(附:PYPI測試服地址)。


          PYPI測試服的管理員會不定期刪除上邊的庫,正式投入使用還是得上傳到正式服。由于我先前有上傳庫到測試服,我們可以嘗試搜索看看。

          若是想測試下上傳到測試服的庫能否使用,可以使用如下命令:

          python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-your-username

          大致會出現(xiàn)以下:

          Collecting example-pkg-your-username  Downloading https://test-files.pythonhosted.org/packages/.../example-pkg-your-username-0.0.1-py3-none-any.whlInstalling collected packages: example-pkg-your-usernameSuccessfully?installed?example-pkg-your-username-0.0.1

          若是從測試服安裝的我們的庫能正常使用,那么我們就可以開始行動把它上傳到PYPI正式服供大家使用了。(之所以特地提出這一步,是因為第一次上傳庫時,我們總會因為目錄結(jié)構(gòu)不會、未打包成庫可正常使用打包了卻不能用等等原因?qū)е律蟼鞯氖莻€“失敗的庫”,這樣能避免別人會安裝到我們的失敗庫)。


          簡單測試是否能正常使用直接如下即可,但具體里邊的功能能否正常用我們還需調(diào)用一下,此處不做介紹。

          >>> import example_pkg>>> example_pkg.name'example_pkg'

          9. 【重頭戲】將庫上傳到 PYPI正式服

          twine upload dist/*

          上傳成功后該庫即可直接pip安裝。


          如何指定安裝自己庫的依賴庫

          setup(    ...    install_requires=[        '你的庫依賴的第三方庫(也可以指定版本)',        # exapmle        'pyautogui',        'Django >= 1.11, != 1.11.1, <= 2',    ],)


          官方文檔傳送門

          Packaging Python Projects

          https://packaging.python.org/tutorials/packaging-projects/


          有知有行

          [ 完 ]

          對了,看完記得一鍵四連,這個對我真的很重要。


          瀏覽 76
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  哪里有免费的国产在线黄色电影 | 波多野吉衣av | 国产无遮挡啪视频 | 欧美多人操逼 | 69国产成年A片免费观看软件 |