轻松导入和执行Python模块的3种技巧

在centos7上安装python3以及python模块和python库 在Centos 7 上安装python3的两种方法 1、Python源代码编译安装 安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo yum install yum-utils 使用yum-builddep为Python3构建环境,安装缺失的软件依赖,使用下面的命令会自动处理. $ sudo yum-builddep python 完成后下载Python3的源码包(笔者以Python3.5为例),Pyt 阅读详情

引言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入


作为一名程序员,你肯定希望与团队其他用户共享你所创建的有用模块。尽管你的模块可能有用,但是如果其他人需要花费大量精力来访问模块中的有用功能,则其他人将不会使用它。

因此,如果想使用户易于使用你的模块,导入和运行模块的代码应该简短。本文将向你展示3种简化导入和执行Python模块的方法。

导入

场景

假设我们有一个名为 utils.py 的文件,其中包含所有重要的函数和类

def add_two(num: int):
    return num + 2   

def multiply_by_two(num: int):
    return num * 2 

a = 5 

在另一个脚本中,我们使用 from utils import * 从 utils.py 中导入所有内容,除了变量 a 。那我们该怎么做呢?

解决方案

要做到这点很容易,只要加入all = [“add_two”, “multiply_by_two”]即可。使用 import * 时,all 中指定的函数、类和包将被导入。


__all__ = ["add_two", "multiply_by_two"]

def add_two(num: int):
    return num + 2   

def multiply_by_two(num: int):
    return num * 2 

a = 5 

现在尝试在另一个脚本中使用 import *


from utils import *

num = 3 
print(add_two(num))
print(multiply_by_two(num))
print(a)

5
6
Traceback (most recent call last):
  File "main.py", line 6, in <module>
    print(a)
NameError: name 'a' is not defined

Cool!这个错误告诉我们,只从 utils.py 中导入了 add_two 和 multiply_by_two ,而并未导入变量 a 。

合并多个文件

场景

想象一下我们目录中文件的结构如下:


.
├── data_modules
│   ├── load_data.py
│   └── process_data.py
└── main.py

load_data.py 如下所示:


class DataLoader:
    def __init__(self, data_dir: str):
        self.data_dir = data_dir

    def load_data(self):
        print(f"Loading data from {self.data_dir}")

process _ data.py 如下所示:

class DataProcessor: 
    def __init__(self, data_name: str):
        self.data_name = data_name
    
    def process_data(self):
        print(f"Processing {self.data_name}")

要使用来自两个不同文件的类,我们需要从每个文件导入每个类。


from data_modules.load_data import DataLoader
from data_modules.process_data import DataProcessor

data_loader = DataLoader('data/')
data_loader.load_data()

data_processor = DataProcessor('data1')
data_processor.process_data()

这个方法很好,但是使用2个导入语句是很繁琐的。有没有一种方法,我们可以把两个导入语句变成一个导入语句,就像下面这样。


from data_modules import DataLoader, DataProcessor

解决方案

在 data _ modules 目录下插入 _ init _. py 文件可以很容易地解决这个问题:


touch data_modules/__init__.py

然后将前面提到的 import 语句插入到 _ init _. py 文件中:


from .load_data import DataLoader
from .process_data import DataProcessor

我们在这里使用一个 "." ,因为 load_data.py 和 _init _. py 在同一个目录中。

现在,让我们尝试从 data_modules 导入 DataLoader 和 DataProcessor 。


from data_modules import DataLoader, DataProcessor

data_loader = DataLoader('data/')
data_loader.load_data()

data_processor = DataProcessor('data1')
data_processor.process_data()

Loading data from data/
Processing data1

太棒了! 成功了!

像脚本一样运行目录

场景

我们的目录是这样的:


.
└── data_modules
    ├── __init__.py
    ├── load_data.py
    ├── main.py
    └── process_data.py

当我们运行 main.py 的时候是这样的:


$ python data_modules/main.py

我们可能希望简化用户或队友运行 main.py 代码的步骤,只需运行父目录:


$ python data_modules

这比运行 data_modules/main.py 更好,因为它更短,用户不需要知道 data_modules 中有哪些文件。

我们怎么才能做到呢?

解决方案

