用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就可以使用了,大功告成,收工!!

    

发布了117 篇原创文章 · 获赞 179 · 访问量 114万+

猜你喜欢

转载自blog.csdn.net/playboyanta123/article/details/88883540