目录
一、提要
python中安装包的方式有很多种:
- 源码包:python setup.py install
- 在线安装:pip install 包名
- easy_install 包名
如何创建以上的包,我们在上文展示如何通过"Python蛋",将自己的一个程序安装到python环境中。
本文重点指出,如何使用find_packages()将更多个资源打包成python蛋,并解释如何调用。
二 实验2:生成多包项目,并安装测试
1.准备工作
如果说 在每个带有——init——。py的目录,都市 # 当前测试的目录是 /tmp/demo;创建目录-文件结构: `-- demo |-- helloapp | |-- hello.py | `-- __init__.py |-- __init__.py |-- myapp | |-- __init__.py | `-- myapp.py `-- setup.py # 2.编辑 setup.py from setuptools import setup, find_packages setup( name="demo", version="1.0", author="zbj", author_email="22@qq.com", packages=find_packages( exclude=["*.tests", "*.tests.*", "tests"] ) #排除tests等 ) # 3.编辑 hello.py def hello_func(): print("HelloWorld") # 4.编辑 myapp.py def myapp_func(): print("嘿嘿嘿")
这里专门解释find_packages()是啥东西?
就是在当前目录,以及当前目录下,所有的python包(带__init__.py的目录)都搜索,并一起打成egg文件包。
find_packages(xyz),就是搜索名称为xyz的包,以及xyz的下层目录的包搜索出来,并一起打成egg文件包。
2.源码安装
# 进入setup.py所在的那层目录 cd /tmp/demo # 检查setup.py 是否有错误(warning不是错误) python setup.py check # 安装 python setup.py install
用tree查看
3.结果
打包之后多出两个文件夹,分别是demo.egg-info和dist。demo.egg-info是必要的安装信息,
而dist中的压缩包就是安装包,此时默认的egg包,egg包就是zip包,如果需要使用egg包,name将egg后缀改成zip解压即可
用unzip查看egg:
$ cd /usr/local/lib/python3.8/dist-packages #进入python包目录
$ unzip -l demo-1.0-py3.8.egg
Archive: demo-1.0-py3.8.egg
Length Date Time Name
--------- ---------- ----- ----
174 2021-11-10 16:13 EGG-INFO/PKG-INFO
192 2021-11-10 16:13 EGG-INFO/SOURCES.txt
1 2021-11-10 16:13 EGG-INFO/dependency_links.txt
15 2021-11-10 16:13 EGG-INFO/top_level.txt
1 2021-11-10 16:13 EGG-INFO/zip-safe
0 2021-11-10 16:03 helloapp/__init__.py
42 2021-11-10 16:10 helloapp/hello.py
140 2021-11-10 16:13 helloapp/__pycache__/__init__.cpython-38.pyc
261 2021-11-10 16:13 helloapp/__pycache__/hello.cpython-38.pyc
0 2021-11-10 16:03 myapp/__init__.py
45 2021-11-10 16:11 myapp/myapp.py
137 2021-11-10 16:13 myapp/__pycache__/__init__.cpython-38.pyc
260 2021-11-10 16:13 myapp/__pycache__/myapp.cpython-38.pyc
--------- -------
1268 13 files
4.测试
测试的时候需要注意导包路径和当前所在路径
目前所在路径是: /tmp/demo
直接进入python解释器: python3(我自己安装的python3版本)
以上将两个包内的文件通过python蛋装入系统。注意,不同的包将有不同的from语句加载。