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

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

最新文章

  1. 在docker容器中安装和使用,linux版的powershell
  2. oracle中的数据对象
  3. Python基础:函数式编程
  4. iOS开发之网络编程--使用NSURLConnection实现文件上传
  5. apue和error
  6. hdu 1987-How many ways(dp)
  7. 图片与文字在div里实现垂直水平都居中
  8. 201521123087《java程序设计》第13周学习总结
  9. Nginx服务器配置之location语法分析
  10. 仿滴滴抢单倒计时的Demo
  11. CUDA版Grabcut的实现
  12. Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
  13. typescript 如何引入jquery
  14. 从零开始一起学习SLAM | 三维空间刚体的旋转
  15. Java基础-语法定义
  16. 解疑网络监控卡壳 视觉体验400ms延时
  17. SaltStack一键部署负载均衡和高可用
  18. modelsim仿真中遇到的问题
  19. POJ 3320 Jessica‘s Reading Problem(哈希、尺取法)
  20. 解读MySQL的慢日志

热门文章

  1. 以CENTOS6.8系统为例部署ORACLE11g RAC和DNS配置
  2. 使用@import导入实现了ImportBeanDefinitionRegistrar接口的类,不能被注册为bean
  3. 防止atoi函数内存越界
  4. (1.11)SQL优化——mysql提示(hint)
  5. 前端 HTML body标签相关内容 常用标签 超链接标签 a标签
  6. larabbs安装教程
  7. Amazon SQS(Simple Queue Service) 简单介绍
  8. left outer join的on不起作用
  9. TCP路由网络通信
  10. [js] Array.slice和类数组转数组