Ex_treme's blog.

发布我的第二个算法库---EWDT

2018/06/13 Share

python打包算法库

打包文件的格式我们常见的有egg(easy_install),whl(pip),前一种是python打包工程的原生方法,后一种已经成为了主流,因为具有一下一些特点:

  • 更快速地安装纯Python包和native C extension包。
  • 在安装时避免武断的代码执行(避免setup.py
  • C extension的安装并不要求在Windows和MacOS平台上有编译器。
  • 为测试和持续集成(CI)提供了更好的缓存。
  • 创建.pyc文件作为安装的一部分,以保证它们符合Python解释器的使用。
  • 更好的跨平台。

打包工具setuptools简介

setuptools是对distutils的增强,使用起来已经相当简单了,我把算法库打包成wheel(这就是所谓的车轮),里面有所有的工程文件和egg-info。以下是setuptools的四个打包发布常用的四个命令:

1
2
3
4
5
编辑: 先在项目主目录下编辑setup.py,
打包: python setup.py bdist_wheel --universal
安装: sudo python3 setup.py install --record files.txt
测试:python3>>import EMDT
卸载: sudo cat files.txt | sudo xargs rm -rf

在pypi上发布自己的算法包

发布自己的算法包真的是一件很爽的事情,我现在有非常多的工作都调用了我以前分布的算法库TEDT中的功能!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python
# coding=utf-8

from setuptools import setup, find_packages

setup(
name='<项目的名称>',
version=<项目版本>,
description=(
'<项目的简单描述>'
),
long_description=open('README.rst').read(),
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license='BSD License',
packages=find_packages(),
platforms=["all"],
url='<项目的网址,我一般都是github的url>',
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)
install_requires=[
'Twisted>=13.1.0',
'w3lib>=1.17.0',
'queuelib',
'lxml',
'pyOpenSSL',
'cssselect>=0.9',
'six>=1.5.2',
'parsel>=1.1',
'PyDispatcher>=2.0.5',
'service_identity',
]
  • 使用twine上传(加密传输)压缩包
1
2
sudo pip install twine
twine upload dist/*
  • 顺便附上上传导github的命令吧
1
2
3
4
5
6
7
cd ~/project/EMDT-master
git init 初始化
git add . 加文件
git status 看状态
git commit -m 'EWDT 0.1.0' 上传信息
git remote add origin https://github.com/pzs741/EMDT.git 添加项目路径
git push -u origin master 选定分支,当然是master啦!

好啦~到这里就结束了,看到这篇博客的亲们已经可以用

pip install EMDT

或者

pip3 install EMDT

没错只对python3兼容哦~附上setup.py,大功告成!

附录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/python2.7
# -*- coding: utf-8 -*-
"""
Ex_treme 2018 -- https://github.com/pzs741
"""

import sys
import os
import codecs


try:
from setuptools import setup
except ImportError:
from distutils.core import setup


if sys.argv[-1] == 'publish':
os.system('python3 setup.py sdist upload -r pypi')
sys.exit()


# This *must* run early. Please see this API limitation on our users:
if sys.version_info[0] == 2 and sys.argv[-1] not in ['publish', 'upload']:
sys.exit('WARNING! You are attempting to install EMDT\'s '
'python3 repository on python2. PLEASE RUN '
'`$ pip3 install EMDT` for python3 or '
'`$ pip install EMDT` for python2')



with codecs.open('README.md', 'r', 'utf-8') as f:
readme = f.read()


setup(
name='EMDT',
version='0.1.0',
description='EMDT,Extraction and Mining Algorithm for Question Answering Pair Based on Web Document Density and Tags',
long_description=readme,
author='Z.S. Peng/Ex_treme',
author_email='pzsyjsgldd@163.com',
url='https://github.com/pzs741/EMDT',
install_requires=['jieba>=0.39','requests>=2.18.4','TEDT>=0.5','beautifulsoup4==4.5.3'],
license='MIT',
classifiers=[
'Programming Language :: Python :: 3',
'Natural Language :: English',
'Intended Audience :: Developers',
],
packages=['EMDT'],
package_dir={'EMDT':'EMDT'},
package_data={'EMDT':['*.*',]}
)
CATALOG
  1. 1. python打包算法库
    1. 1.1. 打包工具setuptools简介
    2. 1.2. 在pypi上发布自己的算法包