不同环境下运行脚本如何解决pythonpath问题
目录
问题背景:
方法一:在 Dockerfile 中设置 PYTHONPATH:
方法二: 本地脚本内动态地设置 sys.path,以确保 Python 程序在运行时能够找到项目中的模块
注意:
问题背景:
脚本在windows环境定义 然后因为要做CI/CD,在docker(liunx环境)执行的过程中遇到了下面这个问题
ModuleNotFoundError: No module named 'Modules'
首先我检查了项目是被完全复制到docker中的 验证了Modules文件夹包括下面的文件都是存在的 那就是pythonpath无法解析的问题; 针对这种工作环境不一致的情况 有下面两种解决办法:
方法一:在 Dockerfile 中设置 PYTHONPATH
:
假设你的项目根目录为web-test:
ENV PYTHONPATH="/web-test"
方法二: 本地脚本内动态地设置 sys.path
,以确保 Python 程序在运行时能够找到项目中的模块
将下面这段代码放到你的主入口脚本内(例如 test_main.py)就能解决无法解析pythonpath得问题
project_root = os.path.dirname(os.path.abspath(__file__))
# 获取当前文件的绝对路径。这是指正在执行的 Python 文件的路径
sys.path.insert(0, project_root)
# 将项目根目录插入到 sys.path 的开头。这样做确保 Python 在导入模块时优先搜索项目的根目录,使得项目及其中的模块都能被正确找到和导入。
print(sys.path)
注意:
1、上面两种方法的前提是你确保docker中你复制了所有你需要的项目目录以及文件,可以借助ls命令查看;
2、其次是结合上面的方法,在脚本内导入对应自定义的方法时,选用相对路径的导入方法