zoukankan      html  css  js  c++  java
  • python开源包提交到pypi社区

    为啥要提交到pypi?因为提交成功后,你今后想用你自己写的模块,只要pip install一下就可以了。

    那么如何提交?请参看本篇教程

    首先要确定你的包叫啥名,比如我的包叫xlutils3,既然确定了,那么就创建该名称的文件夹,然后把源码放到文件夹中,然后检查文件夹内部的文件里的每个导入库是否写对路径,比如xlutils.copy就得改成xlutils3.copy

    然后就是在文件夹下创建一个__init__.py文件,内容可以全部为空,整理成包的文件结构大概像下面这样:

    xlutils3/
        |
        +-- __init__.py
        |
        +-- myscripts1.py
        |
        +-- mysscripts2.py
        |
        +-- mymorescripts.py
        |
    

    xlutils3就是包的名称,下面my***.py的各种文件就是原有的各种代码模块。

    这个包如果不上传到pypi,纯粹本地用已经完全没问题。

    所以你要检查内部一些方法函数的话可以import然后调用方法检查一下

    如果要打包到PyPI上,那么就需要在上面的基础上,在加点料。首先,需要调整下文件的目录结构,把上面的改成下面这个样子:

    xlutils3/
        |
        +-- xlutils3/
        .       |
        .       +-- __init__.py
        .       |
        .       +-- myscripts1.py
        .       |
        .       +-- mysscripts2.py
        .       |
        .       +-- mymorescripts.py
        .       |
        |
    

    就是把原先的xlutils3文件夹放到另一个xlutils3文件夹下,然后在最上层的文件夹中创建一些文件:

    xlutils3
        |
        +-- COPYING.txt
        |
        +-- README.txt
        |
        +-- setup.py
        |
        +-- xlutils3
        .       |
        .       +-- __init__.py
        .       |
        .       +-- myscripts1.py
        .       |
        .       +-- mysscripts2.py
        .       |
        .       +-- mymorescripts.py
        .       |
        +-- docs/
        |
    

    除了docs这个目录,其他文件一个都不可以少。

    1. COPYING.txt 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入MIT License全文即可,当然,你完全可以不要这个文件。
    2. README.txt,尽量放些东西在这里,后面我们可能会用到它的。需要注意的是,Windows的回车和Linux不一样,所以建议用Windows。另外你也可以使用README.rst这类文件代替
    3. setup.py,核心文件,这里面的内容马上我们会讲。
    4. docs/,这个文件夹你放你的documents吧,不过要用心写文档真是个难事,所以这个文件夹基本是不存在的——为自己的懒惰可耻一把。
    5. 如果的包整个就一个文件,那么你也完全可以不用考虑再建一层目录了,直接放到README文件所在目录下就可以了,虽然我不建议这么操作。

    setup.py示例文件如下,不多说了,提交前请把中文注释删除

    import codecs
    import os
    import sys
     
    try:
        from setuptools import setup
    except:
        from distutils.core import setup
    """
    打包的用的setup必须引入,
    """
     
    def read(fname):
        """
        定义一个read方法,用来读取目录下的长描述
        我们一般是将README文件中的内容读取出来作为长描述,这个会在PyPI中你这个包的页面上展现出来,
        你也可以不用这个方法,自己手动写内容即可,
        PyPI上支持.rst格式的文件。暂不支持.md格式的文件,<BR>.rst文件PyPI会自动把它转为HTML形式显示在你包的信息页面上。
        """
        return codecs.open(os.path.join(os.path.dirname(__file__), fname)).read()
     
     
     
    NAME = "somefunctions"
    """
    名字,一般放你包的名字即可
    """
     
    PACKAGES = ["somefunctions",]
    """
    包含的包,可以多个,这是一个列表
    """
     
    DESCRIPTION = "this is a test package for packing python liberaries tutorial."
    """
    关于这个包的描述
    """
     
    LONG_DESCRIPTION = read("README.rst")
    """
    参见read方法说明
    """
     
    KEYWORDS = "test python package"
    """
    关于当前包的一些关键字,方便PyPI进行分类。
    """
     
    AUTHOR = "MitchellChu"
    """
    谁是这个包的作者,写谁的名字吧
    我是MitchellChu,自然这里写的是MitchellChu
    """
     
    AUTHOR_EMAIL = "youremail@email.com"
    """
    作者的邮件地址
    """
     
    URL = "http://blog.useasp.net/"
    """
    你这个包的项目地址,如果有,给一个吧,没有你直接填写在PyPI你这个包的地址也是可以的
    """
     
    VERSION = "1.0.1"
    """
    当前包的版本,这个按你自己需要的版本控制方式来
    """
     
    LICENSE = "MIT"
    """
    授权方式,我喜欢的是MIT的方式,你可以换成其他方式
    """
     
    setup(
        name = NAME,
        version = VERSION,
        description = DESCRIPTION,
        long_description = LONG_DESCRIPTION,
        classifiers = [
            'License :: OSI Approved :: MIT License',
            'Programming Language :: Python',
            'Intended Audience :: Developers',
            'Operating System :: OS Independent',
        ],
        keywords = KEYWORDS,
        author = AUTHOR,
        author_email = AUTHOR_EMAIL,
        url = URL,
        license = LICENSE,
        packages = PACKAGES,
        include_package_data=True,
        zip_safe=True,
    )
     
    ## 把上面的变量填入了一个setup()中即可。
    

    值得注意的是classifiers 不可以乱写,否则会导致上传失败

    一般情况下,Distutils只会包含你包文件夹内的:README.txt,setup.py,packages里面定义的所有某块的.py文件,py_modules参数包含的所有.py文件,其他文件需要被包含进来,需要单独添加。需要添加,你可以在根目录添加一个MANIFEST.in文件,将要包含的文件放入,具体规则请参考官方文档格式。如我们这里需要添加COPYING.txt可以在MANIFEST.in中添加如下行:include COPYING.txt

    写完之后为了检查,可以在命令行里cd到文件的setup.py所在的目录输入python setup.py check

    一般有异常的话都是你setup.py文件没写对

    没有异常输出的话就可以打包:python setup.py sdist

    打包后可以上传,但建议先把包拿到其他未装过包的地方安装运行一遍

    没问题的话可以直接进行:去pypi注册一个账号,然后命令行里输入python setup.py register sdist upload

    running register
    We need to know who you are, so please choose either:
     1. use your existing login,
     2. register as a new user,
     3. have the server generate a new password for you (and email it to you), or
     4. quit
    Your selection [default 1]: 1
    

    一般都会报错,所以我建议在setup.py的同目录下放上账号文件,账号文件名为.pypirc,内容如下:

    [pypi]
    
    repository = https://pypi.python.org/pypi
    
    [server-login]
    
    username:slqt
    
    password:【你的密码】
    

    记得windows下写的文档,开头会有讨厌的BOM!解决办法有两种:

    1、用editplus的十六进制编辑器删掉BOM

    2、在linux里建立好文件后拖到windows下,然后换行处理

    然后重新执行python setup.py sdist以及后续的操作,上传ok后可以去页面看一下,然后卸载本地的,然后pip install测试下

    以下就是我发布的包的地址https://pypi.python.org/pypi/xlutils3

  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/slqt/p/5163069.html
Copyright © 2011-2022 走看看