Python学习笔记
公众号搜索--树莓派OpenCV学舍
绝对路径VS 相对路径
今天笔者在研究某个品牌工业相机的SDK,在尝试着运行一段代码时,系统突然显示报错了。具体看下图:
明明是一段示例程序,怎么会报错呢?仔细看上图的提示信息,是因为程序中找不到MvCameraControl.dll(或者相关依赖)。于是我打开SDK Runtime,发现是有这个动态链接库滴。
既然手动找得到这个文件,那就说明只是程序找不到罢了,问题不大。继续找到程序中提示错误的代码段,见下图:
从上图中可以看出,此文件是没有列出绝对路径的。如果这个动态链接库在程序所处的文件夹中,系统是不会报错的;可是从前一张截图可以看出,并非如此。所以此处,我们需要给出完整的路径才可。代码修改如下,问题解决。
Python里的路径分相对路径和绝对路径。
绝对路径
绝对路径好理解,我们以Cat
.py
来举例子。
这就是它的绝对路径:"E:/Python/Lib/site_packages/
Cat
.py"
相对路径
相对路径呢,就是相对于Cat.py的路径。下面来看几个例子:
"
Dog
1.py"
,对应: "E:/Python/Lib/site_packages/
Dog
1.py"
跟Cat.py在同一个文件夹里。
"set/
Dog
2.py"
,对应: "E:/Python/Lib/site_packages/set/
Dog
2.py"
跟Cat.py在同一个文件夹里的set文件夹里的文件。
"./
Dog
3.py"
,对应:"E:/Python/Lib/site_packages/
Dog
3.py"
跟Cat.py在同一个文件夹里。
"../
Dog
4.py"
,对应: "E:/Python/Lib/
Dog
4.py"
Cat.py上一级文件夹里的文件。
也就是说除了第四个是上一级文件夹,前三个都是当前文件夹。
通过总结可以发现,当你要导入的文件在和你的当前文件在同一个目录时,你直接导入这个文件名就好了。
当你要导入的文件或者目录不和你的当前文件同目录时,你需要跳到这个你要导入文件的父级目录,然后一级一级的用点号连接走过的目录或者文件,然后就可以了。至于要怎么跳到这个这个父级目录。比较通用的就是,将父级目录加入系统路径,然后用点号一级一级的寻找,直到到达你要导入的模块。
例如:有一个文件夹/home/a, 里面有个模块叫b.py, 我怎么把他import到程序里?
import sys;
sys.path.append(“/home/a/”)
import b
接下来说一说from __future__ import absolute_import
这句代码的作用是加入 绝对引用这个特性。
假设你的工程目录为:
.
|-- __init__.py
|-- main.py
|-- xxx.py
|-- config
在工程文件目录 的main.py
中写 import xxx
会引用当前的文件中的 xxx.py
,但是你想忽略当前文件夹的 xxx.py
而引用系统中的 xxx.py
,就需要在前面加 from __future__ import absolute_import
,这时候引用工程文件的 xxx.py
就需要 from pro import xxx
当然,最好就不要有相同名字的文件存在