上传自己编写的包到PYPI

Dec 17,2017   3934 words   15 min

Tags: Python

昨天无意之间看到博客上有人说向PYPI上传了自己写的包,就觉得挺好有意思的,于是自己也尝试了一下。 因为上传到PYPI就意味着,以后就可以用pip install命令来安装你写的包了,全世界都可以使用。 所以这里记录一下上传的过程。

1.编写代码&文档

这个不用多说。我这里正好把之前编写过的视频、图像处理的几个函数给整合到了一块。并给包起了个名字叫RStoolkit

之前是自己用,但现在是给别人用,所以函数说明就必须要写完善,否则别人根本不知道如何使用。因此每个函数都写了详细的使用说明,如下。 这里的格式是自动生成的。在你定义的函数名称下面连续输入三个双引号,然后再按回车,PyCharm即可自动生成标准格式的函数说明,然后往里面填内容即可。 一般遵循的规则是文档字符串是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 由于考虑到使用者和字符编码的问题,所以就用英文写了。

代码其实之前都已经写过相关博客介绍了。不过还是把它们重新在Github上上传了个项目。 项目地址:https://github.com/zhaoxuhui/RStoolkit

项目的组织结构是大的包名叫”RStoolkit”,然后下面目前又分了3个小的包,分别对应不同功能。

  • image:主要是与图像处理相关的函数
  • video:主要包括视频处理相关的函数
  • common:包含一些基础、公共的函数

同时整个包主要依赖OpenCV和GDAL两个第三方包。

2.注册账户

在PYPI官网的右边有”Sign in”,https://pypi.python.org/pypi,按照提示进行注册即可。完成后会有激活邮件,激活即可。

3.打包准备

首先,将你写的所有代码文件(.py)文件新建个文件夹放在一起,并在这个文件夹下新建一个__init__.py的空文件,如下所示。 然后,再在这个文件夹外面建一个同名文件夹,并且在新建的这个文件夹下放置包相关信息文件,如下。 主要放”COPYING.txt”,这是版权文件,这里我用的MIT。具体可以百度,把内容粘贴在这里面即可。 然后是”README.txt”,帮助文档。可以写关于包的说明、介绍、使用注意事项等。要求是使用rst(reStructuredText)格式,具体rst的语法可以参考:https://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html。但如果没有什么特别的格式需求,只是一些文字,用普通的txt代替也可以。 “requirments.txt”是要求文件,也即要运行此包,需要哪些环境或包。这个不是必须的,但有了它们,用户可以使用命令pip install -r requirements.txt自己手动安装依赖包。 最后是最最重要的”setup.py”,这里面需要填写很多东西,有如下内容。

import codecs
import os
import sys

try:
	from setuptools import setup, find_packages
except:
	from distutils.core import setup

def read(fname):
    return codecs.open(os.path.join(os.path.dirname(__file__), fname)).read()

setup(
    name = "RStoolkit",
    version = "1.0.3",
    description = "A powerful and useful package for remote sensing image&video preocessing.",
    long_description = read("README.txt"),
    classifiers =
	[
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python',
        'Operating System :: OS Independent',
		'Topic :: Scientific/Engineering :: Astronomy',
		'Topic :: Scientific/Engineering :: GIS',
		'Topic :: Scientific/Engineering :: Mathematics',
		'Intended Audience :: Science/Research',
		'Intended Audience :: Developers',
		'Intended Audience :: Information Technology',
    ],
    install_requires=
	[
        'opencv-python>=3.1.0',
        'gdal>=2.1.4',
    ],
    keywords = "RemoteSensing Image Video",
    author = "zhaoxuhui",
    author_email = "zhaoxuhui@whu.edu.cn",
    url ="https://github.com/zhaoxuhui/RStoolkit",
    license = "MIT",
    packages = find_packages(),
    include_package_data= True,
    zip_safe= True,
)

但其实填起来也很简单,基本只需照着把信息改成自己的就可以了。这里需要注意的有几点。

首先是classifiers,这里面的内容不是我自己写的,而是在>这个网站<上找,然后贴进来的。 你可以把它理解为一个个标签,说明了包的各种属性。

然后install_requires,这个属性表示pip将要自动安装的包。如果用户电脑上没有,那么pip就会自动按照你这里的要求去下载并安装包。这也就是用pip最方便的地方,让用户觉得“智能”的地方。其实都是程序员事先写好了的,只是用户不知道而已。

packages这个属性表示当前包依赖哪些第三方包,是一个list类型。可以手动指定,也可以调用find_packages()函数自动寻找。

然后我们可以用python setup.py check命令检查是否有问题,如果没有报错就说明认可你的内容,可以上传了。否则按照提示修改即可。

注意这些命令还有下面的命令都是在setup.py所在的目录下运行的。在完成这些工作以后,打包的准备工作就完成了,下一步就是打包上传了。

4.打包上传

有两种不同打包方式,一种是源码包(以tar.gz结尾),一种是wheel包(以.whl结尾),打包好的文件放在dist目录下。分别有不同命令。

对于源码包,打包命令是:

python setup.py sdist build

然后,如下命令上传。

python setup.py sdist upload

对于wheel包,打包命令是:

python setup.py bdist_wheel --universal

上传命令是:

python setup.py bdist_wheel upload

不过需要注意的是,上传最好在Linux系统上传。在Windows下总会报授权错误之类的错误,比较麻烦。我在Windows下试了好久没有找到解决办法。 在Linux下首次上传也需要配置个东西。首先需要创建用户验证文件”.pypirc”,内容如下:

[distutils]
index-servers =
    pypi
    pypitest
 
[pypi]
username:xxx
password:xxx

替换成自己的信息,然后将这个文件放在系统的根目录下,也即”./”目录。然后就可以打开终端,输入命令上传了。 在上传过程中可能会要求输入用户名密码什么的,按照提示输入即可。成功以后,就可以在PYPI登陆,然后就能看到自己的包了。 到这里,上传工作就完成了。以后你就可以使用pip install RStoolkit来安装和使用这个包了。

5.测试

如图,由于我们前面在install_requires中指定了依赖,所以在安装时PIP会自动检查是否有这两个包,如果没有则下载安装。

不过这里有个问题需要注意。就是GDAL的库并不太好安装,直接使用pip install gdal很有可能会失败。 因为安装的是源码包,所以在安装前会编译,而编译又需要用到其它依赖,所以失败的可能性很大。 对于这个问题,在README里也有说明。

如果你是Windows用户,那么你可以在>这个网站<搜索下载对应的GDAL预先编译好的wheel包,然后本地安装即可,一般不会出现问题。 [2018-8-7补充:这个网站似乎已经挂掉了,现在这个方法不能用了。] 或者,如果你使用Anaconda环境,那么你可以直接conda install gdal,Anaconda会自动帮你编译、安装好GDAL,然后就可以用PIP装RStoolkit了。 [2018-8-7补充:有时可能会出现安装成功,但使用时报找不到DLL的错误。这主要是因为虽然Conda把GDAL包给装了,但是并没有安装完全依赖的DLL。 所以解决办法就是按照这篇博客中提到的,安装一下GDAL Core,基本就能解决问题了。]

如果你是Linux用户,目前好像并没有编译好的轮子,所以只能你自己按照指导一步步配环境然后再编译、安装了。 但如果你也使用Anaconda,那么就和Windows用户一样,一个命令即可搞定。所以这里还是推荐使用Anaconda环境,确实很方便、省事。

更多有关于PYPI上传包的内容可以点击>官方文档<查看,这里只是介绍了最基本的东西。

本文作者原创,未经许可不得转载,谢谢配合

返回顶部