最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

打包發(fā)布Python模塊的方法詳解

 更新時(shí)間:2016年09月18日 08:51:32   投稿:hebedich  
這篇文章我們來(lái)學(xué)習(xí)打包與發(fā)布你的Python模塊的基礎(chǔ)知識(shí)以及方法,非常的簡(jiǎn)單實(shí)用。所以不要浪費(fèi)時(shí)間了,咱們開(kāi)始吧!

前言

昨天把自己的VASP文件處理庫(kù)進(jìn)行了打包并上傳到PyPI,現(xiàn)在可以直接通過(guò)pip和easy_install來(lái)安裝VASPy啦(同時(shí)歡迎使用VASP做計(jì)算化學(xué)的童鞋們加星和參與進(jìn)來(lái)),

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

由于自己的記性真是不咋地,怕時(shí)間久了就忘了,于是在這里趁熱打鐵以自己的VASPy程序?yàn)槔龑?duì)python的打包和上傳進(jìn)行下總結(jié)。

VASPy包文件結(jié)構(gòu)

首先寫(xiě)貼上來(lái)VASPy包的整個(gè)文件結(jié)構(gòu), 后面的內(nèi)容都是以此為例進(jìn)行說(shuō)明:

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等工具進(jìn)行自己包的打包和發(fā)布以及安裝,如果需要構(gòu)建成wheel還需要安裝wheel模塊。如果python版本>=2.7.9或者>=3.4,setuptools和pip是已經(jīng)安裝好的,可能需要進(jìn)行更新到最新版本

pip install -U pip setuptools

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

yum install pip
sudo apt-get install pip


通過(guò)get-pip.py腳本安裝,如果檢測(cè)到?jīng)]有安裝wheel和setuptools也會(huì)自動(dòng)安裝

python get-pip.py

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

包中不同文件的作用

setup.py

這個(gè)文件是打包整個(gè)項(xiàng)目最重要的文件,它里面提供了兩個(gè)主要的功能:

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

python setup.py --help-commands

setup.cfg

此文件包含了構(gòu)建時(shí)候的一些默認(rèn)參數(shù)例如構(gòu)建bdist_wheel的時(shí)候的--universal參數(shù)

[bdist_wheel]
universal=1

這樣每次打包的時(shí)候就會(huì)默認(rèn)使用--universal參數(shù)了,效果類(lèi)似:

python setup.py bdist_wheel --universal

README.rst

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

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

MANIFEST.in

此文件在打包的時(shí)候告訴setuptools還需要額外打包那些文件,例如我VASPy中的單元測(cè)試的測(cè)試數(shù)據(jù)文件我就使用這個(gè)文件將其包含進(jìn)來(lái)。當(dāng)然README,LICENSE這些也可以通過(guò)它來(lái)一起打包進(jìn)來(lái)。
下面是我自己的MANIFEST.in的內(nèi)容:

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

具體的語(yǔ)法規(guī)則可以參考:The MANIFEST.in template

vaspy/

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

tests/

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

setup()的參數(shù)

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

name

versions = "vaspy"

是整個(gè)項(xiàng)目的名字,打包后會(huì)使用此名字和版本號(hào)。

version

from vaspy import __version__
version = __version__


description

是一個(gè)簡(jiǎn)短的對(duì)項(xiàng)目的描述,一般一句話就好,會(huì)顯示在pypi上名字下端。

long_description

是一個(gè)長(zhǎng)的描述,相當(dāng)于對(duì)項(xiàng)目的一個(gè)簡(jiǎn)潔,如果此字符串是rst格式的,PyPI會(huì)自動(dòng)渲染成HTML顯示。這里可以直接讀取README.rst中的內(nèi)容。

url

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

packages

需要包含的子包列表,setuptools提供了find_packages()幫助我們?cè)诟窂较聦ふ野@個(gè)函數(shù)distutil是沒(méi)有的。

setup_requires

這個(gè)參數(shù)定義了VASPy安裝和順利運(yùn)行所需要的其他依賴(lài)項(xiàng)(最基本的),使用pip安裝的時(shí)候會(huì)對(duì)這些依賴(lài)項(xiàng)進(jìn)行安裝。
關(guān)于這個(gè)參數(shù)與requirements.txt的區(qū)別可以參考:install_requires vs Requirements files

classifier

這個(gè)參數(shù)提供了一系列的分類(lèi),在PyPI上會(huì)將其放入不同的目錄中講項(xiàng)目進(jìn)行歸類(lèi)。
具體的categories的名稱(chēng)和規(guī)則參考:https://pypi.python.org/pypi?%3Aaction=list_classifiers

test_suite

這個(gè)參數(shù)可以幫助我們使用

python setup.py test

