Python打包工具Setuptools的使用

文章目录


Setuptools并非只能用于创建基于脚本的Python安装程序,还可以用于编译扩展,另外,通过将其与扩展py2exe(平台)和py2app(macOS)结合起来使用,还可以创建独立的在各自平台上可执行的程序。

Python打包用户指南Setuptools官网有很多相关文档可以参考。

基础使用

本文只做一个简单的示例:

  • 1、编写一个简单的python脚本(代码随意),保存为’hello.py’:
print('hello world')
  • 2、在同级目录下创建’setup.py’文件,代码如下:
from setuptools import setup

setup(name='Hello', version='1.0', description='A simple example', author='tang', py_modules=['hello'])

并非一定要向函数setup提供示例代码中的所有信息,也可以不提供任何参数

  • 3、执行 setup.py 脚本
~ python setup.py build
running build
running build_py
creating build
creating build/lib
copying hello.py -> build/lib

执行完成后,Setuptools创建了一个名为build的目录,其中包含了子目录lib,

~ tree build
build
└── lib
    └── hello.py

1 directory, 1 file

目录build相当于工作区,Setuptools在其中组装包以及编译扩展库等。安装时不需要执行build命令,因为当执行命令install时,如果需要,会自动build。

更多的命令,可以执 ‘python setup.py --help-commands’ 来查看

  • 4、也可以使用install安装这个模块:
~python setup.py install
running install
running bdist_egg
running egg_info
creating Hello.egg-info
writing Hello.egg-info/PKG-INFO
writing top-level names to Hello.egg-info/top_level.txt
writing dependency_links to Hello.egg-info/dependency_links.txt
writing manifest file 'Hello.egg-info/SOURCES.txt'
reading manifest file 'Hello.egg-info/SOURCES.txt'
writing manifest file 'Hello.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.15-x86_64/egg
running install_lib
running build_py
creating build/bdist.macosx-10.15-x86_64
creating build/bdist.macosx-10.15-x86_64/egg
copying build/lib/hello.py -> build/bdist.macosx-10.15-x86_64/egg
byte-compiling build/bdist.macosx-10.15-x86_64/egg/hello.py to hello.pyc
creating build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
copying Hello.egg-info/PKG-INFO -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
copying Hello.egg-info/SOURCES.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
copying Hello.egg-info/dependency_links.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
copying Hello.egg-info/top_level.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/Hello-1.0-py2.7.egg' and adding 'build/bdist.macosx-10.15-x86_64/egg' to it
removing 'build/bdist.macosx-10.15-x86_64/egg' (and everything under it)
Processing Hello-1.0-py2.7.egg
Copying Hello-1.0-py2.7.egg to /Library/Python/2.7/site-packages
Adding Hello 1.0 to easy-install.pth file

Installed /Library/Python/2.7/site-packages/Hello-1.0-py2.7.egg
Processing dependencies for Hello==1.0
Finished processing dependencies for Hello==1.0

日志末尾可以看出,Setuptools创建了一个.egg文件,这是一个独立的Python包。

在这个脚本中,只使用了Setuptools指令py_modules,如果要安装整个包,可以列出包名,并使用指令packages

打包

下面展示如何创建.tar.gz文件,使用的命令是sdist(source distribution 源代码归档)

~ sudo python setup.py sdist
Password:
Sorry, try again.
Password:
Sorry, try again.
Password:
running sdist
running egg_info
writing Hello.egg-info/PKG-INFO
writing top-level names to Hello.egg-info/top_level.txt
writing dependency_links to Hello.egg-info/dependency_links.txt
reading manifest file 'Hello.egg-info/SOURCES.txt'
writing manifest file 'Hello.egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md

running check
warning: check: missing required meta-data: url

warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too

creating Hello-1.0
creating Hello-1.0/Hello.egg-info
copying files to Hello-1.0...
copying hello.py -> Hello-1.0
copying setup.py -> Hello-1.0
copying Hello.egg-info/PKG-INFO -> Hello-1.0/Hello.egg-info
copying Hello.egg-info/SOURCES.txt -> Hello-1.0/Hello.egg-info
copying Hello.egg-info/dependency_links.txt -> Hello-1.0/Hello.egg-info
copying Hello.egg-info/top_level.txt -> Hello-1.0/Hello.egg-info
Writing Hello-1.0/setup.cfg
Creating tar archive
removing 'Hello-1.0' (and everything under it)

执行完成后,还会生成一个dist的目录,在这个目录中,有一个名为Hello-1.0.tar.gz的文件。

~ tree dist
dist
├── Hello-1.0-py2.7.egg
└── Hello-1.0.tar.gz

0 directories, 2 files

你可以将其给其他人,而对方解压缩后,在使用setup.py进行安装。
如果你不想生成.tar.gz文件,可以通过命令行参数–formats设置分发格式,也可以一次指定多个(用逗号分隔)归档文件。

发布了102 篇原创文章 · 获赞 6 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/tt75281920/article/details/104146858