setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。
通过setuptools可以制作自己的egg和whl包,使用步骤如下
1. 创建要打包的python文件
创建setuptools目录,我再改目录下测试setuptools的使用
mkdir setuptools
cd setuptools
创建源码文件
mkdir jdf
touch __init__.py
#__init__.py
def test():
print('Hello, i am test')
if __name__ == '__main__':
test()
在根目录setuptools创建setup.py文件;setup.py 其实是 python 工具包distutils的配置文件,setuptools就是基于distutils来做的。 在 setup.py 中通过setup函数来配置打包信息
#setup.py
from setuptools import setup, find_packages
setup(
name = "jdf",#打包的名称
version = "1.0",
packages = find_packages(),#要打包的python文件目录,默认是当前目录下所有文件下的python文件
description = "this is a python setup test.",#安装包描述
long_description = "....",
author = "jdf",
author_email = "jdf@qq.com",
home_page = "https://blog.csdn.net/jiadongfengyahoo?spm=1000.2115.3001.5343",
license = "GPL",
keywords = ("test", "egg", "whl"),
platforms = "unbuntu 18.04",
url = "",
)
万事具备,只欠东风
2. egg文件
2.1 生成egg文件
运行setup.py,生成egg文件
python setup.py bdist_egg
#tree -d
.
|-- dist
|-- jdf.egg-info
`-- src
运行成功后,会在jdf.egg-info目录生成egg文件
# tree jdf.egg-info
jdf.egg-info
|-- PKG-INFO
|-- SOURCES.txt
|-- dependency_links.txt
`-- top_level.txt
在dist中生成egg文件,egg文件是一个zip压缩吧,里面内容信息如下;egg里面存储了jdf.egg-info中的配置文件和所有配置的包的python源文件
# file dist/jdf-1.0-py3.8.egg
dist/jdf-1.0-py3.8.egg: Zip archive data, at least v2.0 to extract
# unzip -l dist/jdf-1.0-py3.8.egg
Archive: dist/jdf-1.0-py3.8.egg
Length Date Time Name
--------- ---------- ----- ----
217 2021-09-04 07:52 EGG-INFO/PKG-INFO
142 2021-09-04 07:52 EGG-INFO/SOURCES.txt
1 2021-09-04 07:52 EGG-INFO/dependency_links.txt
4 2021-09-04 07:52 EGG-INFO/top_level.txt
1 2021-09-04 07:52 EGG-INFO/zip-safe
84 2021-09-04 07:14 src/__init__.py
297 2021-09-04 07:52 src/__pycache__/__init__.cpython-38.pyc
--------- -------
746 7 files
```python
### 1.2 安装egg文件
```python
python setup.py install 或者 pip install jdf-1.0-py3.8.egg
2.2 使用安装的包
使用jdf包中__init__.py中的test函数
# python
Python 3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from jdf import test
>>> test
<function test at 0x7f6ecb682700>
>>> test()
Hello, i am test
>>>
2.3 删除安装的包
egg安装包的位置
# ls /root/anaconda3/lib/python3.8/site-packages/ | grep jdf
jdf-1.0-py3.8.egg
可以通过pip查找该安装的包
# pip list | grep "jdf"
通过pip删除jdf模块
# pip uninstall jdf
Found existing installation: jdf 1.0
Uninstalling jdf-1.0:
Would remove:
/root/anaconda3/lib/python3.8/site-packages/jdf-1.0-py3.8.egg
Proceed (y/n)? y
Successfully uninstalled jdf-1.0