利用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=['xiaoming@qq.com','xiaoli@qq.com'],
    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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用setuptoolsPython项目打包成whl文件的步骤: 1. 确认已经安装了setuptools和wheel模块。如果没有安装,可以在命令行中输入以下命令进行安装: ``` pip3 install setuptools wheel ``` 2. 在项目根目录下创建一个名为`setup.py`的文件,内容如下: ``` from setuptools import setup, find_packages setup( name='your-project-name', version='0.1', packages=find_packages(), install_requires=[ 'dependency1', 'dependency2', # ... 其他依赖项 ], classifiers=[ 'Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', ], ) ``` 其中,`name`是你的项目名称,`version`是你的项目版本号,`packages`是你的项目中包含的所有Python模块,`install_requires`是你的项目依赖的所有Python包,`classifiers`是一些元数据。 3. 在命令行中进入项目根目录,然后使用以下命令构建一个源码分发包: ``` python3 setup.py sdist ``` 这个命令会在项目根目录下生成一个`dist`目录,其中包含一个源码分发包。 4. 接下来,使用以下命令构建一个二进制分发包: ``` python3 setup.py bdist_wheel ``` 这个命令会在项目根目录下生成一个`dist`目录,其中包含一个whl文件。 5. 最后,你可以使用以下命令来安装你的项目: ``` pip3 install your-project-name-0.1-py3-none-any.whl ``` 其中,`your-project-name-0.1`是你的项目名称和版本号,`py3-none-any`表示这是一个纯Python的whl文件。 以上就是使用setuptoolsPython项目打包成whl文件的步骤。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值