写了个系统,想把它上传到PyPI,以后可以直接使用pip install安装使用。
注册账号
在PyPI(https://pypi.org/)上注册账号,Register即可
所需python包要求
项目结构
?
- module:项目名
- value***c:包名,包含要运行的主函数
- other、data、texts:均为需要用到的py文件和静态数据文件,如(.json, .txt...)
- value***c/__init__.py:最终运行的.py主程序文件夹,要包含该文件,可以为空,作用是指明主函数,否则无法加载
- README.md:(最终上传未使用,上传到PyPI还涉及到.md的格式转换)
- setup.py:打包的重要文件,元数据信息
- LICENSE:可以通过github创建时选择,协议要求
- MANIFEST.in:静态数据上传需求
setup.py (不能修改名字)
#!/usr/bin/env python
# coding: utf-8
import setuptools
#由于最终README.md还涉及到格式转换,暂未处理,因此,未将该文件上传
# with open("README.md", "r", encoding='UTF-8') as fh:
# long_description = fh.read()
setuptools.setup(
name="value***c", # 包的分发名称,使用字母、数字、_、-
version="1.5", # 版本号, 每次上传到PyPI后,版本后不再运行重复,版本号规范:https://www.python.org/dev/peps/pep-0440/
author="author", # 作者名字
author_email="author@qq.com", # 作者邮箱
description="description", # 包的简介描述
#long_description=long_description, # 包的详细介绍(一般通过加载README.md)
#long_description_content_type="text/markdown", # 和上条命令配合使用,声明加载的是markdown文件
url="https://github.com/author/value***c/tree/master", # 项目开源地址
packages=setuptools.find_packages(), # 包含在发布软件包文件中的可被import的python包文件。如果项目由多个文件组成,我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包
include_package_data=True, # 打包包含静态文件标识!!上传静态数据时有用
classifiers=[ # 关于包的其他元数据(metadata)
"Programming Language :: Python :: 3", # 该软件包仅与Python3兼容
"License :: OSI Approved :: MIT License", # 根据MIT许可证开源
"Operating System :: OS Independent", # 与操作系统无关
],
install_requires=['py-L>=0.12.0', 'ter==3.1.0'], # 指定了当前软件包所依赖的其他python类库。这些指定的python类库将会在本package被安装的时候一并被安装
python_requires='>=3'
)
?MANIFEST.in 上传静态数据!!!
程序运行常常需要静态数据,如json、txt等文件,此时需要该文件,以及setup.py里面?include_package_data=True?
该项目中,我的数据都放在了data文件夹中,因此,MANIFEST.in文件具体示例如:
include data/*.json
表示还要打包上传data文件夹下的所有.json文件
文件中的静态数据读取路径,可能会和本地存在问题,尽可能使用类似
os.path.join(current_dir, '../data/words.json') #该语句在other/readWrite.py下运行,要调用data/words.json静态数据文件
的不会出错的路径。
打包,生成软件包文件,需setuptools和wheel
在该项目路径(上面示例为module)下,运行
?python setup.py sdist bdist_wheel
运行结束后,会生成dist目录,包含相应的.whl文件和.tar.gz文件。其中.tar.gz文件是源文件,.whl是软件分发包 (build distribution) ,这两个文件是要上传到PyPI下的;还有value***c.egg-info目录,包含打包链接依赖信息等;以及build文件夹,结构如下:
?上传到PyPI,需twine
在该项目路径(上面示例为module)下,运行
python -m twine upload dist/*
然后根据要求输入PiPI注册的账户和密码即可。
再在PyPI上登录,即可看到自己上传的包了
安装验证 (和其他python包无区别)
使用方法
import value***c
value***c.main.function(参数)
#执行的是value***c文件夹下的main.py文件中的function(参数)函数
更新后上传
项目等一系列信息修改,重新打包+上传即可,注意,上传需修改版本号,同时删除旧的不需要的版本,否则安装包时需要加上版本号
python setup.py sdist bdist_wheel
python -m twine upload dist/*
Over...
|