Python模块与包开发指南:从脚本到可复用工程实践
1. 项目概述从脚本小子到模块化开发者如果你写过一些Python脚本可能会遇到这种情况一个.py文件越写越长几百行代码挤在一起想改个功能得从头翻到尾或者你在A项目里写了个好用的数据处理函数到了B项目又得复制粘贴一遍时间一长连自己都忘了这个函数当初是干嘛的、怎么用的。这种时候你就需要了解Python的包和模块了。这不仅仅是把代码分个文件那么简单而是从“写脚本”到“做工程”的关键一步。掌握它意味着你的代码能像乐高积木一样被复用、被组合、被清晰地管理无论是个人项目还是团队协作效率和可维护性都会上一个台阶。简单来说模块Module就是一个.py文件里面包含了Python定义函数、类、变量和语句。而包Package则是一个包含多个模块以及子包的目录它通过一个特殊的__init__.py文件来告诉Python“嘿这个目录是个包不是普通的文件夹”。今天我们就来彻底搞懂如何从零开始编写、组织、发布和引入自己的Python包与模块让你写的代码不仅能跑更能“优雅地跑起来”。2. 核心概念与设计思路拆解2.1 为什么我们需要模块和包在深入动手之前我们先得想明白费这么大劲搞模块化到底图什么这绝不是为了炫技而是为了解决软件开发中的几个核心痛点。代码复用这是最直接的好处。你把常用的工具函数比如处理日期的format_date、发送邮件的send_email放在一个叫utils.py的模块里。之后在任何新项目中你只需要import utils然后调用utils.format_date(...)就行了。一次编写到处使用彻底告别“复制-粘贴-改bug”的循环。命名空间管理想象一下你和同事都写了一个叫connect()的函数你的用来连接数据库他的用来连接消息队列。如果所有代码都在一个文件里必然冲突。模块提供了天然的命名空间。你的函数在db.py里就是db.connect()他的在mq.py里就是mq.connect()。井水不犯河水清晰明了。项目结构清晰化一个复杂的项目功能可能涉及用户管理、订单处理、数据分析等多个方面。把所有代码堆在main.py里是灾难。合理的做法是创建user/、order/、analytics/等包每个包内部再细分模块。这样的结构不仅你自己看着舒服任何新加入的开发者也能快速定位代码理解项目架构。便于测试与维护独立的模块意味着你可以对它进行独立的单元测试。你可以单独测试utils.py里的所有函数而不用启动整个Web服务器。当需要修改或优化某个功能时影响范围也被局限在特定的模块内降低了引入新bug的风险。基于这些目标我们在设计自己的包和模块时思路就应该围绕“高内聚、低耦合”展开。高内聚是指一个模块或包应该只负责一个明确的功能领域比如email_sender.py就只管发邮件低耦合是指模块之间尽量减少直接的依赖通过清晰的接口函数参数、返回值进行通信而不是直接修改对方的全局变量。2.2 模块 vs. 包如何选择与规划理解了“为什么”接下来就要决定“怎么做”。首先得分清场景。何时使用单个模块对于功能相对简单、独立的小工具集一个单独的.py文件就足够了。例如你有一系列处理字符串的辅助函数清洗、格式化、校验它们逻辑紧密且不太可能再细分那么一个string_helpers.py模块就是最佳选择。它的优点是简单直接无需复杂的目录结构导入也方便import string_helpers。何时需要升级为包当你的代码库开始膨胀或者功能自然分成了几个不同的类别时就该考虑用包了。典型场景功能类别清晰比如一个网络爬虫项目可能有负责下载的downloader、负责解析的parser、负责存储的storage和负责调度的scheduler。每个类别都可以是一个子模块共同组成crawler包。需要共享资源包内除了.py文件可能还有配置文件.json,.yaml、模板文件.html、静态资源图片等。包目录是组织这些非代码资源的天然容器。计划分发或开源如果你想把自己的代码分享给他人使用或者通过pip install来安装那么将其组织成带有setup.py或pyproject.toml的标准包结构是必须的。一个合理的包结构规划示例假设我们在开发一个数据分析工具包mydatakit初期规划可能如下mydatakit/ # 包根目录 ├── __init__.py # 让Python识别此为包并可定义包级导入 ├── io/ # 子包负责数据输入输出 │ ├── __init__.py │ ├── csv_reader.py │ └── excel_writer.py ├── transform/ # 子包负责数据转换 │ ├── __init__.py │ ├── cleaner.py # 数据清洗 │ └── aggregator.py # 数据聚合 ├── stats/ # 子包负责统计分析 │ ├── __init__.py │ └── descriptive.py └── utils.py # 包内共享的通用工具函数这个结构一眼就能看出功能划分。随着工具包成长你可以很容易地在transform/子包下添加normalizer.py数据标准化模块而不会影响其他部分。注意__init__.py文件可以是空文件但在Python 3.3中即使没有这个文件目录也会被视作“命名空间包”。不过对于绝大多数明确需要import的常规包保留一个__init__.py哪怕是空的是最佳实践它能提供更明确的包标识和初始化控制点。3. 编写模块与包的实操详解3.1 编写一个规范的模块模块的编写看似简单但有些细节决定了它是否好用、是否专业。我们以编写一个虚构的logger.py模块为例。1. 模块文档字符串Docstring文件开头的三引号字符串是模块的“身份证”。它应该简要说明模块的用途。 一个轻量级、可配置的日志记录模块。 提供控制台和文件日志输出支持不同的日志级别。 2. 导入依赖紧接着文档字符串之后集中导入所有依赖。遵循PEP 8规范先导入标准库再导入第三方库最后导入本地模块虽然在本模块中可能没有。import sys import os from datetime import datetime # 第三方库 import yaml # 假设用yaml做配置 # 本地模块相对导入稍后详解 from .config import DEFAULT_LOG_LEVEL3. 定义模块级变量与常量使用全大写字母命名常量它们通常用于配置。SUPPORTED_LEVELS [DEBUG, INFO, WARNING, ERROR, CRITICAL] DEFAULT_FORMAT %(asctime)s - %(name)s - %(levelname)s - %(message)s4. 编写核心函数与类这是模块的主体。函数和类应该有清晰的文档字符串说明其作用、参数和返回值。def setup_logger(name, levelINFO, log_fileNone): 配置并返回一个日志器。 Args: name (str): 日志器的名称通常使用模块名 __name__。 level (str): 日志级别如 INFO, DEBUG。 log_file (str, optional): 日志文件路径。如果为None则只输出到控制台。 Returns: logging.Logger: 配置好的日志器对象。 import logging logger logging.getLogger(name) logger.setLevel(getattr(logging, level.upper(), logging.INFO)) # 避免重复添加handler if not logger.handlers: formatter logging.Formatter(DEFAULT_FORMAT) # 控制台handler ch logging.StreamHandler(sys.stdout) ch.setFormatter(formatter) logger.addHandler(ch) # 文件handler如果指定了文件 if log_file: # 确保日志目录存在 os.makedirs(os.path.dirname(log_file), exist_okTrue) fh logging.FileHandler(log_file, encodingutf-8) fh.setFormatter(formatter) logger.addHandler(fh) return logger5. 模块的“主程序”守卫如果这个模块既可以作为工具被导入也可以直接运行例如进行自测试就需要使用if __name__ __main__:。# 在模块末尾 if __name__ __main__: # 模块被直接运行时执行的代码常用于测试或演示 test_logger setup_logger(test_module) test_logger.info(模块自测试日志功能正常。) print(f支持的日志级别{SUPPORTED_LEVELS})实操心得命名要有意义模块名应该简短、全小写使用下划线并能清晰反映其功能如data_loader.py而非dl.py。避免在模块顶层执行复杂逻辑导入模块时顶层的代码if __name__ __main__:之外的会被立即执行。除非是常量定义或极简单的初始化否则应将逻辑封装在函数或类中。否则别人import你的模块时可能会意外触发数据库连接、网络请求等操作。利用类型注解从Python 3.5开始可以为函数参数和返回值添加类型注解。这不会影响运行时但能极大提升代码的可读性并被IDE用于智能提示和静态检查。def calculate_area(width: float, height: float) - float: return width * height3.2 构建一个完整的包现在我们把几个相关的模块组织成一个包。我们创建一个名为text_processor的包它包含两个模块一个用于清洗文本一个用于分析文本。第一步创建包结构text_processor/ ├── __init__.py ├── cleaner.py ├── analyzer.py └── utils.py第二步编写各个模块utils.py放一些共享的小工具。共享工具函数。 import re def remove_extra_spaces(text: str) - str: 将连续的多个空格替换为单个空格。 return re.sub(r\s, , text).strip()cleaner.py主要清洗功能。文本清洗模块。 from .utils import remove_extra_spaces # 相对导入同包内的模块 def clean_text(text: str, remove_digits: bool False) - str: 基础文本清洗。 cleaned remove_extra_spaces(text) if remove_digits: cleaned .join(char for char in cleaned if not char.isdigit()) return cleaned.lower() # 转为小写analyzer.py主要分析功能。文本分析模块。 from collections import Counter def word_frequency(text: str) - dict: 计算词频简易版未处理停用词。 words text.split() return dict(Counter(words))第三步关键的__init__.py文件这个文件是包的“门面”它控制着从包级别导入时哪些内容是对外可见的。有几种常见的写法空文件最简单的形式包可以被导入但用户必须直接导入子模块import text_processor.cleaner。暴露主要接口这是最友好、最常用的方式。在__init__.py中导入包内重要的函数或类这样用户可以直接从包名导入它们更加简洁。# text_processor/__init__.py text_processor - 一个用于文本清洗和分析的实用工具包。 # 将cleaner模块的主要函数“提升”到包级别 from .cleaner import clean_text # 将analyzer模块的主要函数“提升”到包级别 from .analyzer import word_frequency # 可选定义包的版本 __version__ 0.1.0 # 可选声明公开的接口用于from package import *时的控制 __all__ [clean_text, word_frequency]经过这样的定义用户就可以这样使用你的包import text_processor cleaned text_processor.clean_text(Some TEXT with 123 digits.) # 或者 from text_processor import clean_text, word_frequency第四步在包内处理导入相对导入与绝对导入在包内部的模块如cleaner.py中导入另一个同级模块如utils.py必须使用相对导入或绝对导入。相对导入使用点号.表示当前包..表示父包。如上例from .utils import remove_extra_spaces。这是在包内部引用其他模块的首选方式因为它明确了依赖关系是基于包结构的。绝对导入写出从项目根目录或已安装包开始的完整路径。例如如果text_processor包已经安装在Python环境里在cleaner.py里也可以写from text_processor.utils import remove_extra_spaces。这在包内部和外部脚本中都能工作但可移植性稍差如果包名改了所有内部导入都要改。重要避坑指南永远不要在包内部的模块中使用隐式相对导入如import utils或直接基于sys.path的绝对路径导入如import myproject.text_processor.utils。这会导致模块在作为包的一部分被安装后导入失败。坚持使用显式的相对导入from . import utils或基于包名的绝对导入。4. 引入与使用自建包模块的多种方式写好了包和模块接下来就是如何在其他Python脚本中使用它们。根据你的使用场景有几种不同的引入方式。4.1 开发中的临时引入修改 sys.path这是最常见于开发和调试阶段的方式。你的包目录还没有被Python解释器识别你需要手动告诉Python去哪里找。假设你的项目结构如下my_project/ ├── my_script.py # 你的主程序 └── my_package/ # 你正在开发的包 ├── __init__.py └── module_a.py在my_script.py中你可以这样操作import sys import os # 方法1添加包所在的绝对路径到sys.path package_path os.path.join(os.path.dirname(__file__), my_package) sys.path.insert(0, package_path) # insert(0)确保优先搜索 # 现在可以导入了 import my_package from my_package import module_a # ... 使用你的包或者更简洁一点使用相对路径import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent / my_package))注意事项sys.path是一个列表Python会按顺序在这些路径中搜索模块。insert(0)将其添加到最前面优先级最高。这种方式仅适用于当前运行环境是临时的。一旦关闭Python解释器或运行其他脚本这个修改就失效了。在团队协作中不建议在提交的代码里包含修改sys.path的语句因为这依赖于特定的目录结构。应该使用setup.py安装或配置开发环境。4.2 以可编辑模式安装pip install -e .对于正在积极开发的包最佳实践是使用“可编辑模式”安装。这会在你的Python环境中创建一个“链接”指向你的开发目录任何代码修改都会立即生效无需重新安装。操作步骤在你的包根目录与my_package同级创建一个setup.py文件或pyproject.toml现代更推荐。# setup.py 最小示例 from setuptools import setup, find_packages setup( namemy_package, # 包名 version0.1.0, # 版本 packagesfind_packages(), # 自动发现所有包 # 其他元数据author, description, url等 )打开终端切换到包含setup.py的目录执行pip install -e .-e代表“editable”可编辑.代表当前目录。安装成功后你就可以在任何Python脚本中直接import my_package了就像导入requests、numpy这些第三方库一样方便。你对my_package里代码的任何修改都会在下一次导入时自动反映出来。4.3 绝对导入与相对导入的使用场景在编写包内部的模块时如何导入其他内部模块这里总结一下场景推荐方式示例在my_package/sub_pkg/module_b.py中说明导入同级模块相对导入from . import module_cfrom .module_c import func清晰表明模块在同一个子包内。导入父包中的模块相对导入from .. import utilsfrom ..utils import helper双点..表示上一级包。导入子包中的模块相对导入from .nested import deep_module点加子包名。从包根目录顶层导入绝对导入 (更安全)from my_package import config假设my_package已安装或路径已配置。在包内部也适用但包名必须正确。在包外的脚本中导入绝对导入import my_packagefrom my_package.sub_pkg import module_b标准用法。核心原则在包内部优先使用相对导入。它使你的模块位置变得灵活——即使整个包被移动到别处或者重命名了顶层包只要内部相对结构不变导入依然有效。绝对导入虽然稳定但如果你改变了顶层包名所有内部导入语句都需要更新。4.4 处理循环导入问题循环导入是模块化设计中一个经典的坑。例如module_a.py:from module_b import func_bmodule_b.py:from module_a import func_a当Python导入module_a时它发现需要module_b于是开始导入module_b而module_b又反过来需要module_a……此时module_a还没有完成初始化func_a可能还不存在这就导致了ImportError或AttributeError。解决方案重构代码消除循环这是最根本的方法。检查是否可以将func_a和func_b依赖的共同部分提取到第三个模块common.py中让a和b都去导入common。将导入语句移到局部如果循环依赖确实必要且无法消除可以将导入语句移到函数或方法内部而不是在模块顶部。# module_a.py def some_function(): # 在需要的时候再导入避免顶层循环 from module_b import func_b result func_b() # ... 使用 result这样在模块a被完全初始化后函数some_function被调用时才会去导入b打破了初始化时的死锁。使用接口或抽象基类对于类之间的循环依赖可以考虑使用typing模块的TYPE_CHECKING和字符串前向引用。# module_a.py from typing import TYPE_CHECKING if TYPE_CHECKING: # 仅在类型检查时导入运行时不会 from module_b import ClassB class ClassA: def process(self, b: ClassB) - None: # 使用字符串注解 # 实际实现 pass5. 进阶打包与分发你的作品当你精心打造的包已经成熟希望分享给同事、社区或者通过pip在不同环境中部署时就需要进行正式的打包和分发。5.1 现代项目配置pyproject.toml过去setup.py是标准但现在pyproject.toml是官方推荐的、更现代的项目配置方式。它更清晰且能被多种工具如pip,build,pytest,black等读取。一个基本的pyproject.toml文件可能长这样[build-system] requires [setuptools61.0, wheel] build-backend setuptools.build_meta [project] name my-awesome-package version 0.1.0 authors [ {name Your Name, email youexample.com}, ] description A short description of my awesome package. readme README.md license {text MIT} classifiers [ Programming Language :: Python :: 3, Operating System :: OS Independent, ] requires-python 3.8 dependencies [ requests2.25.0, # 你的包所依赖的第三方库 numpy1.20.0, ] [project.optional-dependencies] dev [pytest7.0, black22.0] # 开发依赖 [project.urls] Homepage https://github.com/you/my-awesome-package5.2 打包与本地安装确保你有最新工具pip install --upgrade pip setuptools wheel build执行构建在包含pyproject.toml的目录下运行python -m build这个命令会在dist/目录下生成两个文件一个.tar.gz源码包和一个.whl轮子文件。本地安装测试使用pip安装刚刚构建的轮子文件这是最接近真实分发环境的测试。pip install dist/my_awesome_package-0.1.0-py3-none-any.whl安装成功后就可以在任何地方import my_awesome_package了。5.3 上传到PyPIPython包索引如果你想全球共享你的包可以上传到PyPI。注册账号在 https://pypi.org 注册账号。安装上传工具pip install twine上传# 上传到测试PyPI先在这里测试 twine upload --repository-url https://test.pypi.org/legacy/ dist/* # 测试安装 pip install --index-url https://test.pypi.org/simple/ my-awesome-package # 一切正常后上传到正式PyPI twine upload dist/*安装使用全世界任何人现在都可以通过pip install my-awesome-package来安装你的包了。5.4 组织更大型的项目命名空间包当一个代码库非常庞大或者由多个独立团队维护但想共享一个顶级名称时可以使用命名空间包。例如google旗下有google-cloud-storage,google-cloud-bigquery等多个独立分发的包它们都位于google命名空间下。创建命名空间包的关键是让顶层目录如google成为一个不包含__init__.py的目录并且各个子包如cloud-storage在打包时声明自己属于这个命名空间。这通常通过在setup.py或pyproject.toml中配置packages和namespace_packages参数来实现。对于大多数个人开发者和小型项目常规包已经足够命名空间包是一个更高级的主题。6. 常见问题与排查技巧实录即使理解了原理在实际操作中还是会遇到各种问题。这里记录了一些典型场景和解决方法。6.1 ImportError: No module named ‘xxx’这是最经典的错误。场景1在包外部脚本中导入自建包失败。排查检查sys.path。在报错的脚本中打印print(sys.path)看看你的包目录是否在其中。解决使用sys.path.append()临时添加路径或者使用pip install -e .以可编辑模式安装你的包。场景2在包内部的模块中使用import utils隐式导入失败。排查你正在包内运行一个模块作为主程序python -m my_package.module_a或者sys.path被意外修改。解决永远在包内部使用显式相对导入from . import utils或绝对导入from my_package import utils。避免隐式导入。场景3模块明明存在但提示找不到。排查检查文件名和导入语句的大小写、拼写、后缀。在Linux/macOS系统下MyModule.py和mymodule.py是两个不同的文件。确认导入的是my_module而不是MyModule。解决统一使用全小写加下划线的命名方式并仔细核对。6.2 ModuleNotFoundError: No module named ‘main.xxx’; ‘main’ is not a package场景当你直接运行一个位于包内部的脚本时如python my_package/sub/mod.py并在该脚本中使用了相对导入from . import sibling。原因Python将直接运行的脚本的__name__设置为__main__而不是其模块名如my_package.sub.mod。相对导入是基于__name__来计算位置的当它是__main__时Python无法确定其在包结构中的位置。解决推荐方法使用-m参数以模块方式运行。切换到包根目录的上一级然后执行python -m my_package.sub.mod。这样Python会正确地将模块作为包的一部分来加载。修改代码如果该脚本确实需要作为独立入口点避免在顶层使用相对导入。可以将相对导入移到函数内部或者使用基于sys.path的绝对导入但这会破坏包的结构性。6.3 包安装后导入的模块不是最新版本场景你用pip install -e .安装了包修改了代码但在另一个脚本中导入时发现还是旧的逻辑。排查Python会缓存已编译的字节码.pyc文件和模块对象。有时缓存会导致问题。解决重启你的Python解释器如Jupyter Notebook需要重启Kernel命令行需要关闭重开。对于.pyc缓存可以手动删除__pycache__目录或者使用python -B参数运行脚本禁用字节码写入。最彻底的方法是重新安装一次pip install --force-reinstall -e .6.4 如何优雅地处理包版本和依赖版本管理在pyproject.toml或setup.py中定义version。对于开发期可以使用setuptools_scm等工具自动从Git标签生成版本号。依赖管理在pyproject.toml的[project]下的dependencies列表中声明你的包运行所必需的依赖。在[project.optional-dependencies]下声明可选依赖组如dev开发、test测试、docs文档。用户可以使用pip install my-package[dev]来安装包及其开发依赖。依赖冲突这是Python世界的老大难问题。如果你的包依赖library-a2.0而用户环境中已经装了library-a1.0就可能冲突。尽量放宽依赖版本要求如library-a2.0,3.0并在文档中说明。对于复杂项目推荐使用虚拟环境venv或容器化技术来隔离环境。编写和引入自己的Python包与模块是一个从“程序员”走向“工程师”的标志性技能。它强迫你思考代码的组织、接口的设计和依赖的管理。一开始可能会觉得多了一层抽象有些麻烦但当你发现可以轻松地在不同项目间复用代码或者清晰地管理一个拥有数十个模块的大型项目时你会意识到这一切都是值得的。最好的学习方式就是动手从一个小的工具包开始逐步实践本文中的每一个步骤你会很快掌握这门让Python代码变得强大而优雅的艺术。

