I want to import and test a module in a pre-commit hook in .git/hooks/pre-commit
. The structure is:
set_prefix.py temp.py .git |----hooks |----pre-commit
The file set_prefix.py
could simply be:
def main():
pass
The file temp.py
is:
import set_prefix
Calling python3 temp.py
throws no error.
For .git/hooks/pre-commit
, I confirmed with import os; print(os.getcwd())
that the working directory is the same as set_prefix.py
.
The following imports fail:
import set_prefix
fails withModuleNotFoundError: No module named 'set_prefix'
from . import set_prefix
fails withImportError: attempted relative import with no known parent package
(probably because it's not part of a package).
One import that works, from [this thread],(How to import a Python class that is in a directory above?) requires adding to the path at runtime:
import sys
sys.path.append(".") # Adds current directory to python modules path.
from . import set_prefix
Why does importing behave differently between a file on the same directory and the pre-commit hook if they both have the same current directory at runtime?
Update
Another solution, mentioned in the comments, is to turn the directory into a package with an __init__.py
file. But I still don't understand why the import works from temp.py
and not from the pre-commit hook if they both run from the same directory.