Python 引入中文py文件

目录

背景

思路

importlib介绍

使用方法

1.导入内置库

importlib.util

2.创建模块规格对象

[spec = importlib.util.spec_from_file_location("example_module", "example.py")](#spec = importlib.util.spec_from_file_location("example_module", "example.py"))

3.创建模块对象

[module = importlib.util.module_from_spec(spec)](#module = importlib.util.module_from_spec(spec))

4.绑定规格与对象(执行对应的模块)

spec.loader.exec_module(module)

用法讲解

创建模块规格对象:为py文件创建一个规格对象,包含文件的路径、名称、加载器等信息

创建模块对象:创建一个新的,空的模块对象

绑定规格与对象:将规格信息绑定到对象中,此时module就具备了该py文件里所定义的类、函数等数据

具体示例

文件结构如下

【打印你好世界.py】文件内容如下

[【import_chinese_file.py】 内容如下](#【import_chinese_file.py】 内容如下)

[运行【 import_chinese_file.py】 结果如下](#运行【 import_chinese_file.py】 结果如下)


背景

博主在设置Django绑定的定时任务,设计逻辑是一个py文件就是处理对应的定时任务,然后觉得用英文命名一个py文件可能没那么直观,所以想用中文来命名,就遇到了引入中文的py的问题,有了解决方法后就用文章记录下来

思路

不使用import直接导入中文py文件的模块(因为import 不能导入中文或特殊的符号),使用importlib进行处理模块的加载

importlib介绍

importlib 是 Python 提供的强大的动态导入模块库,主要用于动态导入模块和处理模块加载。

使用方法

1.导入内置库

importlib.util

2.创建模块规格对象

spec = importlib.util.spec_from_file_location("example_module", "example.py")

3.创建模块对象

module = importlib.util.module_from_spec(spec)

4.绑定规格与对象(执行对应的模块)

spec.loader.exec_module(module)

用法讲解

创建模块规格对象:为py文件创建一个规格对象,包含文件的路径、名称、加载器等信息

example_module:是自定义的模块名称,仅为标识,不会有具体影响

example.py:实际需要引入的py文件路径

spec = importlib.util.spec_from_file_location("example_module", "example.py")

创建模块对象:创建一个新的,空的模块对象

spec:对应的规格对象,一般搭配 importlib.util.spec_from_file_location() 使用

module = importlib.util.module_from_spec(spec)

绑定规格与对象:将规格信息绑定到对象中,此时module就具备了该py文件里所定义的类、函数等数据

注意:此时相当于已经执行了该py文件,例如py文件里面有print(1),将直接打印1

spec:规格对象

module:模块对象

spec.loader.exec_module(module)

具体示例

文件结构如下

【aa】文件夹下有【打印你好世界.py】文件,是用户引入的模块

【bb】文件夹的文件是进行引入的代码文件

打印你好世界.py】文件内容如下

【import_chinese_file.py】 内容如下

python 复制代码
# 1.导入内置库
import importlib.util
import os
from pathlib import Path

# 具体需要引入的文件路径
file_path = os.path.join(Path(__file__).resolve().parent.parent, "aa", "打印你好世界.py")

# 创建规格对象
spec = importlib.util.spec_from_file_location("测试的中文模块", file_path)

# 创建模块对象
module = importlib.util.module_from_spec(spec)

# 绑定规格对象至模块中(执行对应模块)
spec.loader.exec_module(module)  # 此时该模块已导入成功(相当于已运行该py文件)

# 获取py文件的aa对象
print(module.__getattribute__("aa"))

# 获取py文件的hello_world函数对象
print(module.__getattribute__("hello_world"))

# 执行py文件的hello_world函数
print(module.__getattribute__("hello_world")())

# 调用不存在的对象或函数
print(module.__getattribute__("name"))

运行【 import_chinese_file.py】 结果如下

注意是先打印【我是bb对象】然后再打印【我是aa对象】,是因为执行 spec.loader.exec_module(module) 就已经运行了该py文件

如果调用py文件不存在的对象就会执行报下面的错误,这里就能看得到自定义的规格对象名称

相关推荐
-今昭-15 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
2601_9623815815 小时前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全
用户37215742613516 小时前
如何使用 Python 从 Word 文档中提取图片
python
黑马程序员毕设17 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
白山编程大哥17 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e17 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
问天_观心17 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长18 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
昭昭日月明18 小时前
RAGFlow 入门,不用从零造轮子
python·ai编程
源代码•宸18 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang