Python 在预提交挂钩中导入模块需要添加运行时路径

Python 在预提交挂钩中导入模块需要添加运行时路径,python,git,import,module,Python,Git,Import,Module,我想在.git/hooks/pre-commit中的预提交钩子中导入和测试模块。结构如下: set_prefix.py temp.py .git |----hooks |----pre-commit 文件temp.py为: import set\u前缀 调用python3 temp.py不会抛出错误 对于.git/hooks/pre-commit,我使用导入操作系统进行了确认;打印(os.getcwd())工作目录与set\u prefix.py相同 以下导入失败: i

我想在
.git/hooks/pre-commit
中的预提交钩子中导入和测试模块。结构如下:

set_prefix.py temp.py .git |----hooks |----pre-commit 文件
temp.py
为:

import set\u前缀
调用
python3 temp.py
不会抛出错误

对于
.git/hooks/pre-commit
,我使用
导入操作系统进行了确认;打印(os.getcwd())
工作目录与
set\u prefix.py
相同

以下导入失败:

  • import set\u prefix
    失败,出现
    modulenofound错误:没有名为“set\u prefix”的模块
  • 来自。导入集_前缀
    失败,原因是
    导入错误:尝试在没有已知父包的情况下进行相对导入
    (可能是因为)
从[this thread],()执行的一个导入需要在运行时添加到路径:

导入系统 sys.path.append(“.”)将当前目录添加到python模块路径。 从…起导入集合前缀 如果同一目录下的文件和预提交钩子在运行时都具有相同的当前目录,那么为什么导入在这两个目录下的行为会有所不同

更新
注释中提到的另一个解决方案是将目录转换成一个包含
\uuuu init\uuuuuuu.py
文件的包。但是我仍然不明白为什么导入可以从
temp.py
工作,而不是从pre-commit钩子工作,如果它们都从同一个目录运行。

@napuzba我阅读了教程。我仍然不明白为什么导入从
temp.py
工作,而不是从预提交钩子(如果它们都从同一目录运行)工作,我更新了问题。@napuzba我阅读了教程。我仍然不明白为什么导入是从
temp.py
进行的,而不是从pre-commit钩子(如果它们都从同一个目录运行)进行的,我更新了这个问题。