如果需要将自己写好的python打包,并发布到pypi,这样其他人就可以直接通过pip install
来安装对应的包,可以参考如下教程
首先访问https://pypi.org/ 并注册账号
然后跳转到账号设置
然后选择API token->Add API token
输入token name并在Scope中选择Entire account(第一次需要选择Entire account)
然后在本地,修改.pypirc
文件
输入的内容为:
[pypi]
username = __token__
password = {token}
只需要修改{token}
为自己的token即可
setup.cfg的内容为
[metadata]
license_files = LICENSE.txt
LICENSE.txt是license文件,需要自行编写
setup.py在根目录下,一个示例为
from setuptools import setup
import compileall
from os import path
# 读取readme文件,这样可以直接显示在主页上
this_directory = path.abspath(path.dirname(__file__))
with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
long_description = f.read()
compileall.compile_dir("src")
setup(
name='my-python',
version='1.0.2',
packages=['src',
'src.main',
'src.main.config'],
url='https://github.com/hTangle',
license='Apache 2.0',
author='hTangle',
author_email='',
description='',
keywords='',
python_requires='>=3.4, <4',
long_description=long_description,
long_description_content_type='text/markdown',
install_requires=['requests']
)
具体的字段含义如下:
name
: 包名version
: 版本号,支持如下形式1.2.0.dev1 # Development release
1.2.0a1 # Alpha Release
1.2.0b1 # Beta Release
1.2.0rc1 # Release Candidate
1.2.0 # Final Release
1.2.0.post1 # Post Release
15.10 # Date based release
23 # Serial release
author
: 作者
license
: 许可证
classifiers
: 分类,示例如下:
classifiers=[
# How mature is this project? Common values are
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 3 - Alpha',
# Indicate who your project is intended for
'Intended Audience :: Developers',
'Topic :: Software Development :: Build Tools',
# Pick your license as you wish (should match "license" above)
'License :: OSI Approved :: MIT License',
# Specify the Python versions you support here. In particular, ensure
# that you indicate whether you support Python 2, Python 3 or both.
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
],
keywords
: 关键字,和论文的关键字类似project_urls
: 一些项目的其他链接,示例如下project_urls={
'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
'Funding': 'https://donate.pypi.org',
'Say Thanks!': 'http://saythanks.io/to/example',
'Source': 'https://github.com/pypa/sampleproject/',
'Tracker': 'https://github.com/pypa/sampleproject/issues',
},
packages
: 需要打包的目录,需要以根目录为起点,可以使用find_packages
自动查找包,注意不要漏写install_requires
: 包依赖的其他包python_requires
: python的版本需求package_data
: 需要的额外的文件,例如包强依赖一个本地文件,可以使用如下package_data={
'sample': ['package_data.dat'],
},
打包命令为
python setup.py cmd
cmd可以取值为
bdist_wheel
: create a wheel distributionbdist_egg
: create an “egg” distributionsdist
: create a source distribution (tarball, zip file, etc.)bdist
: create a built (binary) distribution打包为tar.gz
python setup.py sdist
打包好的文件再dist目录下
可以首先使用twine
对包进行检查
twine check dist/*
twine upload dist/*