Import with dot name in python

import, python

Solution

The situation is tricky, because dots mean sub-package structure to Python. I recommend simply renaming your modules instead, if that's an option!

However, importing a source file directly is still possible:

Python 2

Using `imp`:

import imp
my_module = imp.load_source("my_module", ".test.py")

Python 3

The imp module was deprecated in favor of `importlib` and has been removed in Python 3.12. Here is a Python 3 replacement:

import importlib.util 
    
spec = importlib.util.spec_from_file_location(
    name="my_module",  # note that ".test" is not a valid module name
    location="/path/to/.test.py",
)
my_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(my_module)

Problem

How can I import a dotted name file in python? I don't mean a relative path, but a filename starting or containing a dot `"."` For example: `'.test.py'` is the filename. `import .test` will search for a `test` package with a `py` module in a parent package.

Original source