相关新闻

松原市建设局网站:了解城市建设的窗口与指南

松原市建设局网站:了解城市建设的窗口与指南

在这个数字化飞速发展的时代,城市的管理与服务早已不再局限于线下的办事大厅和冷冰冰的文件堆里。对于生活在松原市的每一个人来说,想要了解这座城市的脉搏,想要参与城市的建设,或者是仅仅想知道自己家门口的路什么时候修、新房的预售证能不能办下来,最有效、最直接的途径…

2026/8/14 10:28:30 阅读更多 →
性能实测:NOSA-8B vs FullAttn/ShadowKV,三大场景下的解码速度对比

性能实测:NOSA-8B vs FullAttn/ShadowKV,三大场景下的解码速度对比

性能实测:NOSA-8B vs FullAttn/ShadowKV,三大场景下的解码速度对比 【免费下载链接】NOSA-8B 项目地址: https://ai.gitcode.com/OpenBMB/NOSA-8B 在大语言模型(LLM)的实际应用中,解码速度直接影响用户体验和系…

2026/8/14 10:28:30 阅读更多 →
MySQL安装部署全攻略:从Windows到Linux的避坑指南与最佳实践

MySQL安装部署全攻略:从Windows到Linux的避坑指南与最佳实践

1. 从零到一:为什么你的MySQL安装总是不顺?搞数据库开发或者运维,MySQL几乎是绕不开的一关。很多人觉得安装一个数据库能有多难?不就是下载、点下一步、设置密码吗?但现实往往是,你照着网上某个教程走&…

