利用setuptools打包python的方法——笔记

setuptools就是比distutils好用,所以,在实际工作中,如果需要打包python代码,基本上都用setuptools,并且实现了自己的一套模板,基本可以通用,现在把这个模板记录下来:
首先必须写一个setup.py脚本:

# -*- coding:utf-8 -*-
from setuptools import setup
from setuptools import find_packages
import os


def strip_comments(path):
    """也可以使用读取requirements.txt文件的形式,下面是从
    requirements.txt文件读取依赖列表的常见做法之一:"""
    return path.split('#', 1)[0].strip()


def reqs(*f):
    """

    """
    return list(filter(None, [strip_comments(path) for path in open(os.path.join(os.getcwd(), *f)).readlines()]))


setup(
    name='projects',
    version='0.0.1',
    description='小明的第一个程序',
    long_description='小明的第一个程序,用于演示如何打包',
    author=['xiaoming', 'xiaoli'],
    author_email=['[email protected]','[email protected]'],
    url='项目的git仓库地址,没有可以不给',
    packages=find_packages(),
    platforms=['any'],
    keywords=["test setuptools"],
    install_requires=reqs('requirements.txt'),
    package_data={'': ['*.cfg', '*.xml', '*.txt', '*.py']}
)


下面举一个例子:

xiaoming
├── requirements.txt
├── setup.py
├── README.md
└── projects
    └── proj1
        ├── __init__.py
        ├── add.py
        └── config
            ├── a.cfg
            └── b.txt

即如下目录结构:
在这里插入图片描述

配置文件a.cfg,这个文件跟打包无关,只是演示在打包时,怎么把配置文件也打包进去,这里配置文件我们随便写了点内容:

[python_version]
platforms=Linux
python_version=3.6.0
[author]
author_name=zhangsan

add.py文件的内容为读取配置文件,并且实现一个加法,当调用加法时,首先会print配置文件里的内容,然后再运算加法:

import configparser
from pathlib import Path
cfg = configparser.ConfigParser()
config_path = Path(__file__).parent / "config" /"a.cfg"
cfg.read(config_path)

def add(a,b):
	print("platform:{}".format(cfg.get('python_version','platforms')))
	print("python version{}".format(cfg.get('python_version','python_version')))
	return a + b

requirements.txt为这个项目的依赖项,比如我们这个项目用到了pathlib这个库,所以,我们的requirements.txt可以这么写:

# pip==16.0.0
pathlib2==2.3.4

其余涉及到的文件,都是空文件,那么现在来打包这个python程序,在命令窗口中,首先进入./xiaoming这个目录,然后运行如下命令(第一个命令是编译,第二个命令是生成压缩文件,该压缩文件解压后就可以安装):

> python setup.py build
> python setup.py sdist

在这里插入图片描述

就会在同级目录下生成一个dist文件夹,里面是xiaoming_project-0.0.1.tar.gz,解压后,运行python setup.py install 就可以安装了。

  • 注意大部分情况不需要编译,因为都是脚本语言
  • 如果不需要打包成压缩包的形式,也没必要运行dist命令,直接python setup.py install 就可以安装了
    在这里插入图片描述
setup.py参数说明

 

#python setup.py build     # 编译

#python setup.py install     #安装

#python setup.py sdist       #生成压缩包(zip/tar.gz)

#python setup.py bdist_wininst   #生成NT平台安装包(.exe)

#python setup.py bdist_rpm #生成rpm包

 

或者直接"bdist 包格式",格式描述如下:

 

#python setup.py bdist --help-formats 

   --formats=rpm       RPM distribution

   --formats=gztar     gzip'ed tar file

   --formats=bztar     bzip2'ed tar file

   --formats=ztar     compressed tar file

   --formats=tar       tar file

   --formats=wininst   Windows executable installer

   --formats=zip       ZIP file2: setup参数:

name 打包名称 
version 版本
....
playforms 所支持的平台 ,例中只支持2.7
package_dir 源码所在目录 
packages 源码目录下那些目录要被打包
py_modules 需要打包的模块
requires 定义依赖模块 
... 

参考:
1.https://zhuanlan.zhihu.com/p/136223755
2.https://www.cnblogs.com/yunfeiqi/p/6844771.html
3.https://blog.csdn.net/whatday/article/details/90767387

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章