Python 上传项目到PyPI,包括静态数据

写了个系统,想把它上传到PyPI,以后可以直接使用pip install安装使用。

注册账号

在PyPI(https://pypi.org/)上注册账号,Register即可

所需python包要求

  • setuptools
  • wheel
  • twine

项目结构

  • 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包无区别)

  • 方法一:pip install value***c
  • 方法二:进入网页https://pypi.org/project/value***c/#files, 下载.whl文件,进入下载后该文件保存路径,执行pip install ***.whl
  • 方法三:仍进入该网页,下载.tar.gz文件,解压后进入目录,执行python setup.py install 

使用方法

import value***c

value***c.main.function(参数)
#执行的是value***c文件夹下的main.py文件中的function(参数)函数

更新后上传

项目等一系列信息修改,重新打包+上传即可,注意,上传需修改版本号,同时删除旧的不需要的版本,否则安装包时需要加上版本号

python setup.py sdist bdist_wheel

python -m twine upload dist/*

注意:

1、文件夹位置要求,setup.py必须放在所有的文件夹外,module内,但和setup.py同级不能存在其他的.py,否则会发生能pip install,pip list也存在,但无法import的情况,即安装到的site-packages下只有一个dist-info文件夹,没有.py那个文件夹

2、查看具体安装后的包要如何使用,可以用python -m site查看安装后的site_packages位置,然后进入,查看安装的包具体内容。或者pip uninstall 包,会弹出是否确定删除,可以看到都安装了什么,然后位置在哪

3、.py文件需要改路径,基于setup.py下,所以所有的.py引用全需要加上其所在文件夹,即import folder.**.py as **.py。还有文件的路径引用,基本上全都要改

4、setup.py中的python_requires='>=3' 为要求python版本>=3,如果有更细致的要求写法:

# 大于等于3
python_requires='>=3'
# 大于等于3.3,但是不能超过4
python_requires='~=3.3'
# 不能用3.1,3.2
python_requires='!=3.1.*, !=3.2.*'

Over...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值