- 博客(41)
- 收藏
- 关注
原创 ImportError: attempted relative import beyond top-level package
Python's relative import system enforces boundaries based on package hierarchy. When using from ..... import, five dots mean going up four levels from the current package. If the package depth is insufficient (e.g., a.b.c.d has only 3 parent levels), Pytho
2025-07-24 00:09:18
284
原创 How to Check a Module’s Type
本文介绍了四种在Python中检测模块类型的方法:1)使用__file__属性区分普通模块和内置模块;2)尝试用inspect模块;3)通过sys.builtin_module_names检查内置模块;4)结合sys和importlib.util.find_spec()准确分类模块类型(内置/纯Python/C扩展)。这些方法可帮助开发者识别模块来源,了解其实现方式(如itertools是内置模块,re是C扩展,json是纯Python模块)。
2025-07-23 16:45:21
335
原创 Three ways to run a python script file
Python offers three ways to run code with key differences in behavior: 1️⃣ Direct script execution (python script.py) Sets sys.path[0] to script's directory __name__ == "__main__" ❌ Relative imports fail 2️⃣ Module execution (python -m package.mo
2025-07-23 00:01:10
296
原创 How script location, CWD, and relative imports interact
Python模块导入最佳实践 当项目采用模块化结构时,直接运行子模块脚本(如python utils.py)会导致相对导入失败,因为Python无法识别其所属包。正确方法是: 顶层脚本直接运行(如python main.py) 子模块通过-m参数作为模块运行(如python -m package.utils),确保相对导入正常工作 调试时检查sys.path和__name__,确认模块搜索路径和执行上下文 关键点:始终从项目根目录执行,避免直接运行嵌套脚本,使用-m参数保持包结构完整性。
2025-07-22 23:17:46
367
原创 What Does “Directory of the Script Being Run” Mean?
When running Python scripts, sys.path[0] is set to the script's directory, not the shell's current working directory (CWD). For example, executing /path/script.py makes Python search for imports in /path/, even if the shell is elsewhere
2025-07-22 20:36:23
907
原创 The Module Search Path in Python
When you run import mod in Python, the interpreter follows a specific search flow: First, it checks sys.modules for previously loaded modules. If not found, it looks for built-in modules, then searches through sys.path directories (including script locatio
2025-07-22 19:29:22
777
原创 Differences between sys.path vs PATH
sys.path and PATH serve distinct roles: sys.path is a Python-specific list that determines where the interpreter searches for modules/packages. It can be modified at runtime (sys.path.append()). PATH is an OS environment variable that locates executables
2025-07-22 18:06:40
841
原创 PATH, sys.path, and PYTHONPATH
摘要: Python模块搜索路径涉及三个关键机制:PATH(操作系统级,定位Python解释器)、PYTHONPATH(环境变量级,影响模块搜索)和sys.path(Python运行时级,实际导入路径列表)。PYTHONPATH在运行时将指定目录注入sys.path,优先级较高。例如,设置PYTHONPATH=/home/jun/my_libs可使任意脚本导入cool_module.py,而手动修改sys.path仅对后续导入生效。需注意:PYTHONPATH需显式指定目录(非递归),可能被IDE忽略,且与
2025-07-22 18:01:51
772
原创 Python Modules and Packages -- dive deep
This article explores Python modules and Python packages, two mechanisms that facilitate modular programming.Modular programming refers to the process of breaking a large, unwieldy programming task into separate, smaller, more manageable subtasks or module
2025-07-22 16:35:20
736
原创 What is Current Working Directory (CWD) in Python
当前工作目录(CWD)是计算过程中使用的默认文件系统位置,作为访问文件和执行相对路径命令的基准点。其主要特点包括:作为上下文锚点(决定系统查找文件的起始位置)、进程特定性(每个进程独立继承父进程的CWD)和动态可变性(可通过命令如cd或Python的os.chdir()修改)。CWD直接影响文件访问路径、脚本执行行为和调试过程,误解CWD常导致"文件未找到"错误。开发人员可通过os.getcwd()查看当前目录,需注意脚本执行位置与保存位置可能不同,这是常见误区。
2025-07-22 07:08:12
772
原创 [draft]Python Relative Path v.s. Relative Import
摘要:相对路径和相对导入虽然都使用点符号(.和..),但在Python中作用不同。相对路径基于操作系统当前工作目录定位文件/文件夹,如open("data/input.txt");而相对导入基于Python包层次结构导入模块,如from..configs import log_config。相对路径依赖文件系统位置,相对导入依赖包的__init__.py结构。两者都可能因上下文变化失效,但分别服务于文件访问和代码复用。例如,Path(__file__).parent用于文件路径,from
2025-07-22 02:55:45
771
原创 Python Absolute Path v.s. Relative Path
Understanding Absolute vs. Relative Paths in Python Absolute paths specify the full location of a file from the root directory (e.g., C:\Users\file.txt or /home/user/file.txt), ensuring precise access regardless of the working directory. Relative paths ref
2025-07-21 22:22:26
588
原创 Levels checking (filtering) in logging module
Python的logging模块中,logger级别和handler级别分别控制日志处理的不同阶段:logger级别作为第一道过滤关卡,决定消息是否进入日志系统;handler级别则作为第二道过滤,决定消息是否被特定处理器输出。logger默认级别为WARNING,handler默认为NOTSET。消息必须同时满足两个级别才会被处理。通过这种双重过滤机制,可以实现灵活配置,比如将DEBUG日志写入文件而只在控制台显示ERROR日志。关键点在于logger级别控制全局日志收集,handler级别则针对不同输出
2025-07-21 18:19:37
866
原创 How to format NTFS to ext4 on Ubuntu 24.04
本文详细介绍了如何将NTFS分区格式化为ext4文件系统并配置为PostgreSQL数据库存储空间。首先通过lsblk命令确认目标分区/dev/sda2,卸载后使用mkfs.ext4命令格式化并标记为"postgresData"。随后创建挂载点并修改/etc/fstab实现自动挂载。文章还提供了PostgreSQL数据目录迁移步骤:停止服务、复制数据、更新配置文件,并着重解决了常见的权限问题(需确保postgres用户对完整路径具有遍历权限)。最后通过调整挂载选项(如noatime、da
2025-07-20 17:09:29
729
原创 How to SSH into your Ubuntu machine from macOS as superuser
摘要: 本文介绍如何从macOS通过SSH以超级用户身份连接Ubuntu系统。首先在Ubuntu上安装并启用SSH服务,使用ipa命令查找IP地址。在macOS终端使用ssh username@ip连接,登录后通过sudo -i提升权限。文章还提供了检查SSH服务状态的命令,并警告直接root登录的风险,建议使用普通用户配合sudo更安全。关键步骤包括服务配置、IP查找、连接和权限提升。
2025-07-19 22:31:33
657
原创 How to use Netcat (nc) for basic LAN communication between Linux and macOS
当需要在同一局域网内的两台设备之间进行简单实时通信时,使用微信或QQ等工具可能显得过于臃肿。此时,系统自带的Netcat工具就能轻松实现这一需求。
2025-07-19 20:40:51
562
原创 How to install and setup PostgreSQL on Ubuntu?
Ubuntu下PostgreSQL安装与配置指南 本文详细介绍了在Ubuntu系统上安装和配置PostgreSQL的完整步骤: 安装过程: 更新软件包列表并安装PostgreSQL及contrib组件 验证服务状态并切换至postgres用户访问数据库 创建新数据库及设置退出方式 远程访问配置: 修改postgresql.conf中的listen_addresses参数 编辑pg_hba.conf设置IP访问规则 重启服务并检查网络监听状态 用户权限管理: 创建新用户并设置密码 分配数据库所有权和权限 验证
2025-07-19 19:50:59
1037
原创 logging.LoggerAdapter explained in depth
Python's logging.LoggerAdapter enhances contextual logging by automatically injecting custom data (like user IDs or IP addresses) into log messages without modifying individual logging calls. It wraps standard loggers with an extra dictionary containing co
2025-07-18 14:06:26
531
原创 What does disable_existing_loggers do?
摘要: disable_existing_loggers是Python日志配置的关键参数,默认值为True,用于控制是否禁用已有非根日志器(除非显式配置或其祖先被命名)。 作用:若为True,禁用所有未在配置中声明的现有日志器(通过设置.disabled=True),仅保留根日志器或显式配置的日志器及其子日志器。 场景: True:需全新日志环境时(如屏蔽第三方库日志); False:需保留已有日志器时(如复用导入模块的日志配置)。 注意:不影响根日志器,且需显式配置需保留的日志器。例如Django中可通过
2025-07-18 02:01:01
1020
原创 What does logging.raiseExceptions do?
Python的logging模块中,raiseExceptions是一个全局变量,决定是否将日志处理过程中的异常传播出去。默认值为True,开发时建议保持此设置以便调试;生产环境应设为False,使日志系统静默失败而不影响应用运行。该参数无法通过配置文件设置,必须在代码中手动配置,通常在加载日志配置后设置。开发环境保持True便于发现问题,生产环境设为False可避免日志系统错误导致应用崩溃。
2025-07-18 00:49:00
281
原创 [Draft]logging.logRecord explained in depth
Python的LogRecord类封装了日志事件的所有关键信息,包括核心属性(如日志名、消息、级别)、计算属性(如格式化消息)和自定义属性。它支持通过exc_info捕获异常信息,通过stack_info记录调用栈,并在Python 3.12+中新增taskName属性以支持异步任务。getMessage()方法用于格式化消息字符串。这些功能可通过自定义LoggerAdapter或Handler扩展,为日志记录提供强大的灵活性和上下文信息。
2025-07-17 16:49:54
546
原创 logging.debug() explained in detail
本文详细介绍了Python logging模块中debug方法的关键参数及其用法。msg参数支持字符串格式化(%操作符),args作为位置参数插入msg;exc_info参数可自动或手动添加异常堆栈信息;stack_info参数记录当前调用堆栈;stacklevel参数控制日志调用位置的层级;extra参数用于添加自定义上下文信息。本文通过具体示例演示了这些参数的组合使用场景,包括异常处理调试、执行路径追踪以及多线程日志记录等,并指出了常见的使用陷阱(如KeyError)及解决方案。
2025-07-17 14:54:03
570
原创 用colorlog库以实现日志彩色输出
colorlog是一个为 Python 标准logging模块提供彩色输出的轻量级库,通过终端颜色增强日志可读性。无需重构日志系统,几行代码无缝接入现有logging模块,是优化日志可读性的高效工具。
2025-07-14 01:45:14
232
原创 What‘s the default level of a non-root logger?
【代码】What‘s the default level of a non-root logger?
2025-07-14 01:32:54
460
原创 Logging-demystified p10: Creating custom JSONFormatter
摘要:本文介绍了如何在Python日志系统中创建自定义JSON格式化器,以便生成结构化日志输出。通过继承logging.Formatter类并重写format()方法,可以构建包含时间戳、日志级别、消息等标准字段的JSON日志记录。文中提供了完整实现代码,包括处理异常信息和堆栈跟踪,以及动态检测额外字段的功能。此外,还展示了如何使用YAML配置文件设置日志格式,并给出了包含不同日志级别的示例输出。这种方法特别适用于需要将日志集成到Elasticsearch等日志聚合系统的场景。
2025-07-13 23:08:52
672
原创 Python logging demystified p9: How to Create custom filters
Python's logging module allows creating custom filters for advanced log record control. To implement, subclass logging.Filter and define a filter(record) method that returns True/False to process/discard records. Custom filters can also modify LogRecord at
2025-07-12 12:52:42
413
原创 How to make a timezone aware datetime object in Python and Django
【代码】How to make a timezone aware datetime object in Python and Django。
2025-07-12 10:50:54
607
转载 Logging-demystified p9:Creating custom filters
本文展示了如何创建自定义日志过滤器,通过YAML配置实现条件过滤。示例中定义了一个CustomFilter类,它检查日志记录extra字典中的特定值是否满足阈值条件。配置文件中设置了两个处理器:常规处理器记录所有日志,特殊处理器仅处理满足过滤条件的WARNING及以上级别日志。运行结果显示,只有my_arg值超过100的日志才会被特殊处理器处理。该方法演示了如何从配置文件传递参数到过滤器类,以及如何通过()语法让日志系统实例化自定义类。
2025-07-12 01:35:02
10
原创 Propagation V.S. Levels checking
Python日志系统默认会传播日志消息,导致一个INFO级别的消息被记录三次。实例中,child_logger首先处理消息,输出"CHILD:INFOmsg"。由于propagate=True(默认设置),消息继续传播到parent_logger(输出"PARENT:INFOmsg")和root_logger(输出"ROOT:INFOmsg")。关键点:1)传播机制使消息沿日志器层级传递;2)传播过程中处理器的级别检查被绕过;3)可通过设置prop
2025-07-10 21:53:01
374
原创 Python logging properties: propagate V.S. lastResort
Python日志模块中propagate属性和lastResort机制共同作用:propagate控制日志是否向父Logger传递(默认True),False时仅当前Logger处理;lastResort在日志传播至根Logger仍无Handler时激活,输出原始消息到stderr。关键点:①propagate=False时无Handler会导致日志丢失;②lastResort仅在完整传播链无Handler时触发;③应显式配置Handler避免依赖兜底机制。注意根Logger的隐式初始化可能影响日志处理流程
2025-07-10 18:52:08
285
转载 Logging-demystified p1:Creating the root logger, inspecting a logger to determine its properties
Python日志模块中,根日志记录器(root logger)默认配置为WARNING级别且无处理器,会使用"last resort"机制作为最后处理手段。当未配置处理器时,系统会将WARNING及以上级别的日志(WARNING、ERROR、CRITICAL)输出到控制台。若禁用last resort(logging.lastResort=False),则不会输出任何日志,仅显示"未找到处理器"的提示信息。这表明日志系统会确保应用程序不会因日志问题而崩溃,即使日志处理
2025-07-10 12:35:19
13
转载 [zz]Demystifying Python Logging
Hands-on coding session where we'll explore almost all topics about python's logging module.
2025-07-10 11:06:34
13
原创 Django Project: Envato Elements Mirror Site-P4
给定itemUrl,如何爬取item detail?Note:为了确保输入数据包(packet)的结构合规性,可以引入输入数据Schema验证机制。
2025-07-03 17:01:53
202
原创 Django Project: Envato Elements Mirror Site-P3
基于humaneId字段的ZIP文件与Web模板项关联性检查
2025-07-03 10:59:41
101
原创 Django Project: Envato Elements Mirror Site-P2
P1我们已经将硬盘上的zip文件导入到数据库ZipfileStore中,ZipfileStore的主要作用是记录已经下载下来的zip文件,方便使用时随时查询。下一节,将介绍如何将WebTemplateItem.is_downloaded与ZipfileStore.belonging_to进行关联。step 2: 通过爬虫,填充这张表。后面会专门介绍如何写爬虫,这里暂时假定表中已有数据。这一小节主要介绍,如何定义镜像网页中需要呈现的内容。
2025-07-02 23:07:42
197
原创 Django Project: Envato Elements Mirror Site-P1
管理已经下载的zip文件,通常存放在文件夹web_store或ppt_store下面。step 1: 定义模型类(models.py)
2025-07-02 22:18:20
190
原创 解决Django+PostgreSQL中文全文搜索难题P1:PGroonga技术实践
PostgreSQL原生不支持中文全文搜索 FTS (Full Text Search) ,但可通过安装插件解决。本文重点介绍了PGroonga插件的安装使用方法:1. 在macOS系统通过Homebrew安装PGroonga 2. 创建数据库并加载扩展 3. 配置用户权限 4. 在Django中实现中英文搜索分离处理,其中中文搜索调用PGroonga,英文仍用PostgreSQL原生引擎。同时说明了Django中RawQuerySet结果集大小计算的注意事项。最终实现了完善的中英文混合搜索功能。
2025-06-02 20:49:41
933
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人