Python代码打包

使用setuptools进行python代码打包发布。

假设包文件夹为mlearn。

需要建立父级文件夹及相关文件,结构如下:

1
2
3
4
5
6
7
8
9
mlearn
-- COPYING (许可声明,就是repo的LICENSE,改名放到这里就可以了)
-- MANITEST.in (除了package(mlearn)之外其他需要加入包的文件)
-- README.rst (readme,不支持markdown)
-- docs (文档文件夹)
-- mlearn (package)
-- __init__.py
-- ...
-- setup.py (配置文件)

最重要的就是setup.py。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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import codecs
import os
import sys

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

"""
打包的用的setup必须引入,
"""


def read(fname):
"""
定义一个read方法,用来读取目录下的长描述

我们一般是将README文件中的内容读取出来作为长描述,这个会在PyPI中你这个包的页面上展现出来,

你也可以不用这个方法,自己手动写内容即可,

PyPI上支持.rst格式的文件。暂不支持.md格式的文件,<BR>.rst文件PyPI会自动把它转为HTML形式显示在你包的信息页面上。
"""

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


NAME = "mlearn"

"""
名字,一般放你包的名字即可
"""

PACKAGES = ["mlearn"]

"""
包含的包,可以多个,这是一个列表
"""

DESCRIPTION = "this is a test package for packing python liberaries tutorial."

"""
关于这个包的描述
"""

LONG_DESCRIPTION = read("README.rst")

"""
参见read方法说明
"""

KEYWORDS = "test python package"

"""
关于当前包的一些关键字,方便PyPI进行分类。
"""

AUTHOR = "muzhenxv"

"""
谁是这个包的作者,写谁的名字吧
"""

AUTHOR_EMAIL = "muzhenxv@gmail.com"

"""
作者的邮件地址
"""

URL = "http://www.muzhen.tk"

"""
你这个包的项目地址,如果有,给一个吧,没有你直接填写在PyPI你这个包的地址也是可以的
"""

VERSION = "1.0.0"

"""
当前包的版本,这个按你自己需要的版本控制方式来
"""

LICENSE = "MIT"

"""
授权方式,我喜欢的是MIT的方式,你可以换成其他方式
"""

setup(
name=NAME,

version=VERSION,

description=DESCRIPTION,

long_description=LONG_DESCRIPTION,

classifiers=
[

'License :: OSI Approved :: MIT License',

'Programming Language :: Python',

'Intended Audience :: Developers',

'Operating System :: OS Independent',

],

keywords=KEYWORDS,

author=AUTHOR,

author_email=AUTHOR_EMAIL,

url=URL,

license=LICENSE,

packages=find_packages(),

include_package_data=True,

# package_dir={'mlearn':'mlearn'},

zip_safe=True

)



## 把上面的变量填入了一个setup()中即可。

最重要的就是packages=find_packages()这句代码,正确的加入所有包和子包。

报错的解决方法:

  1. error: [Errno 13] Permission denied: ‘/Users/sunny/anaconda/lib/python3.6/site-packages/easy-install.pth’ 我在mac上出现这样的错误,解决方法为

    1
    sudo chown -R sunny /Users/sunny/anaconda3

references

Python-分发工具初探之-setuptools

将自己写的Python代码打包放到PyPI上