pypi 账号注册
- 注册
https://pypi.org/account/register
- 添加API tokens
目前安全要求,上传包不允许直接使用账号密码(以前是可以的,网上大部分教程也是直接使用账号密码上传)
制作python包
做个简单的python库,里面有四个文件,分别是setup.py
、mypackage/__init__.py
、mypackage/mypackage.py
、README.md
- setup.py
setup.py 是库的重点,里面详细描述库的信息,setuptools根据setup.py将库打包。
示例:
import os
from setuptools import setup
from setuptools import find_packages
with open(os.path.join(os.path.dirname(__file__), 'README.md')) as readme:
README = readme.read()
VERSION = '0.1.1'
setup(
name='mypackage', # package name
version=VERSION, # package version
description='mypackage description',
author='wwdeng',
author_email='xx@gmail.com',
install_requires=['episcanpy==0.3.1','scanpy'],
long_description=README,
long_description_content_type='text/markdown',
package_data={'': ['data/*']}, # 包的自带数据
classifiers=[
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.8',
],
packages=find_packages(),
}
)
说明:
- version:这个简单,就是包的发布的版本,可以直接写在这,也可以从其他地方引用过来。
- long_description:必须是rst(reStructuredText )格式的,因为这个里面的内容是显示在pypi包首页上,我的long_description是同目录下的README.rst的内容,同时这个README也是我的github项目首页。
- packages:申明你的包里面要包含的目录,比如 ['mypackage', 'mypackage_test'] 可以是这种使用我的示例,让setuptools自动决定要包含哪些包
- install_requires:申明依赖包,安装包时pip会自动安装:格式如下(我上面的setup.py没有这个参数,因为我不依赖第三方包:)):
【推荐】大名鼎鼎的requests库的作者大神kennethreitz为大家准备了一个仓库作为一个setup.py的很好的模板:https://github.com/kennethreitz/setup.py
mypackage/__init__.py
__init__.py
表明mypackage是个包
name="mypackage"
-
mypackage/mypackage.py
mypackage/mypackage.py
仅为一个示例,实际中所有包里面的函数都可以放在mypackage
文件夹下
- README.md
README.md 用于描述这个库,在setup.py做为长描述使用
打包上传
- 安装必要的打包工具库
pip install setuptools wheel twine
setuptools 是打包工具, 是 distutils 增强版,不包括在标准库中。其扩展了很多功能,能够帮助开发者更好的创建和分发 Python 包。大部分 Python 用户都会使用更先进的 setuptools 模块。
wheel 库安装后可以打包成whl的包。Egg 格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012 年定义。Wheel 的出现是为了替代 Egg,它的本质是一个zip包,其现在被认为是 Python 的二进制包的标准格式。
- 将编写的库安装测试一下是否正常
python setup.py develop
- 打包
# 在当前目录的dist文件夹下,生成一个以tar.gz结尾的包
python setup.py sdist build
# 在dist文件夹下生成一个whl格式的包
python setup.py bdist_wheel --universal
- 上传
twine 用于上传包到pypi
twine upload dist/*
参考
https://blog.csdn.net/dreamblog/article/details/132659002
https://codeantenna.com/a/uEd3D2itku
https://github.com/kennethreitz/setup.py/blob/master/setup.py