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

  • 相关阅读:
    Mycat读写分离+高可用笔记
    MyCAT基础安装笔记
    C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox选中判断
    C# winform DataTable 批量数据处理 增、删、改 .
    选中CheckBoxList的值放到TextBox中,再次选中从textBox中删除
    dede后台删除文章后台还有分页显示解决方法
    dedecms数据库表说明大全
    织梦自增函数[field:global name=autoindex/]常见用法
    http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
    web.config设置之system.webServer 详细介绍,为网站设置默认文档
  • 原文地址:https://www.cnblogs.com/slqt/p/5163069.html
Copyright © 2011-2022 走看看