这时,__ main__.py 就派上用场了。只需将运行顶级目录时要运行的脚本更改为__ main __ .py 即可。在我们的例子中,我们需要将 main.py 变为 __ main__.py。


# Rename main.py to __main__.py
$ mv data_modules/main.py data_modules/__main__.py

我们的新目录将如下所示


.
└── data_modules
    ├── __init__.py
    ├── load_data.py
    ├── __main__.py
    └── process_data.py

现在让我们测试下

$ python data_modules
Loading data from data/
Processing data1

效果非常好!

总结

在本文中,我们了解了如何让你和那些使用你的软件包的人更容易使用它。希望可以帮到你~

python “名称空间和作用域” 以及 “模块的导入和使用” 局部使用:局部名称空间——>全局名称空间——>内置名称空间 Python 有时候称为胶水语言,就是因为它有强大的可扩展性,这个扩展性就是用模块实现的。 阅读详情

相关推荐

Python关于模块的导入与函数编写指南

Python关于模块的导入与函数编写指南 引言: 上篇文章记录了函数如何存储在模块中,那么这篇文就来聊聊导入模块这件事。 1、 导入整个模块 与 导入模块中所有函数 两种导入方法的辨析: 1.1 导入整个模块 import + 模块名 这就是导入整个模块了。那如果我们要调用模块中的函数时,要写模块名.函数名比如cake.make_cake() 1.2 导入模块中所有函数 如上图所示,这样要用到cake模块 中的make_cake()功能时就可以直接在程序中写这个函数。 import语句中的 * 星号让P

weixin_44879900的博客 773

Python语法之模块和包

执行上述指令后,Python 首先会从自己内置模块中查找是否含有该模块的定义,若未查询到会从 sys.path 对应的模块路径查询是否含有对应模块的定义,如果搜索完成,仍然没有对应的模块时,则抛出 import 的异常。为了让创建的模块能够被找到,需要将模块放到上述路径中的一个,因为 Python 只会在这些路径中去查找模块,如果没有将模块创建在这些路径中,则找不到对应的模块,也就没办法应用模块中的对象和方法了。我们在编写程序的时候,也可以引用其他模块,包括 Python 内置的模块和来自第三方的模块。

shiwei0813的博客 1510

Python编程实战 - 函数与模块化编程 - 导入与使用模块

模块(Module)是一个包含 Python 定义和语句的文件,文件名以.py结尾。简单来说,一个.py文件就是一个模块。比如,我们创建一个名为mymath.py这时,我们就定义了一个名为mymath的模块,其中包含了两个函数add()和sub()。project/│utils.py")main.py运行main.py时,Python 会自动找到同一目录下的utils.py并执行导入。• 模块是.py文件,包是包含的目录;•import导入整个模块,导入部分内容;

tenkofx的博客 1359

from xxx import xxx 和 import xxx的区别 & import 自己的库(文件夹) & 绝对导入相对导入 (尽量不要使用 from *** import * 模糊导入)

两个import语义有差异 import datetime print(datetime.datetime.now()) 是引入整个datetime包 from datetime import datetime print(datetime.now()) 是只引入datetime包里的datetime类 所以import之后前者是datetime这个包可见,后者是datetime.datetime这个类可见。 ..................

hxxjxw的博客 3087

22、探索Python模块加载奥秘:命名空间与包导入技巧

本文深入探讨了Python的模块加载机制,重点介绍了命名空间的概念,并通过实用技巧和案例,帮助读者理解模块和包在Python开发中的应用。文章还介绍了高级模块加载机制,如动态导入和延迟导入,以及如何覆盖导入的模块。最后,文章提出了最佳实践,包括命名空间污染的避免、代码封装以及使用文档字符串。通过掌握这些知识和技巧,读者可以更高效地组织和开发Python程序。

silenceallat的博客 479

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 420

python中的utils模块,ImportError:没有名为utils的模块

I'm trying to import a utilities file but running into a weird error only when I run the code through a script.When I run test.pylocation: /home/amourav/Python/proj/test.pycode:import osos.chdir(r'/ho...

weixin_36327582的博客 2651

[ESP32S3N16R8][LVGL8.3.0][IDF5.2.3]ST7701S RGB屏幕驱动[vscode最详细配置]

