sys.path.append()用法

本文介绍了Python中的sys.path变量,它是一个列表,包含所有Python会在其中查找模块的路径。当需要添加自定义搜索目录时,可以使用append()方法。在PyCharm中运行项目时,项目目录会自动添加到sys.path。文章通过示例解释了如何正确导入上级目录的模块,避免`ModuleNotFoundError`。并提供了正确和错误的导入方式,强调了获取项目相对路径的重要性。
部署运行你感兴趣的模型镜像

sys.path 返回的是一个列表!
该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;
对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append(‘xxx’):

用命令行去执行测试脚本的时候,如不添加当前项目路径,会报找不到模块的错。
在pycharm中运行的时候,pycharm会自动将项目所在目录添加到了sys.path中,所以从项目根目录查找是可以找到该模块的。

#获取项目相对路径
basedir2=os.path.dirname(os.path.dirname(__file__))
sys.path.append(basedir2)

import os
basedir1=os.path.dirname(__file__)
basedir2=os.path.dirname(os.path.dirname(__file__))
print(basedir1)
print(basedir2)

D:/shaoxchen/joyrun_auto/tools
D:/shaoxchen/joyrun_auto

如果需要导入上级目录的文件,需要获取项目相对路径才可以,不然会找不到导入的模块
例如测试脚本yp-exp.py想要引用test_case模块里引用的其他模块(init.py)

文件目录
test_case
    init.py
    all_case
    	init.py
    	yp-exp.py
     
#错误例子
在yp-exp.py
import os 
import sys
basedir2=os.path.dirname(os.path.dirname(__file__))
from test_case import *

#会报错 ModuleNotFoundError: No module named ‘test_case’–找不到test_case的包
#打印basedir2的路径是 ***\test_case,这妥妥的不是项目路径,所以找不到

#正确例子
在yp-exp.py
import os 
import sys
basedir2 = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
sys.path.append(basedir2)

#打印basedir2,这才是项目的根路径,才能找到test_case模块

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何正确使用 Python `sys` 模块的 `path.append` 方法添加自定义路径 `sys.path.append()` 是 Python 中用于动态添加模块搜索路径的方法。通过将路径添加到 `sys.path` 列表中,可以确保 Python 解释器在导入模块时能够找到指定路径下的模块[^1]。 以下是关于如何正确使用 `sys.path.append()` 的详细说明: #### 1. 理解 `sys.path` `sys.path` 是一个包含字符串的列表,这些字符串表示 Python 在导入模块时会搜索的路径。默认情况下,`sys.path` 包含当前工作目录、标准库路径以及环境变量 `PYTHONPATH` 中定义的路径[^2]。 #### 2. 使用 `sys.path.append()` `sys.path.append(path)` 会在 `sys.path` 列表的末尾添加一个新的路径。这意味着当 Python 查找模块时,它会按照从左到右的顺序检查所有路径,直到找到所需的模块为止[^3]。 以下是一个简单的代码示例,展示如何使用 `sys.path.append()` 添加自定义路径: ```python import sys # 添加自定义路径到 sys.path custom_path = "/path/to/your/module" sys.path.append(custom_path) # 验证路径是否成功添加 print(sys.path) ``` #### 3. 注意事项 - **临时性**:通过 `sys.path.append()` 添加的路径仅在当前 Python 会话中有效。一旦程序结束或解释器关闭,添加的路径将失效。如果需要永久添加路径,请参考其他方法,例如修改 `PYTHONPATH` 环境变量或将模块放置在 `site-packages` 目录下[^3]。 - **路径顺序**:由于 `sys.path.append()` 将路径添加到列表末尾,因此它具有较低的优先级。如果存在同名模块,Python 可能会优先加载其他路径中的模块。若希望新路径具有更高优先级,可以使用 `sys.path.insert(0, path)`[^4]。 #### 4. 应用场景 - **解决相对导入问题**:在大型项目中,直接运行某个脚本可能导致相对导入失败。通过将项目的根目录添加到 `sys.path`,可以确保 Python 正确识别包的层级结构[^4]。 - **测试外部模块**:在开发过程中,可以通过 `sys.path.append()` 临时添加外部模块的路径,而无需将其安装到全局环境中。 ```python import sys # 假设项目根目录为 /project/root sys.path.append("/project/root") # 现在可以从项目根目录导入模块 from my_package import my_module ``` #### 5. 示例:解决相对导入问题 假设项目结构如下: ``` /project/ main.py package/ __init__.py module.py ``` 如果直接运行 `package/module.py`,可能会遇到相对导入错误。通过在脚本开头添加以下代码,可以解决问题: ```python import sys import os # 获取项目的根目录 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_root) # 现在可以进行相对导入 from .submodule import some_function ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值