用python封裝自己的包上傳到Pypi

      python中我們經常會用到第三方的包作爲工具,比如爬蟲解析工具beautiful soup,網絡請求工具requests,之所以要把它封裝成包,一是爲了技術與業務分離,二是爲了能多項目多平臺共用,即"write one, do everywhere"。python裏面用到的第三方工具包基本都是從Pypi.org裏面下載的,那我們就來看看怎麼打一個自己的包並上傳到pypi作爲工具使用。

      本文假定你一定有一定的python基礎,並懂得怎麼安裝使用第三方工具包,其實也很簡單,安裝包就是要先再本地環境安裝pip,然後如果要安裝其他工具包的話就使用指令(沒有權限就要使用sudo):

pip install <package name>

       下面就開始說怎麼打一個自己的包並上傳到pypi了

       比如我們要打包一個名字要sghello的包,首先創建一個項目(項目名隨便取,不需要與包名sghello相同),項目的層級結構如下(完整的層級結構,dist是打包時候生成的):

:

首先在新建一個sghello的文件夾作爲項目包,在項目下創建src包和setup.py文件,setup.py結構如下:

from distutils.core import setup
from setuptools import find_packages
 
setup(name = 'sghello',     # 包名
      version = '2019.03.09',  # 版本號
      description = '',
      long_description = '', 
      author = '',
      author_email = '',
      url = '',
      license = '',
      install_requires = [],
      classifiers = [
        'Intended Audience :: Developers',
        'Operating System :: OS Independent',
        'Natural Language :: Chinese (Simplified)',
        'Programming Language :: Python',
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.5',
        'Programming Language :: Python :: 2.6',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.2',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Topic :: Utilities'
      ],
      keywords = '',
      packages = find_packages('src'),  # 必填,就是包的代碼主目錄
      package_dir = {'':'src'},         # 必填
      include_package_data = True,
)
#!/usr/bin/env python

     幾個重要參數說明:

  • version - 這個簡單,就是包的發佈的版本,可以直接寫在這,也可以從其他地方引用過來
  • long_description - 包的介紹,因爲這個裏面的內容是顯示在pypi包首頁上
  • packages - 申明你的包裏面要包含的目錄,比如  ['mypackage', 'mypackage_test']  
  • install_requires - 申明依賴包,安裝包時pip會自動安裝:格式如下(我上面的setup.py沒有這個參數,因爲我這不依賴第三方包:))
install_requires=[
        'six>=1.5.2',
        'parsel>=1.1',
        'PyDispatcher>=2.0.5',
        'service_identity',
    ]

        然後在src包下建一個__init__.py和sghello包(最後的包名叫sghello這裏的包就命名爲sghello),__init__.py裏面什麼都不用寫,是python包的結構規範。

       接着在sghello包下建.py的模塊文件去實現你這個包所要實現的功能,比如上圖中的hello.py,就實現一個hello效果,就跟平常寫python模塊一樣,隨便寫邏輯:

def testPrint():
	print("hello package sghello!!")

       最後在sghello包下再建一個__init__.py文件,內容如下:

from __future__ import absolute_import
from .hello import *

__version__ = '1.0.0'
__license__ = ''

其中第一句 from __future__ import absolute_import 必不可少,from .模塊名 import * 是導入你所寫的模塊(所有寫的模塊都要導入),否則這個模塊就不能被識別。

然後再回到項目所在主目錄,也就是第一步中創建的setup.py文件目錄,開始打包了:

完成後會生成一個dist目錄,裏面的壓縮包就是等會要上傳到pypi.org的包,此外src目錄下會生成一個sghello.egg-info的文件夾,這是包的一些說明文件,可不管。

接下來就是去https://pypi.org/account/register/註冊賬號,如果有賬號的請忽略,記住你的賬號和密碼,後面上傳包會使用。

接下來就是上傳你的包了,這裏使用twine上傳,如下:

##沒有就先安裝
sudo pip install twine
#上傳包,期間會讓你輸入註冊的用戶名和密碼
twine upload dist/*

上傳完成了會顯示success,我就不演示了,然後再pypi.org上就可以看到你的包了,如下:

 

如果要使用的話就在本地使用pip install sghello就可以使用了,大功告成,收工!!

 

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章