如何将自己的Python代码打包发布到pypi上

原文地址:http://blog.csdn.net/wdxin1322/article/details/56685094

因为pipy更新了方式,这里进行修正一下,见文尾;


什么是pypi

简单的说pypi是一个python包的仓库,里面有很多别人写好的python库,你可以通过easy_install或者pip进行安装,方便用户更方面的使用你的代码模块。

将代码打包并上传到pypi上,大体上分为以下几步:

1、整理代码的目录结构,方便打包和python的import,为了方便引用,需要将代码模块变成一个包,所以需要将功能代码用目录来整合方便引用,并且需要创建__init__文件,__init__中可以没有内容,也可以在__init__文件中进行import(from .extractor import Document)操作,以减少整体模块引用时import的层数,避免错误。
[html]  view plain  copy
  1. ├── ./tidypage  
  2. │   ├── ./tidypage/cleaners.py  
  3. │   ├── ./tidypage/extractor.py  
  4. │   ├── ./tidypage/__init__.py  
  5. │   └── ./tidypage/titles.py  

2、功能模块的目录整理好后,就可以开始整理和添加发布到pypi上所使用的文件了
[html]  view plain  copy
  1. tidy_page  
  2. ├── LICENSE  
  3. ├── README.rst  
  4. ├── requirements.txt  
  5. ├── setup.py  
  6. ├──tidypage  
  7. │   ├──cleaners.py  
  8. │   ├──extractor.py  
  9. │   ├──__init__.py  
  10. │   └──titles.py  
就是将原来的目录深移一层,文件夹名称可以根据自己意愿。然后在到第一层的目录下创建些特殊文件,具体你可以看看下面这个文件结构你就明白了

LICENSE文件是授权文件,比如: MIT license, APACHE license
README.rst 文件想必大家都不陌生,其实就是项目介绍和使用说明
setup文件才是重点,是python模块安装所需要的文件,它的格式如下:

[python]  view plain  copy
  1. #!/usr/bin/env python  
  2. from __future__ import print_function  
  3. from setuptools import setup, find_packages  
  4. import sys  
  5.   
  6. setup(  
  7.     name="tidy-page",  
  8.     version="0.1.1",  
  9.     author="Desion Wang",  
  10.     author_email="[email protected]",  
  11.     description="html text parser,get the content form html page",  
  12.     long_description=open("README.rst").read(),  
  13.     license="MIT",  
  14.     url="https://github.com/desion/tidy_page",  
  15.     packages=['tidypage'],  
  16.     install_requires=[  
  17.         "beautifulsoup4",  
  18.         lxml_requirement  
  19.         ],  
  20.     classifiers=[  
  21.         "Environment :: Web Environment",  
  22.         "Intended Audience :: Developers",  
  23.         "Operating System :: OS Independent",  
  24.         "Topic :: Text Processing :: Indexing",  
  25.         "Topic :: Utilities",  
  26.         "Topic :: Internet",  
  27.         "Topic :: Software Development :: Libraries :: Python Modules",  
  28.         "Programming Language :: Python",  
  29.         "Programming Language :: Python :: 2",  
  30.         "Programming Language :: Python :: 2.6",  
  31.         "Programming Language :: Python :: 2.7",  
  32.     ],  
  33. )  

NAME  名字,一般放你包的名字即可
PACKAGES  包含的包,可以多个,这是一个列表
DESCRIPTION  关于这个包的描述
LONG_DESCRIPTION  参见read方法说明
KEYWORDS  关于当前包的一些关键字,方便PyPI进行分类。
AUTHOR  谁是这个包的作者,写谁的名字吧
AUTHOR_EMAIL  作者的邮件地址
URL  你这个包的项目地址,如果有,给一个吧,没有你直接填写在PyPI你这个包的地址也是可以的
VERSION  当前包的版本,这个按你自己需要的版本控制方式来
LICENSE  授权方式
INSTALL_REQUIRES  模块所依赖的python模块

    文中的 classifiers 的内容并不是随便填写的,你需要参照本文参考文档中的PyPI Classifiers来写

3、开始使用Distutils进行打包

    为了保证效果,在打包之前我们可以验证setup.py的正确性,执行下面的代码
    python setup.py check
  
输出一般是running check
如果有错误或者警告,就会在此之后显示
没有任何显示表示Distutils认可你这个setup.py文件。

如果没有问题,那么就可以正式打包,执行下面的代码:

python setup.py sdist

执行完成后,会在顶层目录下生成dist目录和egg目录

[html] view plain copy
  1. tidy_page  
  2. ├── tidy_page/dist  
  3. │   ├── tidy_page/dist/tidy-page-0.1.0.tar.gz  
  4. │   └── tidy_page/dist/tidy-page-0.1.1.tar.gz  
  5. ├── tidy_page/LICENSE  
  6. ├── tidy_page/README.rst  
  7. ├── tidy_page/setup.py  
  8. ├── tidy_page/tidypage  
  9. │   ├── tidy_page/tidypage/cleaners.py  
  10. │   ├── tidy_page/tidypage/extractor.py  
  11. │   ├── tidy_page/tidypage/__init__.py  
  12. │   └── tidy_page/tidypage/titles.py  
  13. ├── tidy_page/tidy_page.egg-info  
  14. │   ├── tidy_page/tidy_page.egg-info/dependency_links.txt  
  15. │   ├── tidy_page/tidy_page.egg-info/PKG-INFO  
  16. │   ├── tidy_page/tidy_page.egg-info/requires.txt  
  17. │   ├── tidy_page/tidy_page.egg-info/SOURCES.txt  
  18. │   └── tidy_page/tidy_page.egg-info/top_level.txt  

   4、打包完成后就可以准备将打包好的模块上传到pypi了,首先你需要在pypi上进行注册 goto PyPI Live 
        注册完成后,你需要在本地创建好pypi的配置文件,不然有可能会出现使用http无法上传到pypi的问题
         Create a .pypirc configuration file,在用户的home目录下创建.pypirc文件,文件的内容如下
[distutils]
index-servers =
  pypi

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password

注释掉repository
pip install twine
使用twine上传
twine upload dist/*

pip search xxx

更多:https://packaging.python.org/tutorials/distributing-packages/

祝你成功!!

你可能感兴趣的:(pip,pipy,python,打包,安装)