ST7701S ESP32S3 基于ESP-IDF5.2.3编写,编程环境为vscode。本教程详细讲述了esp32s3配置st7701s屏幕驱动以及gt911触摸驱动并关联到lvgl8.3.0,使用IDF5.23示例rgb_panel进行测试删除了其里面的屏幕驱动,改为单独编写屏幕和触摸驱动,最后完成了实列。

qq_44022379的博客 2608

从第一行代码学Python:理解from..import

from ..module import xxx是什么意思?Python中from 省略号/点点 Import ..是什么意思?

江南蜡笔小新 1920

SpyGlass CDC实战:如何用sgdc约束文件解决跨时钟域报错(附常见错误排查)

本文详细介绍了如何使用SpyGlass CDC工具链中的sgdc约束文件解决跨时钟域(CDC)报错问题。从基础约束文件架构到复杂场景调试,涵盖了时钟域定义、复位信号约束、Waiver策略等关键技巧,并附有常见错误排查方法,帮助工程师高效处理CDC验证挑战。

loss4bartender的博客 1148

使用ExcelJS向XLSX单元格居中插入图片

本文记录了使用ExcelJS库向XLSX单元格里居中写入图片的方法。本文内容包括:xlsx 文件格式;xlsx 图片定位的长度单位;使用nativeColOff和nativeRowOff进行定位,不要使用官网给的定位方式;添加图片到数据表的总体流程和样例代码;注意事项等。

weixin_43678000的博客 3456

踩坑 from utils import 报错

yolov5,utils

qq_30558045的博客 1万+

【2023】Java利用modbus4j实现工业设备Modbus TCP数据采集与解析

本文详细介绍了在2023年使用Java和modbus4j库实现工业设备Modbus TCP数据采集与解析的完整实践。内容涵盖开发环境搭建、TCP连接建立、开关量与模拟量数据的读取与解析、批量读取性能优化、控制指令写入以及常见错误排查指南,为开发者构建稳定高效的工业物联网数据采集系统提供全面指导。

rose2的博客 723

在Python中如何导入模块并使用其中的函数和变量

你也可以创建自己的模块。只需将一些Python代码保存在一个.py文件中,然后在其他Python脚本中导入它。例如,你创建了一个名为")mymodule.my_function() # 调用自定义模块中的函数print(mymodule.my_variable) # 访问自定义模块中的变量在Python中,模块是组织和重用代码的有效方式。通过import语句,你可以轻松地在你的程序中使用标准库模块、第三方模块以及自己编写的模块。

Oliver9987的博客 1551

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 766

环形平滑标签(Circular Smooth Label, CSL)技术详解

环形平滑标签(CSL)是一种优化算法,旨在解决旋转目标检测中角度预测的边界问题。通过将角度回归转化为分类任务,并利用窗口函数平滑标签分布,CSL有效处理了角度周期性的梯度突变问题。其核心原理包括角度离散化和平滑标签编码,通过高斯、矩形、三角等窗口函数生成概率分布。CSL在技术实现上涉及标签转换流程、模型结构调整和损失函数优化,显著提升了检测精度和稳定性。在DOTA数据集上的实验表明,CSL在mAP和角度误差方面优于传统方法。应用场景包括遥感图像分析、自动驾驶和工业质检,部署时需注意旋转NMS编译和ONNX导

浩瀚之水的专栏 640

Python基础 - 模块的基本使用 import关键字导入

Python模块与import关键字详解 本文系统介绍了Python模块的基本概念、import关键字的多种用法及其执行机制。主要内容包括: 模块的核心作用:模块是组织代码的基本单位,支持代码封装与复用,提高可维护性和可扩展性。 import关键字的语法: 完整导入:import module_name(需加模块前缀调用) 部分导入:from module import name(直接调用) 别名导入:import module as alias(简化长模块名) 全量导入:from module impor

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)

大模型的MCP火了,可是无论是Claude官网本身自带Sample还是全网任何一本教程没有一个可以真正应用在生产环境中的。要么就是只能在本地以文件IO流的方式运行要么干脆连编译都出错,真正的mcp server和client是怎么编写的?如何运行在分布式环境?本教程就带大家真正从0开始以“AI计算食物热量“为例带大家真正学习mcp开发的全过程。

