参考出处:https://segmentfault.com/a/1190000008663126html
参考:http://blog.csdn.net/xluren/article/details/41115045python
https://www.cnblogs.com/lazyboy/p/3830104.htmlgit
PS:因为网上讲的有些地方比较笼统,特意发表此文章具体描述。github
上传前的注意事项
假设你的包已经开发完成,而且根目录必需要有一个setup.py。sql
最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文档就像内裤,你最好仍是要有的。shell
若是你须要打包代码文件夹之外的文件,好比版权信息等等,你还须要写一个 MANIFEST.in。segmentfault
关于setup.py的补充说明
name 必须是惟一的,容许使用数字和字母,推荐使用中划线(-)而不是下划线(_),由于pip安装只支持中划线,好比pip install my-pkg,为了避免给本身找麻烦请听话。tomcat
version推荐遵循语义化版本号规则,简单说就像这样:1.2.0安全
做者姓名和邮箱地址不必定要和你的PyPI帐号一致。服务器
测试本地打包命令
若是上面的都没问题,在本地目录执行如下命令应该能成功在dist目录下生成*.tar.gz的包文件。
python setup.py sdist
setup.py 内容为:需放在要打包的项目的根目录下。
setup.py 代码以下:
from setuptools import setup, find_packages
setup(
name='interface_demo',
version='1.0.0',
description='just for test',
classifiers=[
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Intended Audience :: Developers',
'Operating System :: OS Independent',
],
install_requires=[], # install_requires字段能够列出依赖的包信息,用户使用pip或easy_install安装时会自动下载依赖的包
author='songq001',
url='https://github.com',
author_email='284440954@qq.com',
license='MIT',
packages=find_packages(), # 须要处理哪里packages,固然也能够手动填,例如['pip_setup', 'pip_setup.ext']
include_package_data=False,
zip_safe=True,
)
上传并发布包文件到PyPI
建立 PyPI帐号
建立用户验证文件 ~/.pypirc
在本身的用户目录下新建一个空白文件命名为.pypirc,内容以下:
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username =
password =
用户名和密码就是上一步骤所建立的,直接明文输入。若是你以为明文密码不安全也能够留空,在后面的上传过程当中会提示你手动输入。
此处特意说明:建立.pypirc 的目录为:C:\Users\xxx-q001(你的计算机名)。建立时能够先建立一个txt文件,填入响应内容后修改文件名。
修改时改成.pypirc.保存便可。 注意后面必定要加一个.
注册你的包
你须要到PyPI注册并验证你的包,以后才能开始真正上传,注册的方式有如下几种。
使用命令python setup.py register,最简单但官网不推荐,由于使用的是HTTP未加密,有可能会被攻击人嗅探到你的密码。
安装 pip install twine 而后在经过命令 twine register dist/mypkg.whl 完成注册。
注册时cmd内容:
C:\Users\xxx>python D:\python\interface_demo\setup.py register
running register
running egg_info
creating interface_demo.egg-info
writing interface_demo.egg-info\PKG-INFO
writing top-level names to interface_demo.egg-info\top_level.txt
writing dependency_links to interface_demo.egg-info\dependency_links.txt
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
warning: manifest_maker: standard file 'setup.py' not found
reading manifest file 'interface_demo.egg-info\SOURCES.txt'
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
running check
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]:
1
Username: xxxx
Password:
Registering interface_demo to https://upload.pypi.org/legacy/
Server response (410): Project pre-registration is no longer required or supported, so continue directly to uploading files.
上传并完成发布
你能够任选如下两种方式之一发布你的轮子。
使用命令:python setup.py sdist upload,仍是和上面同样,最简单可是有安全隐患。
使用 twine: twine upload dist/*
上传成功cmd内容:
C:\Users\xxxx>python D:\python\interface_demo\setup.py sdist upload
running sdist
running egg_info
writing interface_demo.egg-info\PKG-INFO
writing top-level names to interface_demo.egg-info\top_level.txt
writing dependency_links to interface_demo.egg-info\dependency_links.txt
warning: manifest_maker: standard file 'setup.py' not found
reading manifest file 'interface_demo.egg-info\SOURCES.txt'
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt
running check
creating interface_demo-1.0.0
creating interface_demo-1.0.0\interface_demo.egg-info
copying files to interface_demo-1.0.0...
copying interface_demo.egg-info\PKG-INFO -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\SOURCES.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\dependency_links.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\top_level.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\zip-safe -> interface_demo-1.0.0\interface_demo.egg-info
Writing interface_demo-1.0.0\setup.cfg
Creating tar archive
removing 'interface_demo-1.0.0' (and everything under it)
running upload
Submitting dist\interface_demo-1.0.0.tar.gz to https://upload.pypi.org/legacy/
Server response (200): OK
管理你的包
若是你的包已经上传成功,那么当你登陆PyPI网站后应该能在右侧导航栏看到管理入口。
点击包名进去后你能够对你的包进行管理,固然你也能够从这里删除这个包。
让别人使用你的包
包发布完成后,其余人只须要使用pip就能够安装你的包文件。好比:
pip install package-name
若是你更新了包,别人能够能够经过--update参数来更新:
pip install package-name --update
可能遇到的错误
Upload failed (403): Invalid or non-existent authentication information.
错误的用户验证信息,你须要建立一个用户验证文件 ~/.pypirc。请参阅上文。
Upload failed (403): You are not allowed to edit 'xxx' package information
你须要先注册你的包才能够开始上传,运行注册命令:python setup.py register
Server response (401): Incomplete registration; check your email
你的PyPI帐户还没完成邮箱验证,你须要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。
Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.
error: No dist file created in earlier command
你还没打包就开始了上传命令,建议打包和上传的操做放在一块儿作,好比:
python setup sdist upload
error: Upload failed (499): Client Disconnected
这应该是网络问题,多重试几回。
Upload failed (400): File already exists
文件已经存在了,你每一次上次都应该更新版本号。
=======================
如今来讲一下打包成whl文件操做:
可参考:http://blog.sina.com.cn/s/blog_1318255b00102wbtz.html
具体要比参考地址简单。
首先作好准备工做,即在须要打包的工程根目录下添加setup.py,和前面说的setup.py内容一致。
以后cmd模式进入setup.py目录。
打包成whl命令。
pip wheel --wheel-dir=my_wheelsD:\python\interface_demo\z_test (此处放入你须要打包的工程路径便可--如图我要打包的是z_test工程)
其中--wheel-dir=my_wheels 是打包存储的路径,能够具体设置。若是不是绝对路径,则默认是在C:\Users\xxxx1下建文件夹。
EG:
pip wheel --wheel-dir=D:\other\my_wheelsD:\python\interface_demo\z_test
cmd: python setup.py bdist_wheel
C:\Users\xxx1>pip wheel --wheel-dir=D:\other\my_wheels D:\python\interface_demo\z_test
Processing d:\python\interface_demo\z_test
Building wheels for collected packages: z-test
Running setup.py bdist_wheel for z-test ... done
Stored in directory: d:\other\my_wheels
Successfully built z-test
提示Successfully built z-test则打包成功了。
此时传入本身本地tomcat便可实现局域网共享使用。
安装操做:pip install http://localhost:8080/z_test-1.0.0-py2-none-any.whl (此处为你的whl文件所在绝对路径,此处个人已经上传tomcat服务器,能够直接从服务器上下载安装)