python基础 -- 工作目录
案例目录结构
1 | # 目录结构示意图 |
sys.path 就会进入到task 目录中,这样main.py 想要 import main 目录外的模块就会出问题,例如import util.xx_util 就会出现 ModuleNotFoundError, 就算本目录下的文件 import task.xxx 也会出现错误,因为sys.path 不对,在task目录下就没有那些文件。
处理方案
这种情况怎么办呢?我看到过几种做法:
方案一
sys.path.append(‘..’) 将上一级目录 append 进来
非常不推荐这种做法,动态改变sys.path会使静态分析工具失效,例如pycharm 等IDE的代码提示。这在大型项目中会极大降低代码的可阅读性、增加开发难度
这是软件开发的灾难
(补充:通过环境变量PYTHONPATH 指定目录本质上也是sys.path 上append)
方案二
使用相对路径import .task.xxx ,from .. import util
同样非常不推荐这样做,特别是我们只是想临时debug一下子模块中的包的时候,修改好后还需要改回去,十分繁琐,还有可能带来不一致的问题
这是软件开发的灾难
方案三[ 推荐做法 ]
使用python -m task.main 执行程序
此时sys.path就在执行这行代码时所在的目录,也就是working directory, 而不会进入main所在的位置,这是十分简单的解决方法,不会带来新的问题
