欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1761 0

前言

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

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

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

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

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

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

pip install -U pip setuptools

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

            
yum install pip
sudo apt-get install pip



          

通過get-pip.py腳本安裝,如果檢測到?jīng)]有安裝wheel和setuptools也會自動安裝

python get-pip.py

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

包中不同文件的作用

setup.py

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

setup()函數(shù),此函數(shù)的參數(shù)指定了如何配置自己的項目。
命令行工具,包括打包,測試,發(fā)布等。可以通過下面的命令查看;

python setup.py --help-commands

setup.cfg

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

            
[bdist_wheel]
universal=1

          

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

python setup.py bdist_wheel --universal

README.rst

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

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

MANIFEST.in

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

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

          

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

vaspy/

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

tests/

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

setup()的參數(shù)

這里只介紹我使用的幾個參數(shù),其他參數(shù)的具體使用可以參考: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中的內(nèi)容。

url

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

packages

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

setup_requires

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

classifier

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

test_suite

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

python setup.py test

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

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.

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

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

          

發(fā)布自己的python包

1. 首先先去PyPI注冊帳號

2. 配置~/.pypirc如下:

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

          

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

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

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/)上看到我們自己的包了。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 波多野结在线 | 日韩欧美一区二区三区不卡在线 | 亚洲视频黄色 | 成人在线免费观看 | 色婷婷综合在线 | 欧美 日本 国产 | 男女爽爽视频 | 日韩色视频 | 久久久久久一级毛片免费野外 | 成年网站在线观看 | 日韩欧美亚洲视频 | 一区二区中文 | 草莓福利视频 | 成人免费看黄网站无遮挡 | 久久精品a | 欧美二级毛片免费高清电影 | 五月综合久久 | 色婷婷导航 | 亚洲综合激情七月婷婷 | 蜜臀传煤mv在线观看 | 性做久久久久久免费观看欧美 | 又黄又爽的网站 | 一级一片免费看 | 狠狠色噜噜狠狠狠狠米奇777 | 色网站在线视频 | 一区二区成人 | 天天拍天天干 | 久久1区 | 色综合伊人色综合网亚洲欧洲 | 成人伊人 | 黄色三级在线观看 | 日韩中文字幕 | 午夜影院毛片 | 毛片在线免费观看完整版 | 香蕉视频在线播放 | 色综合色综合色综合色综合 | 欧美黄色片一级 | 一级寡妇乱色毛片全18 | 亚洲国产精品成人 | 99久久精品国产一区二区三区 | 亚洲成人在线免费 |