setup
开发模式
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
-e编辑模式 .当前目录 命令的作用是以可编辑模式安装当前目录中的 Python 项目。这意味着项目会被安装到一个虚拟环境中,但源代码仍然可以从项目的源目录中进行修改和编辑,非常适合开发过程中的迭代和调试。
结构解析
from setuptools import setup, find_packages
# 读取 README.md 文件内容,用于 long_description
with open('README.md', 'r', encoding='utf-8') as f:
long_description = f.read()
setup(
# 项目名称
name='your_project_name',
# 项目版本
version='0.1',
# 自动查找项目中的所有包
packages=find_packages(),
# 当使用packages时,不用定义py_modules
# 包中包含一个名为 local_filter 的 Python 模块。这个模块应该是一个单独的 .py 文件,例如 local_filter.py。
# 当使用 py_modules 参数时,setuptools 会在安装包时将指定的模块复制到目标环境中。这样,用户就可以在他们的代码中导入和使用这些模块。
# py_modules=['local_filter'],
# 项目依赖的其他 Python 包
install_requires=[
'requests',
'numpy',
],
# 定义可执行脚本
# my_plugin_system 是插件系统的名称。
# plugin_name 是插件的名称。
# another_package.plugin_module:plugin_class 指定了插件的具体实现类。
entry_points={
'my_plugin_system': [
'plugin_name=another_package.plugin_module:plugin_class',
],
},
# 项目作者
author='Your Name',
# 作者的电子邮件地址
author_email='your.email@example.com',
# 项目的简短描述
description='A short description of your project',
# 项目的详细描述,从 README.md 文件中读取
long_description=long_description,
# 详细描述的内容类型,通常是 text/markdown
long_description_content_type='text/markdown',
# 项目的源代码仓库地址
url='https://github.com/yourusername/yourproject',
# 项目的分类信息,帮助 PyPI 和其他工具了解项目的特性
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],
)
查找插件
# 查找entry_points定义的插件
import pkg_resources
def load_plugins():
for entry_point in pkg_resources.iter_entry_points('mkdocs.plugins'):
# plugin_class = entry_point.load()
# plugin_instance = plugin_class()
# 使用插件实例
print(f'Loaded plugin: {entry_point.name}')
load_plugins()
init
init.py 文件在 Python 包中起着非常重要的作用。它主要有以下几个作用:
-
标识目录为 Python 包 在 Python 中,一个包含 init.py 文件的目录被视为一个包。如果没有这个文件,Python 会认为这个目录只是一个普通的文件夹,而不是一个包。
-
初始化包 init.py 文件可以包含包的初始化代码。当你导入一个包时,init.py 文件中的代码会自动执行。这使得你可以在包级别进行一些初始化操作,比如设置全局变量、导入子模块等。
-
控制包的导入行为 通过在 init.py 文件中定义 all 变量,你可以控制 from package import * 语句的行为。all 是一个字符串列表,列出了当使用 from package import * 时应该导入的模块或子包名称。
-
定义包级别的变量和函数 你可以在 init.py 文件中定义包级别的变量和函数,这样它们就可以在整个包中使用。
your_project/
├── setup.py
├── your_package/
│ ├── __init__.py
│ ├── module1.py
│ └── module2.py