2026/8/14 10:28:30 阅读更多 →

最新新闻

网盘下载卡在进度条?用这款免费的网盘直链解析工具拿到真实下载地址

网盘下载卡在进度条?用这款免费的网盘直链解析工具拿到真实下载地址

网盘下载卡在进度条?用这款免费的网盘直链解析工具拿到真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移…

2026/8/14 11:34:19 阅读更多 →
GTA IV 完整版修复补丁全指南:FusionFix 性能优化与画面增强终极攻略

GTA IV 完整版修复补丁全指南:FusionFix 性能优化与画面增强终极攻略

GTA IV 完整版修复补丁全指南:FusionFix 性能优化与画面增强终极攻略 【免费下载链接】GTAIV.EFLC.FusionFix This project aims to fix or address some issues in Grand Theft Auto IV: The Complete Edition 项目地址: https://gitcode.com/gh_mirrors/gt/GTAI…

2026/8/14 11:34:19 阅读更多 →
炉石打牌又慢又闹心?这个开源增强插件把麻烦都挡在门外

炉石打牌又慢又闹心?这个开源增强插件把麻烦都挡在门外

炉石打牌又慢又闹心?这个开源增强插件把麻烦都挡在门外 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 不知道你有没有这种时刻:酒馆战棋打到决赛圈,对手…

