• 上传python包到PyPI


    一、前言

    由于项目需要将API响应的XML内容解析成python对象,写了一个简单的xml转python的库,因为功能简单,细节处理也不好,文档也没有,没想也不好意思上传到pypi。

    后来由于多个不同的独立的服务都需要这个转换功能,如果每个服务都把这个库放置于各自的目录下,维护起来很麻烦,才想到完善这个库,上传到PyPI,通过pip来统一管理。

    二、创建账号

    PyPI正式站点PyPI测试站点分别注册一个帐号,用于后面上传。为了便于记忆,我使用了相同的帐号和密码。

    三、创建.pypirc配置文件

    此文件主要用于上传包到PyPI时验证权限。在用户根目录下创建文件~/.pypirc,内容如下:

    [distutils]
    index-servers =
        pypi
        pypitest
    
    [pypi]
    username:xxx
    password:xxx
    
    [pypitest]
    repository: https://testpypi.python.org/pypi
    username:xxx
    password:xxx
    

      

    四、创建项目库

    每个项目库下必须有一个setup.py文件,除此之外同样可以创建其他附加的如readme、license等用以项目描述和版权信息的文件。

    可参考官方的说明文档:Creating a Source Distribution

    下面以lazyxml库作为示例。

    lazyxml项目库的结构

    lazyxml/
    |-- LICENSE
    |-- MANIFEST.in
    |-- Makefile
    |-- README.rst
    |-- demo
    |   |-- compat.py
    |   |-- dump.py
    |   |-- load.py
    |   `-- xml
    |       |-- dump-fp.xml
    |       |-- dump.xml
    |       |-- gbk.xml
    |       |-- namespace.xml
    |       `-- normal.xml
    |-- docs
    |   |-- Makefile
    |   |-- changelog.rst
    |   |-- conf.py
    |   |-- index.rst
    |   |-- lazyxml
    |   |   |-- builder.rst
    |   |   |-- dump.rst
    |   |   |-- dumps.rst
    |   |   |-- index.rst
    |   |   |-- load.rst
    |   |   |-- loads.rst
    |   |   `-- parser.rst
    |   `-- make.bat
    |-- lazyxml
    |   |-- __init__.py
    |   |-- builder.py
    |   |-- parser.py
    |   `-- utils.py
    `-- setup.py 

     

    项目文件说明

    LICENSE

    项目版权许可证说明

    MANIFEST.in

    打包时包含/排除指定规则的文件

    Makefile

    Makefile脚本简化操作

    • help: 帮助
    • install: 安装包
    • pack: 打包
    • upload: 打包上传到PyPI正式站点
    • test: 打包上传到PyPI测试站点
    • clean: 清理

    README.rst

    项目介绍说明

    demo

    样例目录 包含各种项目库api使用示例

    docs

    项目库Sphinx文档目录

    lazyxml

    源码目录

    setup.py

    包元信息文件

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    from __future__ import with_statement
    
    import sys
    if sys.version_info < (2, 5):
        sys.exit('Python 2.5 or greater is required.')
    
    try:
        from setuptools import setup
    except ImportError:
        from distutils.core import setup
    
    import lazyxml
    
    
    with open('README.rst') as fp:
        readme = fp.read()
    
    with open('LICENSE') as fp:
        license = fp.read()
    
    setup(name='lazyxml',
          version=lazyxml.__version__,
          description='Simple xml parse and build lib.',
          long_description=readme,
          author='Zonglong Fan',
          author_email='lazyboy.fan@gmail.com',
          maintainer='Zonglong Fan',
          maintainer_email='lazyboy.fan@gmail.com',
          url='https://github.com/heronotears/lazyxml',
          packages=['lazyxml'],
          license=license,
          platforms=['any'],
          classifiers=[]
          )
    

    五、打包上传到PyPI测试站点

    打包、注册、上传一条命令完成:

    python setup.py sdist --formats=gztar register -r pypitest upload -r pypitest

    或者执行Makefile命令:

    make test

    六、打包上传到PyPI正式站点

    在测试站点发现没有问题后,就可以打包上传到正式站点。
    命令:

    python setup.py sdist --formats=gztar register upload

    或者

    make upload

    七、尾言

    执行上述所有步骤后,没有出现问题的话,一个项目包就会上传到PyPI站点上面。

    之后就可以到PyPI站点去查看上传好的包。

  • 相关阅读:
    Update SSM agent to each EC2 via Bat and bash script
    Shell脚本循环读取文件中的每一行
    通过psexec实现远程安装软件包
    Getting Private/Public IP address of EC2 instance using AWS-cli [closed]
    Python to list users in AWS
    BAT script to set local account password never expire
    Difference between Netbios and Host name
    PowerShell官方文档
    powershell for rename server name
    Create a conditional DNS forwarder on our domain.com to Amazon default DNS provider
  • 原文地址:https://www.cnblogs.com/lazyboy/p/3830104.html
Copyright © 2020-2023  润新知