IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 关于python import的sys.path路径问题 -> 正文阅读

[Python知识库]关于python import的sys.path路径问题

关于python import的sys.path路径问题

sys.path

先说一下 sys.path 这个变量,该变量需要导入 sys 官方库方可使用,它是一个列表,是当前 python 文件 import 库时会逐个搜索列表中的路径。

初始化

sys.path 从这些位置初始化:

  • 包含输入脚本的目录(或当前目录,当没有指定文件时)
  • PYTHONPATH(目录名列表,与 shell 变量 PATH 语法相同)
  • 与安装相关的默认值(比如当前conda环境的路径)

添加

为了解决上述问题,需要添加模块搜索路径,可以使用以下几种方式:

  • 动态增加路径

    临时生效,对于不经常使用的模块,这通常是最好的方式,因为不必用所有次要模块的路径来污染 PYTHONPATH。

    import sys
    sys.path.append('/home/song/mylib')
    
  • 修改 PYTHONPATH 变量

    永久生效,对于在许多程序中都使用的模块,可以采用这种方式。这将改变所有 Python 应用的搜索路径,因为启动 Python 时,它会读取这个变量,甚至不同版本的 Python 都会受影响。

    export PYTHONPATH=$PYTHONPATH:/home/song/mylib
    

    直接命令行执行则当前终端生效,或添加到 ~/.bashrc 中并 source 永久生效。

  • 增加 .pth 文件

    永久生效,这是最简单的、也是推荐的方式。Python 在遍历已知的库文件目录过程中,如果遇到 .pth 文件,便会将其中的路径加入到 sys.path 中,于是 .pth 中所指定的路径就可以被 Python 运行环境找到了。

    /usr/local/lib/python3.5/site-packages 下添加一个扩展名为 .pth 的配置文件(例如:extras.pth),内容为要添加的路径:/home/song/mylib

例子

考虑这样一个目录结构,他基本涵盖我们 python 文件 import 自定义库时的情况:

.
├── lib1.py
├── t1
│?? ├── lib0.py
│?? └── test.py
└── t2
    └── lib2.py

我们的 test.py 想要 import lib0、1、2.py 三个库文件,并且,我们要考虑在 test.py 的当前目录运行(python test.py) 或其父目录运行(python t1/test.py)时,分别应该怎么做呢?

导入lib0

当前目录运行

首先要明确,我们的 python 程序在考虑相对路径时,考虑的是文件所在目录的相对路径,而不是工作目录的路径。所以我们直接导入即可:

import lib0

父目录运行

刚才提到这不受到工作目录影响,所以同上。

导入lib1

当前目录运行

我们都知道,要导入上级目录的文件,可以通过在 sys.path 中追加上级目录 .. 来实现。另一个关键点就在这里,sys.path 中的相对路径是相对工作目录而言的,而不是相对文件所在目录。因此我们在当前目录运行时:

import sys
sys.append('..')

import lib1

运行:python test.py

父目录运行

注意这里就有所不同了,因为 sys.path 是相对工作目录而言的,我们在父目录运行程序,工作目录变化了,因此应该:

import sys
sys.append('.')

import lib1

导入lib2

实际导入 lib2 就与导入 lib1 类似,只是多一级即可

当前目录运行

import sys
sys.append('..')

import t2.lib1

父目录运行

import sys
sys.append('.')

import t2.lib1

Ref:

Python 模块搜索路径

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:50:39  更:2022-04-14 23:54:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:56:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码