如何将自己的Python代码打包发布到pypi上

2023-05-16

什么是pypi

简单的说pypi是一个python包的仓库,里面有很多别人写好的python库,你可以通过easy_install或者pip进行安装,方便用户更方面的使用你的代码模块。
将代码打包并上传到pypi上,大体上分为以下几步:
1、整理代码的目录结构,方便打包和python的import,为了方便引用,需要将代码模块变成一个包,所以需要将功能代码用目录来整合方便引用,并且需要创建__init__文件,__init__中可以没有内容,也可以在__init__文件中进行import(from .extractor import Document)操作,以减少整体模块引用时import的层数,避免错误。
├── ./tidypage
│   ├── ./tidypage/cleaners.py
│   ├── ./tidypage/extractor.py
│   ├── ./tidypage/__init__.py
│   └── ./tidypage/titles.py
2、功能模块的目录整理好后,就可以开始整理和添加发布到pypi上所使用的文件了
tidy_page
├── LICENSE
├── README.rst
├── requirements.txt
├── setup.py
├──tidypage
│   ├──cleaners.py
│   ├──extractor.py
│   ├──__init__.py
│   └──titles.py

就是将原来的目录深移一层,文件夹名称可以根据自己意愿。然后在到第一层的目录下创建些特殊文件,具体你可以看看下面这个文件结构你就明白了

LICENSE文件是授权文件,比如: MIT license, APACHE license
README.rst 文件想必大家都不陌生,其实就是项目介绍和使用说明
setup文件才是重点,是python模块安装所需要的文件,它的格式如下:
#!/usr/bin/env python
from __future__ import print_function
from setuptools import setup, find_packages
import sys

setup(
    name="tidy-page",
    version="0.1.1",
    author="Desion Wang",
    author_email="wdxin1322@qq.com",
    description="html text parser,get the content form html page",
    long_description=open("README.rst").read(),
    license="MIT",
    url="https://github.com/desion/tidy_page",
    packages=['tidypage'],
    install_requires=[
        "beautifulsoup4",
        lxml_requirement
        ],
    classifiers=[
        "Environment :: Web Environment",
        "Intended Audience :: Developers",
        "Operating System :: OS Independent",
        "Topic :: Text Processing :: Indexing",
        "Topic :: Utilities",
        "Topic :: Internet",
        "Topic :: Software Development :: Libraries :: Python Modules",
        "Programming Language :: Python",
        "Programming Language :: Python :: 2",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
    ],
)

NAME  名字,一般放你包的名字即可
PACKAGES  包含的包,可以多个,这是一个列表
DESCRIPTION  关于这个包的描述
LONG_DESCRIPTION  参见read方法说明
KEYWORDS  关于当前包的一些关键字,方便PyPI进行分类。
AUTHOR  谁是这个包的作者,写谁的名字吧
AUTHOR_EMAIL  作者的邮件地址
URL  你这个包的项目地址,如果有,给一个吧,没有你直接填写在PyPI你这个包的地址也是可以的
VERSION  当前包的版本,这个按你自己需要的版本控制方式来
LICENSE  授权方式
INSTALL_REQUIRES 模块所依赖的python模块
    文中的 classifiers 的内容并不是随便填写的,你需要参照本文参考文档中的PyPI Classifiers来写
3、开始使用Distutils进行打包
    为了保证效果,在打包之前我们可以验证setup.py的正确性,执行下面的代码
    python setup.py check
  
输出一般是running check
如果有错误或者警告,就会在此之后显示
没有任何显示表示Distutils认可你这个setup.py文件。

如果没有问题,那么就可以正式打包,执行下面的代码:

python setup.py sdist

执行完成后,会在顶层目录下生成dist目录和egg目录

tidy_page
├── tidy_page/dist
│   ├── tidy_page/dist/tidy-page-0.1.0.tar.gz
│   └── tidy_page/dist/tidy-page-0.1.1.tar.gz
├── tidy_page/LICENSE
├── tidy_page/README.rst
├── tidy_page/setup.py
├── tidy_page/tidypage
│   ├── tidy_page/tidypage/cleaners.py
│   ├── tidy_page/tidypage/extractor.py
│   ├── tidy_page/tidypage/__init__.py
│   └── tidy_page/tidypage/titles.py
├── tidy_page/tidy_page.egg-info
│   ├── tidy_page/tidy_page.egg-info/dependency_links.txt
│   ├── tidy_page/tidy_page.egg-info/PKG-INFO
│   ├── tidy_page/tidy_page.egg-info/requires.txt
│   ├── tidy_page/tidy_page.egg-info/SOURCES.txt
│   └── tidy_page/tidy_page.egg-info/top_level.txt

   4、打包完成后就可以准备将打包好的模块上传到pypi了,首先你需要在pypi上进行注册 goto PyPI Live 
        注册完成后,你需要在本地创建好pypi的配置文件,不然有可能会出现使用http无法上传到pypi的问题
         Create a .pypirc configuration file,在用户的home目录下创建.pypirc文件,文件的内容如下

[distutils]
index-servers =
  pypi

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password
  


chmod 600 ~/.pypirc  


python setup.py register -r pypi  
在pypi上注册模块

