python自己写包_如何将自己的Python包发布到PyPI

以前写过一篇类似的文章: 如何打包自己的项目并且发布到pypi上,不过由于PyPI进行了一些更新,因此旧方法不大适用了。趁端午有时间,想把haipproxy的客户端发布到PyPI,以改进用户体验,因此这次又尝试了如何将Python包发布到新版本的PyPI上。

编写setup.py

以haipproxy为例,它的setup.py如下

from os import path as os_path

from setuptools import setup

import haipproxy

this_directory = os_path.abspath(os_path.dirname(__file__))

# 读取文件内容

def read_file(filename):

with open(os_path.join(this_directory, filename), encoding='utf-8') as f:

long_description = f.read()

return long_description

# 获取依赖

def read_requirements(filename):

return [line.strip() for line in read_file(filename).splitlines()

if not line.startswith('#')]

setup(

name='haipproxy', # 包名

python_requires='>=3.4.0', # python环境

version=haipproxy.__version__, # 包的版本

description="High aviariable proxy pool client for crawlers.", # 包简介,显示在PyPI上

long_description=read_file('README.md'), # 读取的Readme文档内容

long_description_content_type="text/markdown", # 指定包文档格式为markdown

author="Resolvewang", # 作者相关信息

author_email='resolvewang@foxmail.com',

url='https://github.com/SpiderClub/haipproxy',

# 指定包信息,还可以用find_packages()函数

packages=[

'haipproxy',

'haipproxy.client',

'haipproxy.utils'

],

install_requires=read_requirements('requirements.txt'), # 指定需要安装的依赖

include_package_data=True,

license="MIT",

keywords=['proxy', 'client', 'haipproxy'],

classifiers=[

'Intended Audience :: Developers',

'License :: OSI Approved :: MIT License',

'Natural Language :: English',

'Programming Language :: Python :: 3.4',

'Programming Language :: Python :: 3.5',

'Programming Language :: Python :: 3.6',

],

)

除了setup.py,还有个和包有关的文件为setup.cfg,由于对其还未使用需求,所以这里也不展开讲了。

使用Markdown文件作为项目的Readme

新版PyPI一个令人欣喜的功能是提供了Markdown文档的支持。需要做下面的工作以支持Markdown文件

setup.py 中添加添加新参数,内容如下

long_description=read_file('README.md'),

long_description_content_type="text/markdown", # 新参数

2.更新 setuptools,因为setuptools>= 38.6.0 才能使用新的元数据生成发布包。

pip install -U setuptools

3.用 twine上传分发包,并且只有 twine> = 1.11.0 才能将元数据正确发送到 Pypi上

pip install -U twine

打包项目并上传

1.运行python setup.py check检查setup.py是否有错误,如果没报错误,则进行下一步

注册PyPI帐号,注册完成之后,在本机(Linux或者Mac)创建~/.pypirc文件,文件内容如下

[distutils]

index-servers=pypi

[pypi]

repository = https://upload.pypi.org/legacy/

username = xxxx # pypi登录用户名

password = xxxx # pypi登录密码

3.创建MANIFEST.in文件,它的作用在于包含一些和包同级的文件,比如我的包结构为

-- haipproxy

-- haiproxy

-- __init__.py

-- README.md

-- requirements.txt

-- LICENSE

如果不通过MANIFEST.in将requirements.txt打包到待发布的包中,那么安装的时候就可能出现FileNotFoundError,因此需要将该文件包含到需要发布的包中

include *.in

include *.ini

include *.rst

include *.txt

include LICENSE

global-exclude __pycache__ *.py[cod]

global-exclude *.so *.dylib

4.生成源码分发包

python setup.py sdist

运行该命令之后,会生成一个haipproxy.egg-info文件夹,可以查看其中的SOURCES.txt文件,以确定是否所有需要的内容都已经被包括在待发布的包中

5.上传分发包

twine upload dist/* # 也可以单独指定 dist 文件夹中的某个版本的发布包

上传成功之后,便可以使用pip install package_name来安装和使用发布的包了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值