版本基于:Python 3.12
0. 前言
随着工具开发的功能日益强大,模块化已经是大势所趋,所以,需要将整个工具项目的公共部分提取并制作为自定义的库。网上很多优秀的文章可以参考,作为小白的笔者结合了自己的实践经验,做一个小结,利己利人~~
1. 准备源码
|----everything
|----memparser
| |----__init__.py
| |----log_parser.py
| |----log_analyzer.py
| |----log_base.py
|----setup.py
|----install.bat
代码的层级很重要,其中:
- 根目录可以是任务的名称,里面包含两个文件:
- 库名称的文件夹;
- setup.py 文件;
- 库文件夹中包含:
- __init__.py 文件,用以标记其所在的目录是一个package;
- 源码的 py 文件
注意:
__init__.py 和 setup.py 的名称和层级不能弄错,否则即使后面 pip install 成功,在使用时也无法找到该库。
2. __init__.py 文件
__init__.py
文件在 Python 中有特殊的含义。它的存在标志着其所在的目录是一个 Python 包,这样它就可以被其他脚本导入。
以下是 __init__.py
文件的主要用途:
-
包的初始化:当导入一个包时,Python 会自动执行
__init__.py
文件中的所有*代码。你可以在这个文件中执行所有需要在包初始化时进行的操作。 -
控制导入:你可以在
__init__.py
文件中定义一个名为__all__
的列表,来指定当用户使用from package import *
语句时,应该导入哪些模块。 -
简化导入:如果你的包的结构很深,
__init__.py
文件可以用来方便地导入深层模块。例如,在__init__.py
文件中导入深层模块,用户就可以直接通过import package.module
的方式导入,而不需要import package.subpackage.module
。 -
包的文档字符串:
__init__.py
文件的文档字符串通常用作包的文档,help()
函数会显示它。
注意,从 Python 3.3 开始,__init__.py
文件不再是必需的,Python 3.3 引入了隐式的命名空间包,这允许你创建包而无需 __init__.py
文件。然而,如果你需要执行特定的包初始化代码,或者需要使用上述提到的 __all__
变量,你仍然需要 __init__.py
文件。
更多可以查看:The '__init__.py' File: What Is It? How to Use It? (Complete Guide)
3. setup.py 文件
setup.py
是 Python 库的构建脚本,它是 Python 的标准库 setuptools
的一部分。这个文件用于定义库的元数据,如名称、版本、作者、许可证等,以及库的依赖关系和打包设置。
以下是 setup.py 文件的基本结构:
from setuptools import setup, find_packages
setup(
name='your-package-name',
version='0.1.0',
author='Your Name',
author_email='your.email@example.com',
description='A short description of your project',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
url='https://github.com/yourusername/your-package-name',
packages=find_packages(),
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
],
install_requires=[
'numpy',
'pandas',
# other libraries your project depends on
],
)
-
name
是你的包的名称。 -
version
是你的包的版本号。 -
author
和author_email
是你的名字和电子邮件地址。 -
description
是你的项目的简短描述。 -
long_description
是你的项目的长描述,通常从 README 文件中读取。 -
long_description_content_type
指定长描述的格式,通常是 ‘text/markdown’ 或 ‘text/rst’。 -
url
是你的项目的主页,通常是 GitHub 仓库的 URL。 -
packages
是你的包中的模块,find_packages()
函数会自动找到它们。 -
classifiers
是一组标记,用于描述你的项目,如支持的 Python 版本、许可证等。 -
install_requires
是你的项目的依赖列表,setuptools
会在安装你的包时自动安装这些依赖。
当你运行 python setup.py install
命令时,setuptools
会读取 setup.py
文件,然后编译、构建和安装你的包。你也可以使用 python setup.py sdist bdist_wheel
命令来创建源代码分发和二进制分发,这些分发可以上传到 PyPI,让其他人通过 pip install
命令安装你的包。
4. 安装
cmd 到setup.py 所在的目录,运行命令:
pip install .
在第一节的目录结构中有个install.bat,可以自动安装:
for /d %%i in (*.egg-info) do (
if exist "%%i" (
rd /s /q "%%i"
)
)
if exist build (
rd /s /q build
)
pip install .
pause
5. 上传PyPI
全称 Python Package Index,它是 Python 的包管理系统。用户可以通过 PyPI 下载和安装 Python 包,也可以将自己开发的包上传到 PyPI,供其他人使用。
更多可以参考:https://zhuanlan.zhihu.com/p/60836179