• 如何创建自己的python包


    写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易。

    长用的安装第三方lib的方法有easy_install和pip,这两个的使用方法大概差不多。这个不是本文要描述的重点,我就简单写两条:

    easy_install

    安装新包: easy_install install xxxx

    卸载已安装的包:easy_install uninstall xxxx

    更新已安装的包:  easy_install -U xxxx

    pip

    安装新包: pip install xxxx

    卸载已安装的包:pip uninstall xxxx

    更新已安装的包:  easy_install install xxxx -U

    查看已安装的包:  pip list

    用distutils制作自己的安装包

    如何让自己写的包能被人当作第三方库安装呢?请看下面的例子:

    mylib.py 文件

    def add(x,y):
        return x+y
    
    def division(x,y):
        return x/y
    
    def mutiply(x,y):
        return x*y
    
    def subtract(x,y):
        return x-y
    
    def main():
        pass
    
    if __name__ == '__main__':
        main()

    简单的方法可以进入到mylib.py存放的目录,然后import mylib就可以使用它提供的方法了。但是如果项目比较大,需要很多人协作的话,这样就非常不方便。这时候可以使用distutils标准库。于是我们可以在mylib.py同级目录下再创建一个setup.py,它的内容如下:

    from distutils.core import setup
    
    setup(name='mylib',
    version='1.0',
    py_modules=['mylib'],
    )

    name是指定的包名,version是版本号,py_modules里包含需要安装的python文件,本例中即为mylib.py文件。

    编写好setup.py后,就可以使用 

    python setup.py install

    把它安装到系统中了。安装完后我可以用 pip list 查看已安装的包的信息,并且在任何地方的python文件中都可以import mylib了。

    使用pastescript自动创建项目

    那么如何把自己的安装包上传到PyPI上,从而像其他安装包一样可以试用easy_install 或 pip安装呢?

    这就需要遵循PEP241,给出足够的元数据才行,比如对包的描述,作者的信息,授权方式,主页等。需要一个非常复杂的setup.py文件,这时候可以自己手动写成下面的文件:

    from distutils.core import setup
    from setuptools import setup, find_packages
    
    setup(
        name = 'mylib',
        version = '0.0.1',
        keywords = ('simple', 'test'),
        description = 'just a simple test',
        license = 'MIT License',
    
        author = 'jim',
        author_email = 'jim@126.com',
    
        packages = find_packages(),
        platforms = 'any',
    )

    然后运行下面的命令,生成一个mylib的包。最后把包含setup.py在内的这一级目录全部上传到PyPI上即可。

    # 以下所有生成文件将在当前路径下 dist 目录中
    python setup.py bdist_egg # 生成easy_install支持的格式 
    python setup.py sdist     # 生成pip支持的格式,下文以此为例

    有一个第三方库pastescript可以帮助我们自动创建这样一个复杂的文件,你只需要回答它的问题就可以了。

    首先我们通过

    pip install pastescript

    安装 pastescript包,然后就可以使用下面的命令来自动创建一个复杂的setup.py包:

    paster create -o mylib-2 -t basic_packge mylib

    如果不想回答问题的话也可以提前编辑好配置文件config.cfg

    [pastescript]
    description = This is a test
    license_name = 
    keywords = test mylib
    long_description = I am mylib,a test lib for project
    author = jim
    author_email = jim@126.com
    url = www.baidu.com
    version = 1.0.0

    然后使用命令行自动加载

    paster create -t basic_package --config="config.cfg" mylib

     共享安装包到PyPI上

      上面搞定了安装包在本地的安装,那么下面开始把mylib共享到PyPI上,那么肯定需要一个PyPI的帐号,这个自己去注册吧。

      然后进入到刚刚生成的mylib的目录下,运行

    python setup.py  register

    在系统中填写我们在PyPI上注册的信息,包括用户名、密码,并把这个包名注册到PyPI上。(请确保PyPI上没有同名的包)

    完成后再执行

    python  setup.py sdist upload

    将代码上传到PyPI。

     最后注意几点:

    1. 上传到PyPI上的包很有可能用pip或easy_install下载失败,提示can not find a version satisfy request xxxxx. 原因是这个包生成的时候默认是当作dev的,所以不能release,于是要自己手动修改它自动生成的配置文件setup.cfg,把其中的tag_build = dev 改成 tag_build =

    2. 经过试用后发现用pastescript生成的包符合PyPI的条件可以上传,但是它传上去的只是一个空的包,里面没有mylib.py这个文件,也许是需要用其他的参数生成包,而不是basic_packge;而自己用python setup.py sdist 生成的包则没有任何问题。

    最简单的方法就是在生成包的时候使用python setup.py sdist --formats=zip,gztar,这样上面两个问题都不存在了

  • 相关阅读:
    求最小正整数x,A^x=1(mod M)求阶模板
    欧拉函数模板
    高次同余方程模板BabyStep-GiantStep
    Pollard-Rho大整数拆分模板
    Miller-Rabin大素数测试模板
    JSON教程基础
    11.@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
    代码格式化
    使用FireFox插件RESTClient、HttpRequester模拟http(get post)请求
    SpringBoot入门最详细教程
  • 原文地址:https://www.cnblogs.com/streakingBird/p/4056765.html
Copyright © 2020-2023  润新知