内容简介:Python库打包到PyPI
打开pypi官网, 并注册账号
https://pypi.python.org/
创建并编辑.pypirc (注: 家目录下创建)
tianshl@tianshl ~ $ vim .pypirc
[pypirc]
index-servers =
pypi
pypitest
[pypi]
repository=https://pypi.python.org/pypi
[pypitest]
repository=https://testpypi.python.org/pypi
[server-login]
username:tianshl
password:******
前提
1. 要打包的代码必须是一个包(package)
2. 代码是开源的
包(package)
创建包
右键 / New / Python Package / 输入包名 / OK
创建成功后,查看目录结构
tianshl@tianshl wechat $ tree
.
└── wxReply
└── __init__.py
实际上就是文件夹中包含__init__.py文件
编写要打包的源代码
tianshl@tianshl wechat $ tree
.
└── wxReply
├── __init__.py
└── wxReply.py
1 directory, 2 files
创建README.rst和setup.py文件
README.rst为说明文档
setup.py为安装脚本 (核心)
此时wechat包的目录结构
tianshl@tianshl wechat $ tree
.
├── README.rst
├── setup.py
└── wxReply
├── __init__.py
└── wxReply.py
1 directory, 4 files
编辑setup.py内容
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
long_description = f.read()
__author__ = 'tianshl'
__date__ = '2017/01/26'
setup(
name='wxReply', # 名称
version='1.0.6', # 版本号
description='wxReply', # 简单描述
long_description=long_description, # 详细描述
classifiers=[
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Intended Audience :: Developers',
'Operating System :: OS Independent',
],
keywords='wechat robot weixin wxReply', # 关键字
author='tianshl', # 作者
author_email='xiyuan91@126.com', # 邮箱
url='https://my.oschina.net/tianshl/blog', # 包含包的项目地址
license='MIT', # 授权方式
packages=find_packages(), # 包列表
install_requires=['requests', 'itchat'],
include_package_data=True,
zip_safe=True,
)
校验 (python setup.py check)
tianshl@tianshl wxReply $ python3 setup.py check
running check
注: running check 表示没问题, 其他情况对照提示修改即可
打包 (python setup.py sdist)
tianshl@tianshl wechat $ python3 setup.py sdist
running sdist
running egg_info
creating wxReply.egg-info
writing wxReply.egg-info/PKG-INFO
writing dependency_links to wxReply.egg-info/dependency_links.txt
writing requirements to wxReply.egg-info/requires.txt
writing top-level names to wxReply.egg-info/top_level.txt
writing manifest file 'wxReply.egg-info/SOURCES.txt'
reading manifest file 'wxReply.egg-info/SOURCES.txt'
writing manifest file 'wxReply.egg-info/SOURCES.txt'
running check
creating wxReply-1.0.6
creating wxReply-1.0.6/wxReply
creating wxReply-1.0.6/wxReply.egg-info
copying files to wxReply-1.0.6...
copying README.rst -> wxReply-1.0.6
copying setup.py -> wxReply-1.0.6
copying wxReply/__init__.py -> wxReply-1.0.6/wxReply
copying wxReply/wxReply.py -> wxReply-1.0.6/wxReply
copying wxReply.egg-info/PKG-INFO -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/SOURCES.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/dependency_links.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/requires.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/top_level.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/zip-safe -> wxReply-1.0.6/wxReply.egg-info
Writing wxReply-1.0.6/setup.cfg
creating dist
Creating tar archive
removing 'wxReply-1.0.6' (and everything under it)
此时wechat包的目录结构
tianshl@tianshl wechat $ tree
.
├── README.rst
├── dist
│ └── wxReply-1.0.6.tar.gz
├── setup.py
├── wxReply
│ ├── __init__.py
│ └── wxReply.py
└── wxReply.egg-info
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── requires.txt
├── top_level.txt
└── zip-safe
3 directories, 11 files
上传
tianshl@tianshl wxReply $ python3 setup.py sdist register upload
running sdist
running egg_info
writing wxReply.egg-info/PKG-INFO
writing dependency_links to wxReply.egg-info/dependency_links.txt
writing requirements to wxReply.egg-info/requires.txt
writing top-level names to wxReply.egg-info/top_level.txt
reading manifest file 'wxReply.egg-info/SOURCES.txt'
writing manifest file 'wxReply.egg-info/SOURCES.txt'
running check
creating wxReply-1.0.6
creating wxReply-1.0.6/wxReply
creating wxReply-1.0.6/wxReply.egg-info
copying files to wxReply-1.0.6...
copying README.rst -> wxReply-1.0.6
copying setup.py -> wxReply-1.0.6
copying wxReply/__init__.py -> wxReply-1.0.6/wxReply
copying wxReply/wxReply.py -> wxReply-1.0.6/wxReply
copying wxReply.egg-info/PKG-INFO -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/SOURCES.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/dependency_links.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/requires.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/top_level.txt -> wxReply-1.0.6/wxReply.egg-info
copying wxReply.egg-info/zip-safe -> wxReply-1.0.6/wxReply.egg-info
Writing wxReply-1.0.6/setup.cfg
Creating tar archive
removing 'wxReply-1.0.6' (and everything under it)
running register
Registering wxReply to https://upload.pypi.org/legacy/
Server response (410): Project pre-registration is no longer required or supported, so continue directly to uploading files.
running upload
Submitting dist/wxReply-1.0.6.tar.gz to https://upload.pypi.org/legacy/
Server response (200): OK
测试
测试是否上传成功
tianshl@tianshl wechat $ pip3 search wxReply
wxReply (1.0.6) - wxReply
测试能否安装成功
tianshl@tianshl ~ $ pip3 install wxReply
Collecting wxReply
Downloading wxReply-1.0.6.tar.gz
Requirement already satisfied: requests in /usr/local/lib/python3.6/site-packages (from wxReply)
Requirement already satisfied: itchat in /usr/local/lib/python3.6/site-packages (from wxReply)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/site-packages (from requests->wxReply)
Requirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/local/lib/python3.6/site-packages (from requests->wxReply)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/site-packages (from requests->wxReply)
Requirement already satisfied: idna<2.7,>=2.5 in /usr/local/lib/python3.6/site-packages (from requests->wxReply)
Requirement already satisfied: pyqrcode in /usr/local/lib/python3.6/site-packages (from itchat->wxReply)
Requirement already satisfied: pypng in /usr/local/lib/python3.6/site-packages (from itchat->wxReply)
Building wheels for collected packages: wxReply
Running setup.py bdist_wheel for wxReply ... done
Stored in directory: /Users/tianshl/Library/Caches/pip/wheels/49/26/9e/883fd73919e7c2cce794b0acc212216441ced601d6062e2941
Successfully built wxReply
Installing collected packages: wxReply
Successfully installed wxReply-1.0.6
测试能否正常引入
tianshl@tianshl ~ $ python3
Python 3.6.2 (default, Jul 17 2017, 16:44:45)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import wxReply
>>>
以上所述就是小编给大家介绍的《Python库打包到PyPI》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- Maven多模块项目打包前的一些注意事项(打包失败)
- tar打包如何不打包某一个文件夹(排除某些文件夹)
- iOS新手用swift写一个macos打包工具 一键打包到指定位置
- Android应用签名打包
- 多渠道打包
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。