在 PyPI 上发布 python 包

PyPI(Python Package Index)是 Python 官方的包存储仓库。PyPI 推荐使用 pip(python install packages,Python 包管理工具)来下载储存在 PyPI 库中的 python 包。本文内容主要介绍如何在 PyPI 上发布自己编写的 python 包。

参考链接:https://www.osgeo.cn/python-packaging/tutorials/packaging-projects.html

自己编写好的 python 项目存放在 /home/cropgbm_python/cropgbm/ 文件夹下,希望将 cropgbm/ 打包并上传至 PyPI 中。


在这里插入图片描述

1. 创建 __init__.py 文件

首先在 /home/cropgbm_python/cropgbm/ 目录下创建 __init__.py 空文件


在这里插入图片描述


2. 创建 MEADME.md 文件

/home/cropgbm_python/ 目录下创建 MEADME.md 文件。这里的 MEADME.md 复制于 Readmd.md,仅更改了文件名。

注意!文件名必须是 [README, README.rst, README.txt, README.md] 中一种,否则在打包时会出现警告:

warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md

3. 创建 setup.py 文件

/home/cropgbm_python/ 目录下创建 setup.py 文件。setup.py 指定包的相关信息(如名称、版本、依赖等)以及所要包括的代码文件。

setup.py 文件的一般格式如下。

from setuptools import setup, find_packages

setup(
    name='cropgbm',
    version='1.1.1',
    description=(
    	'Crop Genomic Breeding machine (CropGBM) is a multifunctional program 
    	 that integrates data preprocessing, population structure analysis, SNP selection, 
    	 phenotype prediction, and data visualization.'
    	 ),
    long_description=open('README.md').read(),
    author='Yuetong Xu, Jun Yan',
    author_email='yuetong_xu@163.com',
    maintainer='Yuetong Xu',
    maintainer_email='yuetong_xu@163.com',
    license='MIT License',
    url='https://github.com/YuetongXU/CropGBM',
    packages=find_packages(),
    entry_points={
    'console_scripts': [
        'cropgbm = cropgbm.main:main',
        ]
    },
    package_data={
        'cropgbm': ['testdata/*']
    },
    classifiers=[
        'Operating System :: OS Independent',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3'
    ],
    python_requires='>=3',
    install_requires=[
        'wheel',
		'numpy',
		'scipy',
		'pandas',
		'scikit-learn>=0.24',
		'lightgbm',
		'matplotlib',
		'seaborn'
    ]
)
  • name - 包的名字
  • version - 包的发布版本号
  • description - 包的简要描述
  • long_description - 包的详细描述,内容会展示在 PyPI 的包首页上。这里使用的是 README.md 文件,此文件也是我 github 中 cropgbm 项目的 README.md。
  • url - 包主页的 URL,内容会展示在 PyPI 的包首页上。一般 URL 为 GitHub 等的代码托管服务的链接。
  • packages - 包的代码所在目录。这里使用 find_packages() 函数,将包含 __init__.py 文件的目录作为要打包的代码。如本例会将 /home/cropgbm_python/cropgbm/ 文件夹进行打包。
  • package_data - 包的非 .py 文件所在目录。由于 find_packages() 函数仅会打包目录下的 .py 文件,如果需要在包中加入非 .py 文件,可以通过该参数指明路径。
  • entry_points - 为包添加命令行工具。 ‘cropgbm = cropgbm.main:main’ 指 python 包安装时会在 /usr/local/bin/ 路径下创建一个名为 cropgbm 的文件,此文件链接的是 cropgbm 包中 main.py 脚本中的 main 函数( “:” 指明是文件中的函数)。
  • install_requires - 包的依赖,通过 pip 安装 cropgbm 包时会自动检测依赖是否满足,对于不满足的依赖则自动安装所需依赖。如果没有所需依赖,此参数可以省略。

若想添加更多信息,参见

https://www.osgeo.cn/python-packaging/guides/distributing-packages-using-setuptools.html

https://blog.csdn.net/pfm685757/article/details/48651389

https://pengshiyu.blog.csdn.net/article/details/90582313

4. 运行 setup.py 文件进行打包

MEADME.md 和 setup.py 文件创建好后,如图:


在这里插入图片描述

/home/cropgbm_python/ 目录下运行 setup.py 文件,进行打包

$ python setup.py sdist

打包完成后新生成 distcropgbm.egg-info 两个文件夹,其中 dist 文件夹下储存了压缩好的、可以上传至 PyPI 的 python 包。


在这里插入图片描述
在这里插入图片描述

5. 检测包安装是否符合预期

为了保证 python 包可以被其他用户正确安装,可以使用 python setup.py install 命令在本地安装 python 包。

$ python setup.py install

install 包括两步:python setup.py build, python setup.py install

这两步可分开执行, 也可只执行 install, 因为 install 总是会先 build 后 install.

install 完成后会在 /usr/local/lib/python3.6/dist-packages/ 路径下生成文件 cropgbm-1.1.1-py3.6.egg,在 /usr/local/bin/ 路径下生成文件 cropgbm 。

在这里插入图片描述
在这里插入图片描述

install 完成后可以在本地命令行通过调用 cropgbm 来运行 cropgbm 包:

$ cropgbm -h

参考链接 https://www.jianshu.com/p/f8ffbf18c312

6. 将包上传至 PyPI

  1. 在 PyPI(https://pypi.org/)上注册账户。

  2. 安装上传所需的包 twine

     $ pip install --user --upgrade twine
    
  3. 利用 twine 将 cropgbm-1.1.tar.gz 上传至 PyPI,期间会让你输入注册的用户名和密码

     $ twine upload dist/*
    

7. 在 PyPI 上查看 cropgbm 包的信息

上传完成后可以在 PyPI 的网站上看到 cropgbm 包的信息。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值