零、前言

最近做了一个小工具,查询IP或者域名的归属地。做完之后想发布到PyPI上,这样大家就可以通过pip来安装了。

在发布的过程中遇到了一些问题,也学到了很多东西。记录到这篇文章中。希望对大家有所帮助。

一、准备工作

首先需要在PyPI网站上注册一个帐号,这样才能上传自己的package。

打开PyPI首页,可以看到右上角有Register按钮,点击:

之后填写必要的信息,然后到邮箱点击激活邮件中的链接就可以了。

注意:密码需要包含字母、数字,或者长度超过16位。

注册好帐号之后,我们就可以开始将自己的package标准化了。

二、标准化

标准化其实是我自己起的名,具体的意思就是将自己的package修改成可以在PyPI上发布需要的过程。

标准化主要是添加一些文件,比如更新记录,readme等等。

具体的可以参考这篇文章,我这里简单的记录一下流程:

  1. 修改目录结构,最起码要在根目录下添加一个__init__.py。
  2. 如果没有可执行脚本,比如只用于import,那么不需要bin/文件夹。
  3. 创建一个CHANGES.txt,记录版本更新内容。
  4. 如果有文档,放到docs文件夹中。
  5. 创建LICENSE.txt文件,内容是开源协议。
  6. 创建MANIFEST.in文件,这个文件的作用是告诉PyPI要包含什么文件。因为像txt这样的文件默认是不包含的。
  7. 创建README.txt,写一些package的介绍。
  8. 创建setup.py文件,这个是最重要的。

着重说一下最后一步,创建setup.py文件。

from distutils.core import setup

setup(
name='TowelStuff',
version='0.1.0',
author='J. Random Hacker',
author_email='jrh@example.com',
packages=['towelstuff', 'towelstuff.test'],
scripts=['bin/stowe-towels.py','bin/wash-towels.py'],
url='http://pypi.python.org/pypi/TowelStuff/',
license='LICENSE.txt',
description='Useful towel-related stuff.',
long_description=open('README.txt').read(),
install_requires=[
"Django >= 1.1.1",
"caldav == 0.1.4",
],
)

这是非常简单的一个例子,下面说一下各项的作用。

name:package的名字

version:版本号

author:作者

author_email:作者的邮箱

packages:这个是package内包含的所有package,对于一个小package来说,就是包含它本身

scripts:可执行脚本,如果没有就省略这项

url:项目的链接,可以链接到github上

license:开源协议的名称

description:简单的项目描述

long_description:详细描述,这里是直接把README.txt的内容读了进来

install_requires:依赖项目,这个如果不会写可以用pip freeze > requirements.txt来查看一下系统中已有package,参考这个格式就行。

三、上传

文件都创建好之后,就是上传了。

首先我们运行

$ python setup.py register

选择1,输入用户名和密码,这样就会在PyPI上注册这个项目了。

注册好之后,实际上还没有上传文件,我们接着运行

$ python setup.py sdist upload

这条命令其实做了两件事,第一件是生成tar.gz文件,第二件是上传到PyPI上。

执行完成之后就搞定了,我们可以运行一下pip install看看是否可以成功安装。

如何将你自己的Python package发布到PyPI上的更多相关文章

  1. 实战教程:如何将自己的Python包发布到PyPI上

    1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...

  2. 如何将Python项目发布到PyPI

    The Python Package Index (PyPI) is a repository of software for the Python programming language. 如何打 ...

  3. 将python包发布到PyPI和制作whl文件

    参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...

  4. 将自己写的Python代码打包放到PyPI上

    如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...

  5. 在pypi上发布python包详细教程

    使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简 ...

  6. python: 模块发布

    一.准备发布 1.为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样) 2.在文件夹中创建一个名为『setup.py』的文件,内容如下: #encoding:u ...

  7. 如何在Pypi上发表自己的Python库

    背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便.这里我向大家介绍一下如何在Pypi上发表自己的Python库. 准备 注册账号 很显 ...

  8. 快速构建CLI程序并发布到PyPi

    构造一个简单的CLI程序 typer 这个从去年就被各种营销号吹成Web框架的 第三方库, 与 FastAPI 同出一人之手,它不是Web框架,它是一个用来构建CLI程序的库,我们就简单搞个例子 # ...

  9. 【转】发布python的包至pypi服务器

    [原文链接]http://yejinxin.github.io/distribute-python-packages-to-pypi-server/ 使用pip或easy_install可以管理和安装 ...

随机推荐

  1. does not support ASP.NET compatibility 错误

    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibi ...

  2. [翻译][Trident] Trident state原理

    原文地址:https://github.com/nathanmarz/storm/wiki/Trident-state ----------------------------- Trident在读写 ...

  3. PostQueuedCompletionStatus详解

    PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包.该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatu ...

  4. oracle创建自增长列

    --创建一个新表 /*create table students(stu_id number,stu_name varchar2(20),stu_email varchar2(40),primary ...

  5. ANSI_NULLS 和 QUOTED_IDENTIFIER

    1  ANSI_NULLS 当 SET ANSI_NULLS 为 ON 时,对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE    例如:SELECT * from t ...

  6. How to Send Information (String, Image, Record) Between Two Applications

    http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm here are many situation when you need t ...

  7. IOS 7 Study - Implementing Navigation with UINavigationController

    ProblemYou would like to allow your users to move from one view controller to the other witha smooth ...

  8. Android ViewPager 应该及技巧

    1.   android 中的ViewPager 功能类似于iOS中的scrollView,实现最主要的页面的左右滑动功能.该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中 ...

  9. 2013 Fench Open quart-semifnl press conference

    http://v.youku.com/v_show/id_XNTY3NTAwOTA4.html?firsttime=179 Novak, very  congradutlations,  to rea ...

  10. JavaScript Design Patterns: Mediator

    The Mediator Design Pattern The Mediator is a behavioral design pattern in which objects, instead of ...