将自己写的Python代码打包放到PyPI上
2016-09-30 10:00
197 查看
如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index)。刚开始我以为要将代码打包放到PyPI上是一件非常复杂繁琐的事情,不过看过《Dive Into Python 3》的PACKAGING PYTHON LIBRARIES介绍(CHAPTER 16),并自己动手操作了一下,发现打包发布这个事情并没有想象中的那么有难度。为了方便其他朋友阅读的方便,就尝试写了这个博文,来记录下如何将自己写的Python代码打包上传到PyPI上。
在Python的世界里,有个叫Distutils的工具模块可以帮我们轻松的解决这个问题,既然这样,让我们开始打包之旅吧。
要打包代码,首先你的确保你的代码得是个包。比如,你写了一些功能的代码块,为了方便引用,你就需要将代码变成一个包,下次需要使用的时候,直接引用这个包里面的某个具体功能就好了。在Python中,要将这些代码变成包非常容易,你的这些功能的合集,可以用一个你觉得合适的名称来命名,创建这个命名的文件夹,并在文件夹下创建一个
到这里,我们已经有Python包了,如果不传到PyPI上的话,你都可以直接用了,最直接的方法是将这个文件夹拷到你的项目目录下,然后在项目代码里,你大概就能引用它了:
code
当然,我们的目标是打包到PyPI上,而不是将这个包拷来拷去的,后面安装一下,引用起来将更加的方便。
好了,既然要放到PyPI上,那么我们就需要在上面的基础上,在加点料。首先,我们需要调整下文件的目录结构,把上面的改成下面这个样子:
就是将原来的目录深移一层,文件夹名称一样即可。这步也不难吧。好吧,然后在到第一层的目录下创建些特殊文件,具体你可以看看下面这个文件结构你就明白了:
哇,咋一看,变了好多啊,其实不多,解释下:
TIPS:
COPYING.txt 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入MIT License全文即可,当然,如果你不清楚这个,你完全可以不要这个文件。
README.txt,这个文件想必研发都应该清楚。如果有,尽量放些东西在这里了,后面如果可能我们会用到它的。需要注意的是,Windows的回车和Linux不一样,所以建议用Windows的好了。另外你也可以使用
setup.py,核心文件,这里面的内容马上我们会讲。
docs/,这个文件夹你放你的documents吧,不过要用心写文档真是个难事,所以这个文件夹基本是不存在的——为自己的懒惰可耻一把。
如果的包整个就一个文件,那么你也完全可以不用考虑再建一层目录了,直接放到README文件所在目录下就可以了,虽然我不建议这么操作。
好了,文件都建好了,再来进化下,我们为
code
你如果需要写一个
TIPS:
文中的
一般情况下,Distutils只会包含你包文件夹内的:
code
如果有错误输出,按照显示进行修改即可,到没有任何异常输出的时候,你就可以开始创建你的源码分发包了。打包也仅仅是个命令而已:
code
一路下来,我们获得了可以分发的包了,接下来,我们要做的就是将这个包放到PyPI上去了。
我们在做这步前,建议你先到PyPI上注册个帐号,这样方便些,当然,你也可以不注册,后面的步骤中会有提示,根据提示进行也可以。——本文按照先在PyPI上注册过帐号的方式进行。
我们有了PyPI的帐号,那么我们开始吧,离成功仅一步之遥了。在你包的根目录下,运行下面的Shell命令:
code
系统会提示类似下面信息:
恩,如果你没有帐号,在这一步选择2吧,我们不二了,分道扬镳鸟,选择1,回车根据提示输入用户名和密码,接着就等待处理。
当你看到上面这种信息的时候,说明已经完成了上传工作,这个时候你的包就在PyPI上了。
TIPS:
可能上传的过程出现问题,这个时候你需要终止当前过程,之后到PyPI上查看,如果已经有了这个包,你需要删除(建议操作),或者你重新编译(用新的版本号)在上传
最后问你要不要保存你的帐号信息,你可以选择y/n,y的话,在你的用户根目录下会有个
包到这里,就完成了上传PyPI的工作了。你如果要用,安装下就好:
code
这个时候,你在你新的项目中只要直接import就可以了
code
到此就结束了,是不是感觉很简单?
后记:
本文是Mitchell Chu根据自己打包的经历写的一篇入门文章,由于本人也是刚刚开始使用,难免会有错谬之处,还请指正。另,文中仅仅是打包成压缩包的形式,还有编译成可执行文件的发布方式这里没有,有此需要的请参考文后的参考文档。
在Python的世界里,有个叫Distutils的工具模块可以帮我们轻松的解决这个问题,既然这样,让我们开始打包之旅吧。
要打包代码,首先你的确保你的代码得是个包。比如,你写了一些功能的代码块,为了方便引用,你就需要将代码变成一个包,下次需要使用的时候,直接引用这个包里面的某个具体功能就好了。在Python中,要将这些代码变成包非常容易,你的这些功能的合集,可以用一个你觉得合适的名称来命名,创建这个命名的文件夹,并在文件夹下创建一个
__init__.py文件,剩余的就是将你这些代码放入到这个文件夹下面即可。整理成包的文件结构大概像下面这样:
somefunctions/ | +-- __init__.py | +-- myscripts1.py | +-- mysscripts2.py | +-- mymorescripts.py |
somefunctions就是你包的名称,下面
my***.py的各种文件就是你原有的各种代码模块。是不是很简单就将自己的代码变成了包?确实很简单,你这步就是新建一个文件夹,把文件全放进去而已——哦,还有添加个
__init__.py文件(文件内容可以为空).
到这里,我们已经有Python包了,如果不传到PyPI上的话,你都可以直接用了,最直接的方法是将这个文件夹拷到你的项目目录下,然后在项目代码里,你大概就能引用它了:
好了,既然要放到PyPI上,那么我们就需要在上面的基础上,在加点料。首先,我们需要调整下文件的目录结构,把上面的改成下面这个样子:
somefunctions/ | +-- somefunctions/ . | . +-- __init__.py . | . +-- myscripts1.py . | . +-- mysscripts2.py . | . +-- mymorescripts.py . | . |
就是将原来的目录深移一层,文件夹名称一样即可。这步也不难吧。好吧,然后在到第一层的目录下创建些特殊文件,具体你可以看看下面这个文件结构你就明白了:
somefunctions | +-- COPYING.txt | +-- README.txt | +-- setup.py | +-- somefunctions . | . +-- __init__.py . | . +-- myscripts1.py . | . +-- mysscripts2.py . | . +-- mymorescripts.py . | . | +-- docs/ |
哇,咋一看,变了好多啊,其实不多,解释下:
TIPS:
COPYING.txt 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入MIT License全文即可,当然,如果你不清楚这个,你完全可以不要这个文件。
README.txt,这个文件想必研发都应该清楚。如果有,尽量放些东西在这里了,后面如果可能我们会用到它的。需要注意的是,Windows的回车和Linux不一样,所以建议用Windows的好了。另外你也可以使用
README.rst这类文件表示(reStructuredText文件,如果不清楚可以参看我前面几篇文章:入门,Emacs快捷键)
setup.py,核心文件,这里面的内容马上我们会讲。
docs/,这个文件夹你放你的documents吧,不过要用心写文档真是个难事,所以这个文件夹基本是不存在的——为自己的懒惰可耻一把。
如果的包整个就一个文件,那么你也完全可以不用考虑再建一层目录了,直接放到README文件所在目录下就可以了,虽然我不建议这么操作。
好了,文件都建好了,再来进化下,我们为
setup.py填上内容,让我们的
setup.py真正的能用起来,注意哦,前面没distutils什么事情,他的作用在这里哦。放出一个
setup.py的Demo:
setup.py文件,但又不会写,没关系,上面的复制一下,把信息改成你的,而后直接保存就可以了。Easy way to do this。
TIPS:
文中的
classifiers的内容并不是随便填写的,你需要参照本文参考文档中的PyPI Classifiers来写。
setup.py就是个Python代码,在这里面理论上你可以做任何Python能够做的事情,不过,为了保证正确性和简洁,我建议尽量少些复杂代码,毕竟就是个大包的代码,搞得太复杂了反而不好。
一般情况下,Distutils只会包含你包文件夹内的:
README.txt,
setup.py,
packages里面定义的所有某块的.py文件,
py_modules参数包含的所有.py文件,其他文件需要被包含进来,需要单独添加。需要添加,你可以在根目录添加一个
MANIFEST.in文件,将要包含的文件放入,具体规则请参考官方文档格式。如我们这里需要添加
COPYING.txt可以在
MANIFEST.in中添加如下行:
include COPYING.txt
setup.py写完之后,为了保证效果,我们可以检查下,当然不是让你去读代码,因为我们写的这些东西是要给Distutils看的,所以用它来检查最合适不过了,在命令行下输入:
我们在做这步前,建议你先到PyPI上注册个帐号,这样方便些,当然,你也可以不注册,后面的步骤中会有提示,根据提示进行也可以。——本文按照先在PyPI上注册过帐号的方式进行。
我们有了PyPI的帐号,那么我们开始吧,离成功仅一步之遥了。在你包的根目录下,运行下面的Shell命令:
running register 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
恩,如果你没有帐号,在这一步选择2吧,我们不二了,分道扬镳鸟,选择1,回车根据提示输入用户名和密码,接着就等待处理。
Registering somefunctions to http://pypi.python.org/pypi Server response (200): OK running sdist ... output trimmed for brevity ... running upload Submitting dist\somefunctions.tar.gz to http://pypi.python.org/pypi Server response (200): OK I can store your PyPI login so future submissions will be faster. (the login will be stored in ~/.pypirc) Save your login (y/N)?n
当你看到上面这种信息的时候,说明已经完成了上传工作,这个时候你的包就在PyPI上了。
TIPS:
可能上传的过程出现问题,这个时候你需要终止当前过程,之后到PyPI上查看,如果已经有了这个包,你需要删除(建议操作),或者你重新编译(用新的版本号)在上传
最后问你要不要保存你的帐号信息,你可以选择y/n,y的话,在你的用户根目录下会有个
.pypirc文件,里面有你账户的明文信息。
包到这里,就完成了上传PyPI的工作了。你如果要用,安装下就好:
后记:
本文是Mitchell Chu根据自己打包的经历写的一篇入门文章,由于本人也是刚刚开始使用,难免会有错谬之处,还请指正。另,文中仅仅是打包成压缩包的形式,还有编译成可执行文件的发布方式这里没有,有此需要的请参考文后的参考文档。
相关文章推荐
- 转载:将自己写的Python代码打包放到PyPI上
- 将自己写的Python代码打包放到PyPI上
- Python代码打包放到PyPI上
- 如何将自己的Python代码打包发布到pypi上
- 如何将自己的Python代码打包发布到pypi上
- 打包自己写的python库(Betubedl)并且发布到pypi上
- python代码打包dist并发送到pypi网站的方法
- 把自己的python脚本打包上传到PYPI
- python代码打包发布
- Python代码打包成exe的方法
- python生成ios固定代码模块脚本打包成exe文件
- 使用pyinstaller工具打包python项目代码生成exe文件
- 自己写一个python第三方库并上传到pypi上
- Python3.4(Pyhon)代码如何打包成.exe可执行文件——详细教程
- 自己写的第一段可运行多段数据的Python代码。。
- 自己使用总结Python程序代码片段
- python 代码审计-命令执行漏洞(自己编写的代码)
- python学习第三章列表的部分课后练习自己尝试的代码
- 自己的服务器通过微信公众号Token验证测试的代码(Python版)