说明
将日常常用模块打包成tar.gz/egg/wheel包,方便其他工程复用;主要通过setuptools这个模块完成打包工作
简单实例
目录结构:
1 2 3 4 5
| ├── README # readme信息 ├── package_demo # 包名 │ ├── __init__.py │ └── now_time.py # 功能模块 └── setup.py # setup文件
|
now_time.py
1 2 3 4 5 6 7 8 9
| import datetime def now(): return datetime.datetime.now() if __name__ == '__main__': now()
|
setup.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from setuptools import setup, find_packages from os import path here = path.abspath(path.dirname(__file__)) with open(path.join(here, 'README')) as f: long_description = f.read() install_requires=[ 'gitchangelog', ] setup( name='Package_demo', version='1.0.0', description='setup package demo', long_description=long_description, url='https://github.com/', author='ttxsgoto', author_email='359450323@qq.com', license='MIT', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'Topic :: Software Development :: Build Tools', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python', 'Programming Language :: Python :: 2.7', ], keywords='Package_demo', packages=['package_demo'], install_requires=install_requires, )
|
常用字段
- name 项目名称
- version 项目当前的版本,1.0.0表示1.0.0版,目前还处于开发阶段
- description 包的简单描述
- long_description=long_description, 较长的描述
- url 为项目访问地址
- author 为项目开发人员
- author_email 为项目开发人员邮件
- license 为本项目遵循的授权许可
- classifiers 有很多设置,具体内容可以参考官方文档, https://pypi.python.org/pypi?%3Aaction=list_classifiers
- keywords 是本项目的关键词,理解为标签
- packages 指定包,如果很多可以使用find_packages & exclude
- install_requires 依赖包安装
- extras_require 额外的依赖包
打包命令
1 2 3 4 5
| python setup.py check python setup.py sdist python setup.py bdist_egg python setup.py bdist_wheel
|
打包后的目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| python setup.py sdist ├── Package_demo.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ ├── requires.txt │ └── top_level.txt ├── README ├── dist │ └── Package_demo-1.0.0.tar.gz ├── package_demo │ ├── __init__.py │ └── now_time.py └── setup.py
|
包验证
1 2 3 4 5
| pip install Package_demo-1.0.0.tar.gz In [1]: from package_demo import now_time In [2]: now_time.now() Out[2]: datetime.datetime(2017, 6, 14, 23, 10, 52, 278942)
|
分发到PyPI
首先到 PyPI 注册一个帐号, 在邮箱内确认
之后在目录新建一个 .pypirc 文件, 写入下面内容(注意填入自己的帐号密码):
1 2 3 4 5
| [pypirc] servers = pypi [server-login] username:username password:password
|
上传
1 2
| python setup.py register python setup.py register sdist upload
|
登录验证查看是否上传成功
参考链接