<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>

          如何創(chuàng)建 Python 庫

          共 6170字,需瀏覽 13分鐘

           ·

          2021-09-10 20:56

          閱讀本文大概需要6分鐘

          你好,我是悅創(chuàng)。

          原本要錄視頻來著,可是這該死的舍友,玩游戲吵死,在錄第十個(gè)版本的時(shí)候,我放棄了。后面找機(jī)會(huì)補(bǔ)上哈!


          我最近想要去開始開發(fā) Python 第三方庫,但是發(fā)現(xiàn)國內(nèi)這樣的教程太少了,所以就我來寫吧!


          還有就是曾經(jīng)想創(chuàng)建一個(gè) Python 庫,無論是為您的工作團(tuán)隊(duì)還是在線的一些開源項(xiàng)目?在此博客中,您將學(xué)習(xí)如何操作!


          當(dāng)您使用相同的開發(fā)工具 Pycharm ,你會(huì)最容易跟上我的教程,當(dāng)然您也可以使用不同的工具。


          本文章使用的是工具有:

          • Pycharm
          • Linux 命令行

          第 1 步:創(chuàng)建一個(gè)要放置庫的目錄

          打開命令提示符并創(chuàng)建一個(gè)文件夾,您將在其中創(chuàng)建 Python 庫。


          請(qǐng)記住:

          • pwd 您可以看到您當(dāng)前的工作目錄。
          • ls 您可以列出當(dāng)前目錄中的文件夾和文件。
          • cd <path> 您可以更改當(dāng)前所在的目錄。
          • mkdir <folder> 您可以在當(dāng)前工作目錄中創(chuàng)建一個(gè)新文件夾。

          在我的例子中,我將使用的文件夾是 mypythonlibrary 。將當(dāng)前工作目錄更改為文件夾。



          第 2 步:為您的文件夾創(chuàng)建一個(gè)虛擬環(huán)境

          在啟動(dòng)您的項(xiàng)目時(shí),創(chuàng)建一個(gè)虛擬環(huán)境來封裝您的項(xiàng)目總是一個(gè)好主意。虛擬環(huán)境由某個(gè) Python 版本和一些庫組成。參考:這么全的 Python 虛擬環(huán)境?不看可惜了!

          虛擬環(huán)境可防止以后遇到依賴性問題。

          例如,在較舊的項(xiàng)目中,您可能使用的是較舊版本的 numpy 庫。一些曾經(jīng)運(yùn)行良好的舊代碼可能會(huì)在你更新 numpy 版本后不能正常運(yùn)行了。

          創(chuàng)建虛擬環(huán)境可以防止這種情況,當(dāng)你與其他人協(xié)作時(shí),虛擬環(huán)境也能確保你的程序在其他人的電腦上正常運(yùn)行。

          接下來,你要確保你當(dāng)前的工作目錄是你剛剛創(chuàng)建的目錄,( cd <path/to/folder> ) 中創(chuàng)建 Python 庫的文件夾。)

          繼續(xù)并通過鍵入以下內(nèi)容創(chuàng)建虛擬環(huán)境:

          python3 -m venv venv

          創(chuàng)建后,你現(xiàn)在必須使用以下命令激活環(huán)境:

          source venv/bin/activate

          PS:Windows

          venv\Scripts\activate

          激活虛擬環(huán)境會(huì)修改 PATHshell 的變量,以指向您創(chuàng)建的特定虛擬環(huán)境 Python 的設(shè)置。PATHLinux 和其他類 Unix 操作系統(tǒng)中的環(huán)境變量,它告訴 shell 在響應(yīng)用戶發(fā)出的命令時(shí),去搜索哪些目錄的 Python 執(zhí)行環(huán)境(即準(zhǔn)備運(yùn)行的程序)。命令提示符將更改為通過添加 ( yourenvname) 來指示您當(dāng)前所在的虛擬環(huán)境。

          你要確保你的環(huán)境已經(jīng)安裝了 pip、wheel、setuptools、twine。我們稍后將需要它們來構(gòu)建我們的 Python 庫。

          sudo pip install wheel setuptools twine
          安裝庫

          我用的是 Linux 所以,Windows 的話,去掉 sudo。

          第 3 步:創(chuàng)建文件夾結(jié)構(gòu)

          這一步,也就是創(chuàng)建我們開發(fā)庫所需要的文件。

          在 Pycharm 中,打開您的文件夾 mypythonlibrary(或你自己創(chuàng)建的文件夾名稱)。它應(yīng)該是這樣的:

          實(shí)際目錄

          現(xiàn)在可以開始向項(xiàng)目添加文件夾和文件。您可以通過命令提示符或在 Visual Studio Code 本身中執(zhí)行此操作。

          1. 創(chuàng)建一個(gè)名為 setup.py  這是創(chuàng)建 Python 庫時(shí)最重要的文件之一!
          2. 創(chuàng)建一個(gè)名為 README.md  你可以在此處編寫 Markdown 以向其他用戶描述我們的庫內(nèi)容。
          3. 創(chuàng)建一個(gè)名為 mypythonlib ,或者任何您希望在 pip 安裝時(shí)調(diào)用 Python 庫的文件夾。(如果你想稍后發(fā)布它,該名稱在 pip 上應(yīng)該是唯一的。)
          4. 在 mypythonlib 文件夾里面,創(chuàng)建名為 __init__.py 基本上,任何包含文件的 __init__.py 文件夾,在我們構(gòu)建庫的時(shí)候,包含在庫中。大多數(shù)情況下,您可以將 __init__.py 文件留空,也就是不用寫代碼。導(dǎo)入時(shí),其中的 __init__.py 將被執(zhí)行,因此它應(yīng)該只包含能夠運(yùn)行您的項(xiàng)目所需的最少量代碼。現(xiàn)在,我們將保持原樣。
          5. 此外,在 mypythonlib  文件夾中,創(chuàng)建一個(gè)名為 myfunctions.py
          6. 最后,在您的根文件夾中創(chuàng)建一個(gè)文件夾測試。在里面,創(chuàng)建一個(gè)空 __init__.py 文件和一個(gè)空的 test_myfunctions.py

          你所創(chuàng)建的文件夾和代碼文件,現(xiàn)在應(yīng)如下所示:

          項(xiàng)目目錄結(jié)構(gòu)

          第 4 步:為您的庫創(chuàng)建內(nèi)容

          要將函數(shù)放入庫中,您可以將它們放入 myfunctions.py 文件中。例如,復(fù)制文件中的 hasrsine 函數(shù):

          import numpy as np
          def haversine(lon1: float, lat1: float, lon2: float, lat2: float) -> float:
          """
          Calculate the great circle distance between two points on the
          earth (specified in decimal degrees), returns the distance in
          meters.
          All arguments must be of equal length.
          :param lon1: longitude of first place
          :param lat1: latitude of first place
          :param lon2: longitude of second place
          :param lat2: latitude of second place
          :return: distance in meters between the two sets of coordinates
          """

          # Convert decimal degrees to radians
          lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
          # Haversine formula
          dlon = lon2 - lon1
          dlat = lat2 - lat1
          a = np.sin(dlat / 2.0) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2.0) ** 2
          c = 2 * np.arcsin(np.sqrt(a))
          km = 6367 * c
          return km * 1000

          這個(gè)函數(shù)將給出兩個(gè)緯度和經(jīng)度點(diǎn)之間的距離,單位為米。

          每當(dāng)您編寫任何代碼時(shí),都強(qiáng)烈建議同時(shí)為該代碼編寫測試。對(duì)于 Python 測試,可以使用 pytestpytest-runner 庫。在虛擬環(huán)境中安裝庫:

          pip install pytest
          pip install pytest-runner
          pip install numpy

          讓我們?yōu)?haversine 函數(shù)創(chuàng)建一個(gè)小測試。復(fù)制以下內(nèi)容并將其放入 test_myfunctions.py 文件中:

          from mypythonlib import myfunctions


          def test_haversine():
          assert myfunctions.haversine(52.370216, 4.895168, 52.520008,
          13.404954) == 945793.4375088713

          最后,讓我們創(chuàng)建一個(gè) setup.py 文件,它將幫助我們構(gòu)建庫。setup.py 的內(nèi)容如下所示:

          from setuptools import find_packages, setup

          setup(
          name='mypythonlib',
          packages=find_packages(),
          version='0.1.0',
          description='My first Python library',
          author='Me',
          license='MIT',
          )

          第 5 步:設(shè)置您想要?jiǎng)?chuàng)建的包

          雖然原則上 find_packages() 可以不帶任何參數(shù)使用,但這可能會(huì)導(dǎo)致包含不需要的包。

          所以,我們可以這么來寫:

          setup(
          name='mypythonlib',
          packages=find_packages(include=['mypythonlib']),
          version='0.1.0',
          description='My first Python library',
          author='Me',
          license='MIT',
          )

          第 6 步:設(shè)置庫所需的要求

          注意,當(dāng)你的項(xiàng)目被其他人作為依賴項(xiàng)安裝時(shí),pip 不會(huì)使用requirements.yml/ requirements.txt

          通常,為此,您必須在文件的 install_requires tests_require 參數(shù)中指定依賴項(xiàng) setup.py

          Install_requires 應(yīng)該僅限于絕對(duì)需要的軟件包列表。這是因?yàn)槟幌胱層脩舭惭b不必要的軟件包。另請(qǐng)注意,你不需要列出屬于標(biāo)準(zhǔn) Python 庫的包。

          如果你用的是 Python 自帶的庫,是可以不用寫的,并且保證這個(gè)庫是一直到現(xiàn)在的 Python 本版的可以使用的。

          也許你還記得我們 pytest numpy 之前安裝過這個(gè)庫。當(dāng)然,你不想在其中添加 pytest 依賴項(xiàng)。這個(gè)包的用戶不需要它。為了僅在運(yùn)行測試時(shí)自動(dòng)安裝它,您可以將以下內(nèi)容添加到您的 setup.py

          from setuptools import find_packages, setup

          setup(
          name='mypythonlib', # 應(yīng)用名
          packages=find_packages(include=['mypythonlib']),
          version='0.1.0', # 版本號(hào)
          description='My first Python library',
          author='Me',
          license='MIT',
          install_requires=["numpy==1.21.2"], # 依賴列表
          setup_requires=['pytest-runner'],
          tests_require=['pytest==6.2.4'],
          test_suite='tests',
          )

          運(yùn)行:將執(zhí)行存儲(chǔ)在 “tests” 文件夾中的所有測試。

          python setup.py pytest
          (venv) aiyc@aiyc:~/Linux_Code/mypythonlibrary$ python setup.py pytest
          running pytest
          running egg_info
          creating mypythonlib.egg-info
          writing mypythonlib.egg-info/PKG-INFO
          writing dependency_links to mypythonlib.egg-info/dependency_links.txt
          writing requirements to mypythonlib.egg-info/requires.txt
          writing top-level names to mypythonlib.egg-info/top_level.txt
          writing manifest file 'mypythonlib.egg-info/SOURCES.txt'
          reading manifest file 'mypythonlib.egg-info/SOURCES.txt'
          writing manifest file 'mypythonlib.egg-info/SOURCES.txt'
          running build_ext
          ================================================================ test session starts =================================================================
          platform linux -- Python 3.8.10, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
          rootdir: /home/aiyc/Linux_Code/mypythonlibrary
          collected 1 item

          tests/test_myfunctions.py .

          第 7 步:構(gòu)建你的庫

          現(xiàn)在所有內(nèi)容都已準(zhǔn)備就緒,我們要構(gòu)建我們的庫。確保您當(dāng)前的工作目錄是 /path/to/mypythonlibrary (因此是項(xiàng)目的根文件夾)。在您的命令提示符中,運(yùn)行:

          python setup.py bdist_wheel
          構(gòu)建結(jié)果

          您的輪文件存儲(chǔ)在現(xiàn)在創(chuàng)建的 “dist” 文件夾中。您可以使用以下方法安裝您的庫:

          pip install /path/to/wheelfile.whl

          請(qǐng)注意,您還可以將您的庫發(fā)布到您工作場所內(nèi)聯(lián)網(wǎng)上的內(nèi)部文件系統(tǒng),或發(fā)布到官方 PyPI 存儲(chǔ)庫并從那里安裝它。

          安裝 Python 庫后,您可以使用以下命令導(dǎo)入它:

          import mypythonlib
          from mypythonlib import myfunctions

          AI悅創(chuàng)·推出輔導(dǎo)班啦,包括「Python 語言輔導(dǎo)班、C++輔導(dǎo)班、算法/數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)班、少兒編程、pygame 游戲開發(fā)」,全部都是一對(duì)一教學(xué):一對(duì)一輔導(dǎo) + 一對(duì)一答疑 + 布置作業(yè) + 項(xiàng)目實(shí)踐等。QQ、微信在線,隨時(shí)響應(yīng)!V:Jiabcdefh

          作者:AI悅創(chuàng)
          排版:AI悅創(chuàng)





          黃家寶丨AI悅創(chuàng)

          隱形字

          攝影公眾號(hào)「悅創(chuàng)攝影研習(xí)社」


          在這里分享自己的一些經(jīng)驗(yàn)、想法和見解。


          長按識(shí)別二維碼關(guān)注




          好文和朋友一起看~
          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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一级电影 | www.成人高清 | 午夜亚洲AV永久无码精品蜜芽 | 欧美一级特黄A片免费看视频小说 |