python setup.py sdist upload -r pypi  
上传python文件包,没有问题你就可以在pypi上看到你上传的包了
并且可以使用pip搜索和install你的python包了
祝你成功!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将自己的Python代码打包发布到pypi上 的相关文章

  • ECS弹性云服务器常用端口、安全组

    弹性云服务器常用端口 弹性云服务器常用端口如 表1 所示 您可以通过配置安全组规则放通弹性云服务器对应的端口 xff0c 详情请参见 添加安全组规则 表1 弹性云服务器常用端口 协议 端口 说明 FTP 21 FTP服务上传和下载文件 SS
  • 01背包问题(滚动数组实现的逻辑)

    package tttest public class mybetterbag public static void main String args int weight 61 1 3 4 int bagsize 61 4 int val
  • java递归实现辗转相除法

    public static int getres int a int b if b 61 0 return getres b a b return a
  • java 线索二叉树的构建

    public class test public static void main String args Node root 61 new Node 1 Node node2 61 new Node 2 Node node3 61 new
  • ubuntu下查看文件(夹)大小的命令

    记录下自己常用的查看文件夹和文件大小的命令 查看当前所处的文件夹的整个大小 xff08 不包括具体内容 xff0c 只看当前文件夹大小 xff09 span class token function du span sh 查看当前文件夹中各
  • git stash时出现xxx:needs merge问题

    项目需要git merge其他分支 xff0c 但由于本地也修改过 xff0c 所以希望先git stash后再merge xff0c 这时出现以下问题 xff1a xxx xxx xxx cpp xff1a needs merge 通过g
  • FFMPEG 之视频播放

    先看界面效果 xff0c 虽然有点low xff0c 但是效果实现了 一 实现原理 1 使用ffmpeg解码视频 2 然后使用libyuv播放解码的视频 二 实现 1 先看目录结构 2 ffmpeg编译以及引用 xff0c 在之前的篇章已经
  • 一步一步学CMake 之 VSCode+CMakeLists 调试 C++ 工程

    目录 1 插件推荐 2 文件准备 3 开始调试 一步一步学 CMake 系列文章 1 插件推荐 CMake CMake tools 2 文件准备 新建文件夹 xff1a TEST 新建文件 xff1a CMakeLists txt 内容如下
  • 51单片机使用8位重装定时器实现PWM输出同时实现DAC转换

    51单片机使用八位重装定时器实现PWM输出同时实现DAC转换 最近想要做一个数控电源 xff0c 打算使用51单片机实现电压和电流的闭环 xff0c 但是手头上的51单片机为STC89C51系列的单片机 xff0c 没有ADC采样功能 xf
  • 【MYSQL】分组之后获取每组最新的数据

    记录一次有点麻烦的sql 可以直接复制拿去测试 xff0c 一开始我也百度来着 xff0c 发现要么没法满足我的需求 xff0c 要么就连看下去的欲望都没有 建表测试demo xff1a span class token keyword C
  • C++ 指针中:指针数组 指向指针数组的指针 指向指针的指针

    指针数组 xff1a 存储指针的数组 pa n an array of pointers 注意这里 优先级高于 xff0c 因此pa是一个包含三个指针的数组 指向指针数组的指针 pd n pointers to an array of po
  • Flutter要被放弃了?别瞎传了!

    前言 Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架 xff0c 正在被越来越多的开发者和组织使用 xff0c 包括阿里的咸鱼 腾讯的微信等 今天 xff0c 我主要讲解Flutter中文本组件方面的Widge
  • (学习笔记)手把手教你学51单片机:定时器与数码管

    一 逻辑电路与逻辑运算 逻辑运算符 xff1a xff08 1 xff09 按变量整体值进行运算 xff1a 逻辑与 amp amp 逻辑或 xff08 xff09 逻辑非 xff08 xff01 xff09 xff08 2 xff09 按
  • (学习笔记)手把手教你学51单片机:中断与数码管动态显示

    一 c语言的数组 1 1数组的基本概念 数组是具有相同数据类型的有序数据的组合 xff0c 一般来讲数组定义后满足以下三个条件 xff1a xff08 1 xff09 具有相同的数据类型 xff08 2 xff09 具有相同的名字 xff0
  • KST-51:从999999开始的倒计时程序,只显示有效位

    此程序为手把手教你学51单片机的例程 例程中实现只显示有效位 xff08 高位0不显示 xff09 xff0c 实现了数码管稳定显示不抖动 for结合break 实现只显示有效位 switch结合i 实现数码管动态刷新 include lt
  • KST51单片机:通过中断实现矩阵按键的次数检测与消抖

    以Key4为例 xff0c 使用定时中断2ms进行消抖 xff0c 对连续8次 xff08 16ms xff09 的按键状态进行判断 如果全部为1则弹起 xff0c 将按键当前状态 xff08 Keysta xff09 为1 xff1b 全
  • 关于单片机蓝桥杯

    经大佬提醒 xff0c 已修改 芯片 xff1a IAP15F2K61S2 考核内容 xff1a LED 数码管 独立按键 矩阵按键 定时器 555 超声波 xff08 有基础 xff09 iic EEPROM ADC ds18b20 xf
  • NX nomachine 远程桌面配置

    其实它是Linux下一款类VNC的远控软件 xff0c 但据说安全性方面比VNC更好 xff0c 通过SSH协议加密进行传输的 而且传输是采用数据压缩技术 xff0c 传输更快 1 安装rpm包 安装顺序 xff1a root 64 loc
  • git 命令

    1 打patch xff08 git format patch xff09 git format patch HEAD 生成最近的1次commit的patch git format patch HEAD 生成最近的2次commit的patc
  • gitlab使用

    参考https blog csdn net justlpf article details 80681853 一 基本操作 1 登录 xff1a 2 修改密码 xff1a 二 项目管理 1 新建项目 2 编辑或删除项目 三 用户管理 xff

随机推荐