python 的import的含义

本文深入解析Python中模块和包的概念,详细说明如何在不同目录下导入模块,以及import与from...import语句的区别。探讨了两种导入方式在内存管理、代码修改及程序间交互上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用。
如果想使用非当前模块中的代码,需要使用Import,这个大家都知道。
如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py
import b
但是如果要import一个不同目录的文件(例如b.py)该怎么做呢?
首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可,例如
import sys
sys.path.append(‘c:\xxxx\b.py’) # 这个例子针对 windows 用户来说的
大多数情况,上面的代码工作的很好。但是如果你没有发现上面代码有什么问题的话,可要注意了,上面的代码有时会找不到模块或者包(ImportError: No module named xxxxxx),这是因为:
sys模块是使用c语言编写的,因此字符串支持 ‘\n’, ‘\r’, '\t’等来表示特殊字符。所以上面代码最好写成:
sys.path.append(‘c:\xxx\b.py’)
或者sys.path.append(‘c:/xxxx/b.py’)
这样可以避免因为错误的组成转义字符,而造成无效的搜索目录(sys.path)设置。

1、语法分析:首先from A import a1 是从A模块导入a1工具(可以是某个 函数,全局变量,类),import A是导入整个A模块的全部内容(包括全部的函数,全局变量,类)。

2、内存分析:from…import…会在内存中创建并加载该模块工具的副本,当有另外一个程序导入时,会在内存中创建另一个副本进行加载,不会共用一个副本。所以程序进行的修改不会影响到被导入的原模块,且不同程序之间不会互相影响。
import…方法导入模块会在内存中直接加载该模块的全部属性。当出现多个程序导入该模块时,会共用一个模块,程序之间会互相影响,包括原模块。

3、from…import * 属于from…import…只不过是加载了模块的全部属性。

当多个程序需要同时导入一个模块并且都是访问时,使用import 可以节省内存空间

当多个程序需要同时导入一个模块当其中一个需要修改模块,那么修改的模块的程序应该使用from来导入模块.

<think>我们正在处理用户关于Pythonimport语句模块来源路径的问题。根据用户的问题,他想理解Python中模块导入的来源,特别是import语句的模块来源路径。 根据系统指令,我们需要使用中文回答,并确保行内数学表达式使用$...$格式,独立公式使用$$...$$格式(但本问题可能不涉及数学公式,所以可能不需要)。同时,我们需要生成相关问题,并在回答中引用的段落末尾添加引用标识。 我们参考了提供的引用内容,特别是引用[3]和引用[4]中关于模块搜索路径的说明。我们将结合这些信息,并补充一些常见知识,来回答用户的问题。 回答结构: 1. 解释Python导入模块时的搜索路径顺序。 2. 详细说明每一步路径的含义。 3. 如何查看和修改模块搜索路径。 4. 给出示例代码。 同时,我们会在最后生成相关问题。 注意:引用标识需要自然地添加在引用内容的末尾。我们引用的内容主要来自引用[3]和引用[4],以及一些补充知识。 开始回答:</think>### Pythonimport语句的模块来源路径 在Python中,当使用`import`语句导入模块时,解释器会按照特定顺序搜索模块位置。搜索路径的优先级顺序如下: 1. **当前目录** 首先搜索执行脚本所在的目录(或交互式解释器的当前工作目录)。例如当前目录有`my_module.py`,则`import my_module`可直接使用[^3][^4]。 2. **PYTHONPATH环境变量** 若当前目录未找到,则按顺序搜索`PYTHONPATH`环境变量中配置的目录列表。可通过终端设置: ```bash export PYTHONPATH="/path/to/modules:$PYTHONPATH" ``` 3. **标准库路径** Python安装的标准库目录(如UNIX系统的`/usr/local/lib/python3.x`)[^3][^4]。 4. **第三方库路径** 通过`pip`安装的第三方包路径(如`site-packages`目录)。 #### 查看完整搜索路径 可通过`sys.path`查看所有搜索路径: ```python import sys print(sys.path) # 输出按顺序排列的搜索路径列表 ``` 输出示例: ``` ['', '/usr/local/lib/python38.zip', '/usr/lib/python3.8/site-packages', ...] ``` #### 动态修改路径 可在代码中临时添加路径: ```python import sys sys.path.insert(0, '/custom/module/path') # 添加新路径到搜索列表开头 import custom_module # 现在可导入该路径下的模块 ``` 但需注意:频繁修改`sys.path`可能导致维护困难[^2]。 #### 路径配置原理 所有导入的模块会缓存到`sys.modules`字典中,键为模块名,值为模块对象,避免重复加载[^1]。 --- ### 相关问题 1. 如何永久添加自定义路径到Python模块搜索路径? 2. 为什么有时修改`sys.path`后仍无法导入模块? 3. Python虚拟环境(如venv)如何影响模块搜索路径? 4. `__init__.py`文件在包导入中起什么作用? [^1]: Pythonimport语句的详细解析(绝对路径导入和相对路径导入) [^2]: Python import语句的搜索路径设置 [^3]: Python import语句导入模块语法 [^4]: Pythonimport模块时的搜索路径
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值