利用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

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