來(lái)跑單元測(cè)試,再也不需要單獨(dú)再寫(xiě)一個(gè)腳本例如run_tests.py這樣來(lái)跑單元測(cè)試了。
此參數(shù)的官方解釋?zhuān)?/p>

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.

也就是說(shuō)這個(gè)參數(shù)可以接受多種類(lèi)型的參數(shù):

接收unittest.TestCase子類(lèi),我們可以講所有單元測(cè)試寫(xiě)入一個(gè)測(cè)試用例中,然后import進(jìn)來(lái),再傳你給test_suite
接收函數(shù)對(duì)象,此函數(shù)對(duì)象沒(méi)有任何參數(shù),且返回一個(gè)unittest.TestSuite.這樣我們就可以單獨(dú)寫(xiě)一個(gè)函數(shù),將多個(gè)測(cè)試用例合并成一個(gè)suite然后返回,然后再將函數(shù)import進(jìn)來(lái)傳給test_suite。

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

運(yùn)行效果:

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

發(fā)布自己的python包

1. 首先先去PyPI注冊(cè)帳號(hào)

2. 配置~/.pypirc如下:

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

3. 然后注冊(cè)并上傳自己的包到測(cè)試服務(wù)器

pypi提供了一個(gè)測(cè)試服務(wù)器,我們可以在這個(gè)測(cè)試服務(wù)器上做測(cè)試。

python setup.py register -r pypitest

然后

python setup.py sdist upload -r pypitest

若沒(méi)有問(wèn)題我們應(yīng)該不會(huì)得到任何錯(cuò)誤。

4. 上傳至PyPI

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

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

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

相關(guān)文章

  • Python turtle繪畫(huà)象棋棋盤(pán)

    Python turtle繪畫(huà)象棋棋盤(pán)

    這篇文章主要為大家詳細(xì)介紹了Python turtle繪畫(huà)象棋棋盤(pán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解決Python pandas df 寫(xiě)入excel 出現(xiàn)的問(wèn)題

    解決Python pandas df 寫(xiě)入excel 出現(xiàn)的問(wèn)題

    今天小編就為大家分享一篇解決Python pandas df 寫(xiě)入excel 出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python屬于哪種語(yǔ)言

    python屬于哪種語(yǔ)言

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python屬于哪種語(yǔ)言的一篇基礎(chǔ)內(nèi)容文章,有興趣的朋友們可以參考下。
    2020-08-08
  • Python??inspect?模塊的簡(jiǎn)單使用及常用方法

    Python??inspect?模塊的簡(jiǎn)單使用及常用方法

    Python的inspect模塊是一個(gè)強(qiáng)大的內(nèi)省工具,允許開(kāi)發(fā)者檢查(inspect)活動(dòng)對(duì)象和源代碼,這篇文章主要介紹了Python?inspect?模塊的簡(jiǎn)單使用及常用方法,需要的朋友可以參考下
    2024-03-03
  • tensorflow -gpu安裝方法(不用自己裝cuda,cdnn)

    tensorflow -gpu安裝方法(不用自己裝cuda,cdnn)

    這篇文章主要介紹了tensorflow -gpu安裝,史上最新最簡(jiǎn)單的途徑(不用自己裝cuda,cdnn),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • pymysql模塊的使用(增刪改查)詳解

    pymysql模塊的使用(增刪改查)詳解

    這篇文章主要介紹了pymysql模塊的使用(增刪改查)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解

    Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解

    本文將學(xué)會(huì)各種類(lèi)型的郵件發(fā)送方式,比如普通文本郵件、帶附件的郵件等等,如何通過(guò)程序發(fā)送郵件現(xiàn)在我們還不太了解,接下來(lái)就會(huì)為大家進(jìn)行詳細(xì)的介紹
    2022-05-05
  • PyQT5 emit 和 connect的用法詳解

    PyQT5 emit 和 connect的用法詳解

    今天小編就為大家分享一篇PyQT5 emit 和 connect的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼

    用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼

    這篇文章主要介紹了用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Django模板獲取field的verbose_name實(shí)例

    Django模板獲取field的verbose_name實(shí)例

    這篇文章主要介紹了Django模板獲取field的verbose_name實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論

商南县| 林州市| 襄垣县| 靖远县| 龙泉市| 毕节市| 津市市| 航空| 吕梁市| 南涧| 海南省| 昌吉市| 昌黎县| 靖边县| 崇州市| 本溪市| 章丘市| 都昌县| 香港| 温宿县| 松原市| 桃源县| 格尔木市| 丽江市| 平安县| 安远县| 辽中县| 沾益县| 太原市| 诸暨市| 玉山县| 平塘县| 辛集市| 秦皇岛市| 柳河县| 阜新市| 临清市| 鄂尔多斯市| 沙洋县| 探索| 高安市|