Skip to content

Python自定义库

目的

自己编写的一些功能,需要给第三方人员或者自己某些写项目使用,有封装成第三方库的需求。所以产生了使用Python封装代码编译成第三方库。

项目结构

shell
setup-demo/
	|- setup.py #安装文件
	|- requirements.txt # 依赖文件
	|_ myapp/ #源代码
		|- __init__.py
		|- main.py
		|- ... #其他文件或者其他文件夹

步骤

  1. 在项目根目录,新建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"]},
    )
    1. import os: 导入 Python 的 os 模块,用于处理文件路径等操作。
    2. import setuptools: 导入 setuptools 库,用于构建 Python 包。
    3. DIR = os.path.dirname(__file__): 使用 os.path.dirname() 函数获取当前脚本文件的所在目录。
    4. REQUIREMENTS = os.path.join(DIR, "requirements.txt"): 使用 os.path.join() 函数将当前目录和文件名 "requirements.txt" 组合成一个完整的文件路径,用于指定项目的依赖项文件。
    5. with open(REQUIREMENTS) as f: reqs = f.read(): 打开依赖项文件,并将文件内容读取到变量 reqs 中。这个文件通常包含了项目所需的其他 Python 包的名称及其版本信息。
    6. setuptools.setup(...): 这是设置 Python 包的元数据和配置的地方。在这里,定义了包的名称、版本、描述、作者、许可证、包的列表、安装所需的依赖项等等。
      • name: 包的名称。
      • version: 包的版本号。
      • description: 包的简短描述。
      • url: 包的项目地址。
      • author: 包的作者。
      • license: 包的许可证。
      • packages: 使用 setuptools.find_packages() 函数查找当前目录下所有的 Python 包,并包含它们。
      • install_requires: 指定安装时所需的依赖项,从刚刚读取的 requirements.txt 文件中获取。
      • entry_points: 这是一个字典,用于指定可执行命令的入口点。在这个例子中,设置了一个名为 "pygbcs" 的命令,将其指向了一个名为 "main" 的模块中的 "main" 函数。
  2. 新建项目子文件夹,在项目子文件夹中新建main.py文件。main.py文件代码如下

    只是个例子

    python
    print(1)
  3. 在项目子文件夹中新建__init__.py文件

  4. 在项目根目录,使用命令打包为自定义库

    shell
    python setup.py sdist
  5. 在项目根目录就会产生一个名字是dist的文件夹,里面存放着后缀为tar.gz结尾的文件。

  6. 使用tar -zxvf 目标文件.tar.gz命令解压。

安装库

  1. 解压库到目录
  2. 使用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"]},
)

Released under the MIT License.