<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        打包發布Python模塊的方法詳解

        來源:懂視網 責編:小采 時間:2020-11-27 14:26:35
        文檔

        打包發布Python模塊的方法詳解

        打包發布Python模塊的方法詳解:前言昨天把自己的VASP文件處理庫進行了打包并上傳到PyPI,現在可以直接通過pip和easy_install來安裝VASPy啦(同時歡迎使用VASP做計算化學的童鞋們加星和參與進來),VASPy的GotHub地址:https://github.com/PytLab/VASPyVASPy的Py
        推薦度:
        導讀打包發布Python模塊的方法詳解:前言昨天把自己的VASP文件處理庫進行了打包并上傳到PyPI,現在可以直接通過pip和easy_install來安裝VASPy啦(同時歡迎使用VASP做計算化學的童鞋們加星和參與進來),VASPy的GotHub地址:https://github.com/PytLab/VASPyVASPy的Py

        前言

        昨天把自己的VASP文件處理庫進行了打包并上傳到PyPI,現在可以直接通過pip和easy_install來安裝VASPy啦(同時歡迎使用VASP做計算化學的童鞋們加星和參與進來),

        VASPy的GotHub地址:https://github.com/PytLab/VASPy
        VASPy的PyPI地址:https://pypi.python.org/pypi/vaspy/

        由于自己的記性真是不咋地,怕時間久了就忘了,于是在這里趁熱打鐵以自己的VASPy程序為例對python的打包和上傳進行下總結。

        VASPy包文件結構

        首先寫貼上來VASPy包的整個文件結構, 后面的內容都是以此為例進行說明:

        VASPy/
        ├── LICENSE
        ├── MANIFEST
        ├── MANIFEST.in
        ├── README.rst
        ├── requirements.txt
        ├── scripts
        │ ├── change_incar_parameters.py
        │ ├── create_inputs.py
        │ └── ...
        ├── setup.cfg
        ├── setup.py
        ├── tests
        │ ├── incar_test.py
        │ ├── __init__.py
        │ ├── oszicar_test.py
        │ ├── outcar_test.py
        │ ├── testdata
        │ │ ├── CONTCAR
        │ │ ├── DOS_SUM
        │ │ ├── ELFCAR
        │ │ └── ...
        │ └── ...
        └── vaspy
         ├── __init__.py
         ├── iter.py
         ├── matstudio.py
         └── ...
         
        4 directories, 54 files

        打包和安裝第三方包的工具

        這里我們需要借助setuptools和pip等工具進行自己包的打包和發布以及安裝,如果需要構建成wheel還需要安裝wheel模塊。如果python版本>=2.7.9或者>=3.4,setuptools和pip是已經安裝好的,可能需要進行更新到最新版本

        pip install -U pip setuptools

        可以使用包管理工具,例如

        yum install pip
        sudo apt-get install pip

        通過get-pip.py腳本安裝,如果檢測到沒有安裝wheel和setuptools也會自動安裝

        python get-pip.py

        具體的工具安裝和介紹就不多講了,可以請參考requirements for installing packages

        包中不同文件的作用

        setup.py

        這個文件是打包整個項目最重要的文件,它里面提供了兩個主要的功能:

        setup()函數,此函數的參數指定了如何配置自己的項目。
        命令行工具,包括打包,測試,發布等??梢酝ㄟ^下面的命令查看;

        python setup.py --help-commands

        setup.cfg

        此文件包含了構建時候的一些默認參數例如構建bdist_wheel的時候的--universal參數

        [bdist_wheel]
        universal=1

        這樣每次打包的時候就會默認使用--universal參數了,效果類似:

        python setup.py bdist_wheel --universal

        README.rst

        這個最初我是用markdown寫的,打包發布到PyPI之后發現PyPI不支持markdown的渲染,頁面上真是一片混亂,于是就用reStrutruedText的語法重新寫了一遍。畢竟標記語言語法基本上可以秒上手,實在不行找個模板比葫蘆畫瓢就行。
        reStructureText的語法規則可參考官方文檔:Quick reStructuredText

        其實還有一種方法就是使用pandoc將markdown轉換成rst格式,一種省事的方式就是使用pyandoc模塊在發布的時候自動轉換。
        具體方法可以參考:Use Markdown README's in Python modules

        MANIFEST.in

        此文件在打包的時候告訴setuptools還需要額外打包那些文件,例如我VASPy中的單元測試的測試數據文件我就使用這個文件將其包含進來。當然README,LICENSE這些也可以通過它來一起打包進來。
        下面是我自己的MANIFEST.in的內容:

        include README.rst
        include requirements.txt
        include LICENSE
        recursive-include scripts *
        recursive-include tests *

        具體的語法規則可以參考:The MANIFEST.in template

        vaspy/

        此文件夾就是vaspy源代碼所在的包。

        tests/

        此文件夾也是一個子包,包含了單元測試腳本,為了能使用python setup.py test進行單元測試,特地添加了__init__.pys使其成為一個包。

        setup()的參數

        這里只介紹我使用的幾個參數,其他參數的具體使用可以參考:https://docs.python.org/3/distutils/setupscript.html

        name

        versions = "vaspy"

        是整個項目的名字,打包后會使用此名字和版本號。

        version

        from vaspy import __version__
        version = __version__

        description

        是一個簡短的對項目的描述,一般一句話就好,會顯示在pypi上名字下端。

        long_description

        是一個長的描述,相當于對項目的一個簡潔,如果此字符串是rst格式的,PyPI會自動渲染成HTML顯示。這里可以直接讀取README.rst中的內容。

        url

        包的連接,通常為GitHub上的鏈接或者readthedocs的鏈接。

        packages

        需要包含的子包列表,setuptools提供了find_packages()幫助我們在根路徑下尋找包,這個函數distutil是沒有的。

        setup_requires

        這個參數定義了VASPy安裝和順利運行所需要的其他依賴項(最基本的),使用pip安裝的時候會對這些依賴項進行安裝。
        關于這個參數與requirements.txt的區別可以參考:install_requires vs Requirements files

        classifier

        這個參數提供了一系列的分類,在PyPI上會將其放入不同的目錄中講項目進行歸類。
        具體的categories的名稱和規則參考:https://pypi.python.org/pypi?%3Aaction=list_classifiers

        test_suite

        這個參數可以幫助我們使用

        python setup.py test

        來跑單元測試,再也不需要單獨再寫一個腳本例如run_tests.py這樣來跑單元測試了。
        此參數的官方解釋:

        A string naming a unittest.TestCase subclass (or a package or module containing one or more of them, or a method of such a subclass), or naming a function that can be called with no arguments and returns a unittest.TestSuite. If the named suite is a module, and the module has an additional_tests() function, it is called and the results are added to the tests to be run. If the named suite is a package, any submodules and subpackages are recursively added to the overall test suite.

        也就是說這個參數可以接受多種類型的參數:

        接收unittest.TestCase子類,我們可以講所有單元測試寫入一個測試用例中,然后import進來,再傳你給test_suite
        接收函數對象,此函數對象沒有任何參數,且返回一個unittest.TestSuite.這樣我們就可以單獨寫一個函數,將多個測試用例合并成一個suite然后返回,然后再將函數import進來傳給test_suite。

        模塊和包名稱,我就是使用這種方式,之前自己的測試都是分開的多個腳本,這樣我添加一個__init__.py就可以將其變成一個包,將包名傳給test_suite,setuptools就會神奇的將此包下的所有測試全部跑一邊,這樣我以后再加測試腳本的時候直接就添加新的腳本就好了,其他的都不需要改動了。

        運行效果:

        zjshao@SHAO-PC:/mnt/d/Dropbox/Code/CentOS_code/VASPy$ python setup.py test
        running test
        running egg_info
        creating vaspy.egg-info
        writing vaspy.egg-info/PKG-INFO
        writing top-level names to vaspy.egg-info/top_level.txt
        writing dependency_links to vaspy.egg-info/dependency_links.txt
        writing manifest file 'vaspy.egg-info/SOURCES.txt'
        reading manifest file 'vaspy.egg-info/SOURCES.txt'
        reading manifest template 'MANIFEST.in'
        writing manifest file 'vaspy.egg-info/SOURCES.txt'
        running build_ext
        test_compare (tests.incar_test.InCarTest)
        Make sure we can compare two InCar objects correctly. ... ok
        test_eq (tests.incar_test.InCarTest)
        Test __eq__() function. ... ok
        ...
        此處省略若干
        輸出 ---------------------------------------------------------------------- Ran 22 tests in 3.574s OK

        發布自己的python包

        1. 首先先去PyPI注冊帳號

        2. 配置~/.pypirc如下:

        [distutils]
        index-servers =
         pypi
         pypitest
         
        [pypi]
        username:ShaoZhengjiang
        password:mypassword
         
        [pypitest]
        username:ShaoZhengjiang
        password:mypassword

        3. 然后注冊并上傳自己的包到測試服務器

        pypi提供了一個測試服務器,我們可以在這個測試服務器上做測試。

        python setup.py register -r pypitest

        然后

        python setup.py sdist upload -r pypitest

        若沒有問題我們應該不會得到任何錯誤。

        4. 上傳至PyPI

        若上面的測試成功,我們就可以按照相同的步驟將包注冊并上傳。

        python setup.py register -r pypi
        python setup.py sdist upload -r pypi

        Ok,之后我們就可以在PyPI(https://pypi.python.org/pypi/vaspy/)上看到我們自己的包了。

        更多打包發布Python模塊的方法詳解相關文章請關注PHP中文網!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        打包發布Python模塊的方法詳解

        打包發布Python模塊的方法詳解:前言昨天把自己的VASP文件處理庫進行了打包并上傳到PyPI,現在可以直接通過pip和easy_install來安裝VASPy啦(同時歡迎使用VASP做計算化學的童鞋們加星和參與進來),VASPy的GotHub地址:https://github.com/PytLab/VASPyVASPy的Py
        推薦度:
        標簽: 方法 打包 發布
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲无成人网77777| 亚洲人成电影在在线观看网色| 国产精品黄页免费高清在线观看 | 亚洲国产精品久久66| 最新免费jlzzjlzz在线播放| 中文字幕免费播放| 疯狂做受xxxx高潮视频免费| 亚洲黄色在线观看视频| 久久精品国产亚洲综合色| 免费被黄网站在观看| 中文字幕av无码无卡免费| a级午夜毛片免费一区二区| 黄页网站在线观看免费| 亚洲精品V天堂中文字幕| 亚洲中文字幕一二三四区| 亚洲成综合人影院在院播放| 亚洲国产精品热久久| 亚洲爆乳精品无码一区二区三区| 亚洲综合久久夜AV | 亚洲精品一级无码鲁丝片| 伊人久久亚洲综合影院| 亚洲Av无码乱码在线znlu| 五月天婷亚洲天综合网精品偷| 午夜高清免费在线观看| 国产色爽女小说免费看| 亚洲午夜av影院| 亚洲精品无码专区在线在线播放| 亚洲乱码无码永久不卡在线| 亚洲大成色www永久网站| 亚洲特级aaaaaa毛片| 亚洲av色香蕉一区二区三区| 一级毛片免费播放男男| 日韩精品人妻系列无码专区免费| 少妇无码一区二区三区免费| 日本XXX黄区免费看| 亚洲日本在线观看视频| 久久国产亚洲高清观看| 亚洲精品女同中文字幕| 日本视频免费高清一本18| 中文字幕无码免费久久99| 好看的亚洲黄色经典|