zoukankan      html  css  js  c++  java
  • 你知道怎么将自己写的模块上传到pypi吗?

    楔子

    我们在安装第三方包的时候,直接一个pip install xxx命令就搞定了,然后pip会去pypi上寻找我们要安装的包,然后下载下来。

    而pypi(Python Package Index )你可以看成是官方维护的一个大仓库,专门用来存储世界各地的程序员编写的第三方模块。我们使用pip进行安装的时候就会去这个仓库里面找,找到了进行下载,找不到就提示不存在。

    当然我们在安装的时候还可以指定清华源、豆瓣源,因为pypi在国外,下载有时候比较慢,而一旦指定了国内的源,那么就不会去pypi上下载了,所以你可以看成国内也有仓库,专门负责搬运pypi里面的内容。

     

    上传模块至pypi

    编写模块

    我们看一下要上传到pypi的模块长什么样子。

    • hanser-module-upload:项目的根目录

    • hanser:模块名,我们后面可以使用from hanser import xxx,或者import hanser

    • hanser下面的两个py文件:相应的代码

    • LICENSE:开源的 LICENSE,如:Apache License 2.0,MIT License 等等

    • README.md:关于项目的描述,描述如何安装、使用等情况

    • setup.py:setuptools 的构建脚本

    然后我们看看代码长什么样子

    # calc.py
    def add(x: int, y: int) -> int:
        return x + y
    
    
    def sub(x: int, y: int) -> int:
        return x - y
    
    # __init__.py
    from .calc import add, sub
    

      

    然后最重要的就是编写setup.py

    # setup.py 是一个 setuptools 的构建脚本,其中包含了项目和代码文件的信息
    # 如果没有需要先安装,pip install setuptools
    import setuptools
    
    setuptools.setup(
        # 项目的名称
        name="anser-module-upload",
        #项目的版本
        version="0.0.1",
        # 项目的作者
        author="布诺妮亚",
        # 作者的邮箱
        author_email="hanser@baka.com",
        # 项目描述
        description="简单的加减运算上传测试",
        # 项目的长描述
        long_description="简单的加减运算上传测试",
        # 以哪种文本格式显示长描述
        long_description_content_type="text/markdown",
    # 所需要的依赖
    install_requires=[], # 比如["flask>=0.10"] # 项目主页 url="https://www.baidu.com", # 项目中包含的子包,find_packages() 是自动发现根目录中的所有的子包。 packages=setuptools.find_packages(), # 其他信息,这里写了使用 Python3,MIT License许可证,不依赖操作系统。 classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], )

      

    编译

    在上传代码之前,我们需要将代码编译。除了setuptools之外,我们还需要一个模块wheel,如果没有需要安装。

    pip install --user --upgrade setuptools wheel
    

      

    然后对我们的setup.py进行编译

    python setup.py sdist bdist_wheel
    

      

    编译成功之后会在项目中生成多个目录,其中有一个dist目录是我们需要上传的

     里面包含了一个tar.gz的源码包,一个whl文件。

    上传

    然后就是上传了,我们需要前往(https://pypi.org/account/register/)注册一个账号

    然后再安装一个模块:twine,因为上传需要使用到它

    pip install --user --upgrade twine
    

      

    安装完成之后,就可以使用如下命令上传 dist 文件夹里面的文件

    python -m twine upload --repository pypi dist/*
    

      

    我们看到上传成功,下面去页面看一下

     

    注意:这里为了区分,我们把根目录名和模块名取得不一样,我们需要pip install hanser-module-upload,然后在site-packages下面会有一个hanser目录,也就是我们所使用的模块。但是一般情况下,这两者都是一样的。比如:我们安装pandas,那么得到的模块也叫做pandas。

    下面就来试一试吧:

     

     成功安装,当然也是可以使用的。

     

     以后如果我们自己写了一个比较不错的模块的时候,就可以发布到pypi上面。

  • 相关阅读:
    Redis总结
    设计模式-单例模式
    spring5源码解读
    关于asp.net MVC 中的TryUpdateModel方法
    WebSocket在ASP.NET MVC4中的简单实现 (该文章转自网络,经尝试并未实现,请大神指点。)
    C# 新特性 dynamic的使用及扩展
    C#用反射判断一个类型是否是Nullable同时获取它的根类型(转自网络)
    C#通用类型转换 Convert.ChangeType 转自网络
    浅谈.NET反射机制的性能优化 转自网络 博客园
    浅析大型网站的架构 转自软件中国
  • 原文地址:https://www.cnblogs.com/traditional/p/9357501.html
Copyright © 2011-2022 走看看