python自定义安装包

python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。

一、编写模块
进入项目目录
#cd /home/pysetup 
#vi Test.py

# *__coding: UTF-8__*
import socket
import uuid
def getinfo():
myip=socket.gethostbyname(socket.gethostname())
print("本机IP地址是::"+myip)
node=uuid.getnode()
mac=uuid.UUID(int=node).hex[-12:]
print("本机Mac地址是:"+mac)

 

二、编写setup.py
#vi setup.py

from distutils.core import setup
setup(
name='PackageTest',
version='1.0',
description='package test',
author='hujin',
author_email='hujin@envbase.com',
url='http://www.baidu.com',
py_modules=['Test'],
)

三、打包

#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 file


warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt

writing manifest file 'MANIFEST'
creating Myblog-1.0
making hard links in Myblog-1.0...
hard linking foo.py -> Myblog-1.0
hard linking setup.py -> Myblog-1.0
creating dist
tar -cf dist/Myblog-1.0.tar Myblog-1.0
gzip -f9 dist/Myblog-1.0.tar
removing 'Myblog-1.0' (and everything under it)


提示两条warning可以忽略,不影响打包,当然一个完善的项目必须有README及MANIFEST.in(项目文件清单)文件。
#ls dist

Myblog-1.0.tar.gz

五、安装
#tar -zxvf Myblog-1.0.tar.gz
#cd Myblog-1.0.tar.gz
#python setup.py install (此命令大家再熟悉不过了)

六、测试

>>>from Test import getinfo
>>> getinfo()
>>> 本机IP地址是:xxx
本机Mac地址是:xxx

注意:通常系统内置的包都是小写的,为了避免命名冲突,通常我们自定义的包的名字首字母一般大写。

原文地址:https://www.cnblogs.com/smallcoderhujin/p/3274702.html