2021的第一天,大家好,新年快乐!
新年了,学习不能停!还是继续讲LINUX下PYTHON的一个坑。
通过文件夹管理一个python项目的时候,本来你是想通过文件夹让各个文件更加有序的,但是最后在实际的linux中调用程序,import各个库的时候,你就会发现有很多的坑。
自己在这边记录一下,防止以后继续掉坑。
针对库文件的引用,直接用下面的方法操作。
import sys
sys.path.append('xxx')
引入sys库,然后在sys路径里面增加你需要增加库的绝对路径。
方便,简单,直接就能用,比你用各种 . 或者 .. 来做相对路径再引入方便多了!
针对程序中调用的config,或者log,或者其他文件。
调用此类文件的时候,和你在哪一级的路径下面执行主程序有关系!
比如我在 /var/project/ 路径下,有一个 main.py 的文件,main.py 的文件用 import 了一个项目子路径module文件夹下面的一个sql库(库的绝对路径为/var/project/module/sql.py),库里面又调用了一个module文件夹的下面的sql_base.config的文件。
这个时候,虽然你的main.py文件中,已经按照我上面的要求,import了sys,并且已经将/var/project/module/的路径append了,这个时候,你引入sql这个库是没问题的了,但是你还是会发生报错,sql库在调用sql_base这个文件的时候报错,因为如果你在程序中调用的时候,没有写路径的话,他默认就是当成你执行程序的时候路径下面,不管你执行的是另外的主程序,还是当前的程序。
这个时候,和上面库一样的情况,还是建议在调用配置文件的时候,直接写全绝对路径,这样就没问题了。
这个时候又有人问了,那我开发机是windows,生产机是linux,绝对路径不同会导致我在测试和执行程序的时候很麻烦,咋办?
网上查到了一个
work_dir = os.path.dirname(os.path.abspath(__file__))
CONF_FILE = os.path.join(work_dir,'server.conf')
在调用conf的文件中,加入这两段代码,先用work_dir获取到程序实际执行时的绝对路径,再用join拼接出conf_file的绝对路径。
综上,分析了两种比较常用的场景,我们的方式还是尽量简单偷懒,直接用绝对路径来搞定,相比较相对路径这个坑,这个方法是最简单方便的。