目录

    最近笔者在思考,怎样提高开发效率。从网络爬虫到数据处理,然后到人工智能。Python 的强大之处在于:拥有一大批开箱即用的工具包,不必重复造轮子,极大地提高了开发的效率。那么为何不将项目中的功能模块化,打包成可复用的 Python 包呢?本文主要讲的是怎样将一个功能打包成 Python 包,并上传到 PyPi。

    1. 首先得有一个 Python 包

    在 Python 开发的过程中,可以将功能非常明确的模块分离出来,作为一个单独的 Python 包。这样不仅有利于模块的维护和升级,更重要的是在项目开发的过程中,可以复用这些 Python 包。

    最近笔者的一个项目中,需要对 Django View 进行访问权限的控制。Django 自带的 Permission 提供表级别的权限控制,django-guardian 提供对象级别的权限控制。但是,这个项目中并没有 Model,数据完全来自第三方接口。在 GitHub 上搜索无果之后,笔者决定开发一个基于 View 粒度的权限控制 Django App。

    django_view_permission
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── management
    │   ├── commands
    │   │   ├── clearviewpermission.py
    │   │   └── __init__.py
    │   └── __init__.py
    ├── middleware.py
    ├── migrations
    │   ├── 0001_initial.py
    │   └── __init__.py
    ├── models.py
    ├── settings.py
    ├── singnals
    │   ├── handlers.py
    │   ├── __init__.py
    ├── utils.py
    ├── LICENSE
    ├── MANIFEST.in
    ├── README.md
    └── setup.py
    

    2. 打包源码

    可以使用下面的命令打包源代码:

    python setup.py sdist
    

    这样在当前目录的 dist 文件夹下,就会多出一个以 tar.gz 结尾的包。

    3. 上传包

    3.1 注册账户

    访问:https://pypi.python.org/pypi ,注册自己的账户 yourname:yourpassword。

    3.2 创建 .pypirc 配置文件

    如果不配置 .pypirc 文件,上传包到 PyPi 时会提示 403 错误。.pypirc 文件用于上传包到 PyPi 时,验证权限。在用户根目录下创建文件 $HOME/.pypirc,内容如下:

    [distutils]
    index-servers =
        pypi
    
    [pypi]
    repository=https://upload.pypi.org/legacy/
    username=[your_username]
    password=[your_password]
    

    3.3 上传source 包

    python setup.py sdist upload
    

    3.5 安装测试

    pip install django_view_permission
    Collecting django_view_permission
      Downloading django_view_permission-0.0.1.tar.gz
    Installing collected packages: django-view-permission
      Running setup.py install for django-view-permission ... done
    Successfully installed django-view-permission-0.0.1