Python中sys.path.append方法用法详解

sys模块的功能

sys.path.append() 方法是 Python 中用于动态添加搜索路径的工具。sys.path 是一个由字符串组成的列表,它定义了 Python 解释器在导入模块时搜索模块的路径。当你使用 sys.path.append() 方法时,你实际上是在列表的末尾添加一个新的路径。

  • 用途

    导入自定义模块:如果你有自定义的 Python 模块或包,它们不在标准库或安装的第三方库的路径中,你可以使用 sys.path.append() 来添加包含这些模块的目录。

  • 开发中的模块:在开发过程中,你可能需要导入尚未安装到环境中的模块。通过添加模块所在的目录到 sys.path,你可以在开发过程中直接导入这些模块。

    避免命名冲突:如果你的模块名与标准库中的模块名相同,通过添加自定义模块的路径,你可以确保你的模块被优先导入

    实战认识

  • 功能结构如下
  • 代码
  • 模块内容
    module1.py:
    
    # module1.py
    def greet():
        return "Hello from module1"
    module2.py:
    
    python
    # module2.py
    def greet():
        return "Hello from module2"
    
    主程序
    main.py:
    import sys
    import os
    
    
    # 获取当前文件的目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    print('*'*100)
    print('current_file_path:',os.path.abspath(__file__))
    
    print('current_dir:',current_dir)
    print('before _  sys.path ',sys.path)
    
    from package.module1 import greet as greet1
    from package.module2 import greet as greet2
    
    def main():
        print(greet1())
        print(greet2())
    
    if __name__ == "__main__":
        main()
    

    不使用sys.path.append方法

    -主要查看before_sys.path

    before_sys.path  
    ['E:\\GitRepository\\PythonModuleLearn\\sys_append_test', # 本机目录
    'E:\\GitRepository\\PythonModuleLearn', '  # 本工程目录
    ...]
    

    观察上述结果可知,模块下的learnTest没有加载到路径中,导致 Python 解释器在导入模块时搜索不到

    使用sys.path.append方法

  • 修改main.py
    在from导入模块之前动态加载到python解释器的路径中
  • # 将  目录添加到 sys.path
    sys.path.append(os.path.join("../learnTest"))
    print('after _  sys.path ',sys.path)
    print('*'*100)
    
  • 结果
  • ****************************************************************************************************
    before_sys.path  ['E:\\GitRepository\\PythonModuleLearn\\sys_append_test',
    'E:\\GitRepository\\PythonModuleLearn',
    ...]
    after_sys.path  ['E:\\GitRepository\\PythonModuleLearn\\sys_append_test', 
    'E:\\GitRepository\\PythonModuleLearn',
    ...
    '../learnTest']
    

    查看after_sys.path发现’…/learnTest’在Python 解释器搜索路径上,虽然文件标红,但是不影响运行

    作者:胜天半月子

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中sys.path.append方法用法详解

    发表回复