打造全国最全的AI Agent开发知识领域的博客 1802

Python的导入系统:模块查找、加载和缓存机制

Python导入系统解析:模块查找、加载与缓存机制 本文深入剖析Python导入系统的核心工作机制,包含三大关键部分: 模块查找机制:Python通过sys.meta_path中的查找器按顺序搜索模块位置,包括内置模块、sys.path路径和.pth文件路径。系统支持自定义查找器扩展搜索逻辑。 模块加载流程:找到模块后,加载器负责将模块代码转换为内存中的模块对象,包含创建模块对象和执行模块代码两个关键步骤。 缓存优化机制:Python使用sys.modules字典缓存已导入模块,避免重复导入开销,提升性能。

闲人编程的博客 1295

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

给初学者用pycharm轻松导入Python各种包

pycharm是一款非常好用的python编程的编辑器,但是对于初学者来说,里面自带的包并不多,有时自己去下载 步骤: 打开pycharm,创建一个新的项目,在新的项目里输入 import sync print(“frist”) 如图所示,编译出错,提示ModuleNotFoundError: No module named ‘sync’,没有sync这个模块 2.点左上角 File->...

scx_qsnl的博客 5983

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python导入上一层目录的模块

Python相关视频讲解:python的or运算赋值用法用python编程Excel有没有用处?011_编程到底好玩在哪?查看python文件_输出py文件_cat_运行python文件_shel如何实现“Python导入上一层目录的模块” 概述 在Python中,要导入上一层目录的模块,可以通过修改sys.path...

weixin_40393654的博客 704

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python模块导入全攻略:如何轻松调用不同文件中的函数?

在开发Python项目时,90%的开发者都会遇到这样的困境:代码越写越长,功能越来越乱,最后变成难以维护的"意大利面条式代码"。本文将手把手教你通过模块化编程,让代码结构清晰、可维护性强,并深入解析5种跨文件调用函数的实用方法!

2201_75798391的博客 1311

python在哪里下载导入模块_一文解决python模块导入

python 模块导入 原理查找是按照 sys.path 中的路径挨个扫描。若都不存在则提示error。sys.path路径第一个是当前运行脚本所在的目录,其后是PYTHONPATH(一般若步专门设置则为空)设置的目录,在后面是全局包所在目录。PS:一个目录要有__init__.py才能作为包被导入示例代码地址:一共四种情况要导入的包在当前目录要导入的包在子目录要导入的包在父目录要导入的包在兄目录...

weixin_39859988的博客 352

python sqlite3模块详解 安装和导入 连接数据库 创建游标 执行SQL命令 提交更改 查询数据 关闭连接 错误处理 总结——《跟老吕学Python编程》

Python的sqlite3模块为SQLite数据库提供了一个简单而强大的接口。通过使用DB-API 2.0规范,可以轻松地执行SQL命令、查询数据和管理数据库连接。尽管SQLite是一个轻量级的数据库,但它提供了许多关系型数据库的功能,如事务处理、索引和约束等。这使得它成为许多应用程序的理想选择,特别是那些需要嵌入式数据库或轻量级数据库解决方案的应用程序。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《跟老吕学Python编程》《Python游戏开发实战讲解》

Python老吕的博客 1313

Python函数与模块全解析:从入门到进阶,轻松掌握高效编程技巧

在现代软件开发中,代码的重用性和可维护性是衡量代码质量的重要标准。Python作为一门高效、简洁的编程语言,其函数与模块机制使得开发者能够快速构建高质量的应用。在本文中,将深入探讨Python中的“函数”和“模块”这两个核心概念,帮助你从基础到进阶掌握如何高效地编写、组织和重用代码。不论你是Python新手还是有一定经验的开发者,这篇文章都能为你提供有价值的指导,提升你的编程能力。函数是编程中一种重要的概念,它通过将一段代码封装在一个可重复使用的模块内,来实现特定的功能。

吴师兄大模型的博客 1044
上一篇: 非常干货:Python 探针实现原理
下一篇: 零基础学Python:案例实践之学生信息管理系统
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值