Python自定义库
目的
自己编写的一些功能,需要给第三方人员或者自己某些写项目使用,有封装成第三方库的需求。所以产生了使用Python封装代码编译成第三方库。
项目结构
shell
setup-demo/
|- setup.py #安装文件
|- requirements.txt # 依赖文件
|_ myapp/ #源代码
|- __init__.py
|- main.py
|- ... #其他文件或者其他文件夹
步骤
在项目根目录,新建
setup.py
文件。编写文件内容如下pythonimport os from setuptools import setup, find_packages DIR = os.path.dirname(__file__) REQUIREMENTS = os.path.join(DIR, "requirements.txt") with open(REQUIREMENTS) as f: reqs = f.read().strip().split("\n") setup( name="gcbs-ai", version="1.0.0", description="gcbs-ai", author="pythonliuwei", license="BSD", packages=find_packages(), install_requires=reqs, setup_requires=["setuptools", "wheel"], entry_points={"console_scripts": ["pygbcs = gcbs.main:main"]}, )
import os
: 导入 Python 的 os 模块,用于处理文件路径等操作。import setuptools
: 导入 setuptools 库,用于构建 Python 包。DIR = os.path.dirname(__file__)
: 使用os.path.dirname()
函数获取当前脚本文件的所在目录。REQUIREMENTS = os.path.join(DIR, "requirements.txt")
: 使用os.path.join()
函数将当前目录和文件名 "requirements.txt" 组合成一个完整的文件路径,用于指定项目的依赖项文件。with open(REQUIREMENTS) as f: reqs = f.read()
: 打开依赖项文件,并将文件内容读取到变量reqs
中。这个文件通常包含了项目所需的其他 Python 包的名称及其版本信息。setuptools.setup(...)
: 这是设置 Python 包的元数据和配置的地方。在这里,定义了包的名称、版本、描述、作者、许可证、包的列表、安装所需的依赖项等等。name
: 包的名称。version
: 包的版本号。description
: 包的简短描述。url
: 包的项目地址。author
: 包的作者。license
: 包的许可证。packages
: 使用setuptools.find_packages()
函数查找当前目录下所有的 Python 包,并包含它们。install_requires
: 指定安装时所需的依赖项,从刚刚读取的 requirements.txt 文件中获取。entry_points
: 这是一个字典,用于指定可执行命令的入口点。在这个例子中,设置了一个名为 "pygbcs" 的命令,将其指向了一个名为 "main" 的模块中的 "main" 函数。
新建项目子文件夹,在项目子文件夹中新建
main.py
文件。main.py文件代码如下只是个例子
pythonprint(1)
在项目子文件夹中新建
__init__.py
文件在项目根目录,使用命令打包为自定义库
shellpython setup.py sdist
在项目根目录就会产生一个名字是
dist
的文件夹,里面存放着后缀为tar.gz
结尾的文件。使用
tar -zxvf 目标文件.tar.gz
命令解压。
安装库
- 解压库到目录
- 使用
python setup.py install
安装
卸载库
shell
pip uninstall 库名称
其他参数说明
参数 | 说明 |
---|---|
name | 包名称 |
version | 包版本 |
author | 包作者 |
author_email | 包作者邮箱 |
maintainer | 包维护者 |
maintainer_email | 包维护者邮箱 |
url | 包的官网 |
license | 包的授权信息 |
description | 包的简单描述 |
long_description | 包的详细描述 |
platforms | 包适用的软件平台 |
classifiers | 包的所属分类列表 |
keywords | 包的关键字列表 |
packages | 需要处理的包目录(通常为包含__init__.py 的文件夹) |
py_modules | 需要打包的python单文件列表 |
download_url | 包的下载地址 |
cmdclass | 添加的自定义命令 |
package_data | 指定包内所包含的数据文件 |
include_package_data | 自动包含包内所有受到版本控制(cvs、svn、git)的数据文件 |
exclude_package_data | 当include_package_data为True时该选项用于排除部分文件 |
data_files | 打包时需要打包的数据文件,如图片,配置文件等 |
Ext_modules | 指定扩展模块 |
scripts | 指定可执行脚本,安装时脚本会被安装到系统PATH路径下 |
package_dir | 执行那些目录下的文件被映射到哪个源码包 |
requires | 指定那些依赖包 |
provides | 指定可以为哪些模块提供依赖 |
install_requires | 安装时需要安装到依赖包 |
entry_points | 动态发现服务和插件 |
setup_requires | 指定运行setup.py 文件本身所依赖的包 |
dependency_links | 指定依赖包的下载地址 |
extras_require | 当前的高级/额外特性需要依赖的分发包 |
zip_safe | 不压缩包,而是以目录的形式安装 |
打包有三种方式
打包为tar.gz或者zip
shell
python setup.py sdist
打包为二进制
shell
python setup.py ddist
打包为 wheel
shell
python setup.py bdist_wheel
项目
setup.py内容
python
import os
from setuptools import setup, find_packages
DIR = os.path.dirname(__file__)
REQUIREMENTS = os.path.join(DIR, "requirements.txt")
with open(REQUIREMENTS) as f:
reqs = f.read().strip().split("\n")
setup(
name="gcbs-ai",
version="1.0.0",
description="gcbs-ai",
author="pythonliuwei",
license="BSD",
packages=find_packages(),
install_requires=reqs,
setup_requires=["setuptools", "wheel"],
entry_points={"console_scripts": ["pygbcs = gcbs.main:main"]},
)