2026/8/14 11:34:19 阅读更多 →
旧 Mac 免费升级最新 macOS 的 5 步通关攻略:OpenCore Legacy Patcher 终极指南

旧 Mac 免费升级最新 macOS 的 5 步通关攻略:OpenCore Legacy Patcher 终极指南

旧 Mac 免费升级最新 macOS 的 5 步通关攻略:OpenCore Legacy Patcher 终极指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy …

2026/8/14 11:34:19 阅读更多 →
Thorium Reader 3.5 完整上手指南:免费开源跨平台电子书阅读器的安装与进阶使用

Thorium Reader 3.5 完整上手指南:免费开源跨平台电子书阅读器的安装与进阶使用

Thorium Reader 3.5 完整上手指南:免费开源跨平台电子书阅读器的安装与进阶使用 【免费下载链接】thorium-reader A cross platform desktop reading app, based on the Readium Desktop toolkit 项目地址: https://gitcode.com/gh_mirrors/th/thorium-reader …

2026/8/14 11:34:19 阅读更多 →
geckodriver 安装实战:从零跑通 Firefox 自动化的 7 个关键步骤

geckodriver 安装实战:从零跑通 Firefox 自动化的 7 个关键步骤

geckodriver 安装实战:从零跑通 Firefox 自动化的 7 个关键步骤 【免费下载链接】geckodriver WebDriver Classic proxy for automating Firefox through Marionette 项目地址: https://gitcode.com/gh_mirrors/ge/geckodriver 无论你是刚入门的测试新人&…

2026/8/14 11:33:19 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →