seo查询官方网站,商城网站建设公司,网站设计思路方案,seo服务哪家好目录
一、导入官方库的三种手段
1.1 标准导入#xff1a;导入整个库
1.2 从库中导入特定项
1.3 非标准导入#xff1a;导入整个库
二、导入自定义库/模块的方式
模块、包的定义
使用案例
场景1: main.py 和 circle.py 都在同一目录
场景2: main.py 和 circle.py 都在…目录
一、导入官方库的三种手段
1.1 标准导入导入整个库
1.2 从库中导入特定项
1.3 非标准导入导入整个库
二、导入自定义库/模块的方式
模块、包的定义
使用案例
场景1: main.py 和 circle.py 都在同一目录
场景2: main.py 和 circle.py 都在根目录的子目录 model/ 下
场景3: main.py 在根目录circle.py 在子目录 model/ 下
场景4main.py在model/下circle.py在utils/下
问题原因执行环境与导入路径冲突
解决方案
1. 使用 -m 模式运行推荐
2. 修改 sys.path
3. 使用绝对导入并确保项目根目录在 PYTHONPATH 中
最佳实践建议
三、导入库/模块的核心逻辑找到根目录python解释器的目录和终端的目录不一致 一、导入官方库的三种手段
复盘下学习python的逻辑所谓学习python就是学习python常见的基础语法学习要处理的任务所需要用到的第三方库
类别典型库解决的问题学习门槛基础工具os、sys、json操作系统交互、序列化数据如读写 JSON 文件低科学计算numpy、scipy数值计算、线性代数、信号处理中数据分析pandas、matplotlib数据清洗、转换、可视化如绘制折线图、柱状图中Web 开发Django、Flask快速搭建 Web 应用如网站后台、API 接口中高机器学习scikit-learn、TensorFlow机器学习算法分类、回归、深度学习高自动化脚本pyautogui、pytest自动化测试、桌面操作自动化如模拟鼠标键盘操作低网络爬虫requests、Scrapy从网页提取数据需注意反爬机制和法律合规中
所以用到什么学什么库即可。
1.1 标准导入导入整个库
这是最基本也是最常见的导入方式直接使用import语句。 1.2 从库中导入特定项
当使用from语法从库中导入特定的函数或类时这些函数或类就可以在代码中直接使用不需要添加模块名作为前缀。因为在导入时没有包括模块的完整路径前面也不能加上库名。
类似的写法如sklearn库很大直接导入sklearn库会占用电脑大量内存所以一般只导入需要的库
如 from sklearn.model_selection import train_test_split
1.3 非标准导入导入整个库
这将导入math模块中定义的所有公开函数和变量。 和上述from同理直接调用sin()、cos()等而无需math.前缀。
虽然 import math和 from math import *看起来都是导入了 math 模块但它们在导入方式、作用域处理以及对命名空间的影响上有重要的区别。
1命名空间的污染
import math这种方法会将整个 math 模块导入到命名空间中但是需要使用 math. 前缀来访问模块内的函数或变量。这种方式保持了命名空间的整洁因为所有的 math 函数和变量都包含在 math 这个模块对象中。 from math import *这种方法将 math 模块中的所有公开的函数和变量导入到当前的命名空间中可以直接使用这些函数和变量而无需 math. 前缀。这种方式可能会导致命名空间污染特别是当有多个模块都被这样导入时很容易发生命名冲突。
2明确性和可维护性
import math明确指出了函数和变量来源于 math 模块这对代码的可读性和维护性都是有益的。其他阅读你代码的人可以清楚地看到每个函数的来源这对大型项目和团队合作尤为重要。
from math import *虽然代码看起来更简洁但这种方法减少了代码的明确性。如果没有足够的上下文很难判断一个特定的函数是来自 math 模块还是其他模块尤其是当你导入了多个模块时 上述这些如果是python内置库可以直接导入大部分第三方库都需要先用pip来安装。下面的模块也就是.py文件是不需要安装即可调用的。
二、导入自定义库/模块的方式
模块、包的定义
模块Module
本质以 .py 结尾的单个文件包含Python代码函数、类、变量等。作用将代码拆分到不同文件中避免代码冗余方便复用和维护。
包Package
在python里包就是库
本质有层次的文件目录结构即文件夹用于组织多个模块和子包。核心特征包的根目录下必须包含一个 __init__.py 文件可以为空用于标识该目录是一个包。
使用案例
若编写一个计算圆面积的代码并保存为 circle.py这个文件就是一个模块。
使用时通过 import circle 导入模块调用其中的函数如 circle.calculate_area(5)。
# circle.py
import mathdef calculate_area(radius):return math.pi * radius ** 2
场景1: main.py 和 circle.py 都在同一目录
目录结构:
项目根目录/
├── main.py
└── circle.py
main.py 内容:
# main.py
from circle import calculate_arearadius 5
area calculate_area(radius)
print(f半径为 {radius} 的圆面积是: {area})# 或者注释上面的用下面的方法
# import circle
# radius 5
# area circle.calculate_area(radius)
# print(f半径为 {radius} 的圆面积是: {area})
cd xxxmain的相对路径然后执行python main.py 终端可以通过左上角的查看-终端 打开默认的路径是项目根目录。
场景2: main.py 和 circle.py 都在根目录的子目录 model/ 下
目录结构:
项目根目录/ └── model/ ├── __init__.py (推荐添加将 model 目录标记为包) ├── main.py └── circle.py
model/main.py 内容同上:
运行命令python xxx/main.py 场景3: main.py 在根目录circle.py 在子目录 model/ 下
目录结构:
项目根目录/
├── main.py
└── model/├── __init__.py (必需添加将 model 目录标记为一个可导入的包)└── circle.py
main.py 内容:
# main.py
from model.circle import calculate_arearadius 5
area calculate_area(radius)
print(f半径为 {radius} 的圆面积是: {area})# 或者注释上面的用下面的方法
# import circle
# radius 5
# area circle.calculate_area(radius)
# print(f半径为 {radius} 的圆面积是: {area}) __init__.py的添加问题Python 3.3 及以后版本做了 “命名空间包” 相关优化有些场景下目录里没有 __init__.py 也能以简单命名空间包形式被导入主要用于处理跨目录分布的包结构。但常规的、希望清晰组织模块的包还是建议显式添加 __init__.py 明确包的边界和初始化逻辑避免因解释器版本、环境差异出现导入问题。
场景4main.py在model/下circle.py在utils/下
项目根目录/
├── circle2.py
└── utils/├── __init__.py (必需添加将 model 目录标记为一个可导入的包)└── circle.py
└── model/└── main.pymain.py:
# main.py
from utils import circle # 这是根目录绝对路径的导入方式radius 5
area circle.calculate_area(radius)
print(f半径为 {radius} 的圆面积是: {area})circle.py和circle2.py内容相同
# circle.py
import mathdef calculate_area(radius):return math.pi * radius ** 2
运行方式 python -m model.main 如果直接使用python model/main.py会报错 是因为 Python 的导入机制要求 相对导入必须在包环境中使用而直接执行脚本会破坏包的结构。通过 -m 模式、修改 sys.path 或配置 PYTHONPATH 可以解决这个问题。当使用 python -m model.main 时Python 会将当前目录即项目根目录添加到 sys.path 的开头。
问题原因执行环境与导入路径冲突
1、Python 的模块搜索路径sys.path
当你执行 python model/main.py 时Python将 当前目录即脚本所在的父目录 添加到 sys.path 的首位。例如
project/
├── model/
│ ├── __init__.py
│ ├── main.py
│ └── circle.py
└── app.py此时Python 会将 project/ 加入 sys.path但不会将 model/ 目录本身加入。
如果你在 main.py 中使用 相对导入例如 from .circle import CirclePython 会报错因为
a、相对导入from .module import ...要求当前文件必须作为包的一部分被导入即通过 python -m model.main。
b、直接运行 main.py 时它被视为 顶层脚本而非包的一部分. 路径无效。
2、相对导入与绝对导入的区别
相对导入from .circle import Circle依赖于当前模块在包中的位置只能在包内部使用。
绝对导入from model.circle import Circle依赖于 sys.path 中的路径要求 model 必须在 sys.path 中。但直接运行 main.py 时model 不在 sys.path 中因此绝对导入也会失败。
解决方案
1. 使用 -m 模式运行推荐
通过 python -m model.main 执行Python 会将 model 所在的父目录如 project/加入 sys.path并将 model 视为包
# 在 project/ 目录下执行
python -m model.main2. 修改 sys.path
在 main1.py 开头手动添加父目录到 sys.path main1.py内容
import sys
import os# 获取当前脚本的父目录即 model/ 的路径
current_dir os.path.dirname(os.path.abspath(__file__))
# 获取父目录的父目录即 project/ 的路径
parent_dir os.path.dirname(current_dir)
# 将父目录添加到 sys.path
sys.path.append(parent_dir)# 现在可以使用绝对导入
from utils import circle # 这是根目录绝对路径的导入方式radius 5
area circle.calculate_area(radius)
print(f半径为 {radius} 的圆面积是: {area})3. 使用绝对导入并确保项目根目录在 PYTHONPATH 中
在环境变量中添加项目根目录
# Linux/macOS
export PYTHONPATH${PYTHONPATH}:/path/to/project# Windows
set PYTHONPATH%PYTHONPATH%;C:\path\to\project然后在 main.py 中使用绝对导入
from model.circle import Circle最佳实践建议
统一使用 -m 模式开发时始终通过 python -m package.module 运行脚本避免直接执行包内模块。明确 __init__.py 的作用 在包的 __init__.py 中可以预导入常用模块简化外部引用例如 from .circle import Circle。空的 __init__.py 仅用于标记包但添加预导入可以让包的 API 更清晰。 使用相对导入在包内部模块间引用时优先使用相对导入from . import module避免硬编码包名。
三、导入库/模块的核心逻辑找到根目录python解释器的目录和终端的目录不一致
IDE如 VSCode 或 PyCharm通常会将你打开的项目文件夹设为“根目录”或者说运行时的工作目录。Python 在导入模块时会从这个根目录以及其他一些标准位置和脚本所在的目录开始查找。
浙大疏锦行