py_setup

setup 简介

Python setup 是打包分发工具可以将自己的项目打包成packeage然后供他人使用

可以setup中标明项目的依赖以及安装条件似的当前模块能够正确安装并使用

setup 实战

一些参数介绍

  1. packages
    告诉Distutils需要处理那些包(包含init.py的文件夹)

  2. package_dir
    告诉Distutils哪些目录下的文件被映射到哪个源码包,感觉好像是一个相对路径的定义。一个例子:package_dir = {‘’: ‘lib’},表示以lib为主目录。

  3. ext_modules
    是一个包含Extension实例的列表,Extension的定义也有一些参数。

  4. ext_package
    定义extension的相对路径

  5. requires
    定义依赖哪些模块

  6. provides
    定义可以为哪些模块提供依赖

  7. scripts
    指定python源码文件,可以从命令行执行。在安装时指定–install-script

  8. package_data
    通常包含与包实现相关的一些数据文件或类似于readme的文件。

注意事项

  • 需要注意的是 package_data 时候需要在代码中使用
1
2
# 简单的说就是 使用项目所在目录完成配置文件的读取
os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),"..")), 'resources/')
  • install_requires 填写包依赖可以自动匹配依赖包

  • __init__.py 文件中可以指定需要导入的包也可以指定版本等

使用

1
2
3
4
5
6
7
8
# 编译
python3 setup.py build

# 安装
python3 setup.py install

# 制作分发包
python3 setup.py sdist

setup 配置实例

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
import os
import re
import sys

from setuptools import find_packages, setup

_version_re = re.compile(r'__version__\s+=\s+(.*)')

PY_VER = sys.version_info

if PY_VER < (3, 6):
raise RuntimeError("pks doesn't support Python version prior 3.6")


def read_version():
regexp = re.compile(r"^__version__\W*=\W*'([\d.abrc]+)'")
init_py = os.path.join(os.path.dirname(__file__), 'pks', '__init__.py')
with open(init_py) as f:
for line in f:
match = regexp.match(line)
if match is not None:
return match.group(1)


def read(file_name):
with open(os.path.join(os.path.dirname(__file__), file_name), encoding='utf-8') as f:
return f.read()


setup(
name='pks',
version=read_version(),
author='yixue',
description="Async Python 3.6+ web scraping micro-framework based on asyncio.",
long_description=read('README.md'),
long_description_content_type='text/markdown',
author_email='*@songshuai.cn',
python_requires='>=3.6',
install_requires=['pandas'],
packages=find_packages(),
classifiers=[
"Operating System :: POSIX :: Linux",
],
project_urls={
'Source': 'hhttp://gitlab.yx/dw/pks',
},

package_data = {'pks': ['resources/*.csv'],}
)