
Security News
Researcher Exposes Zero-Day Clickjacking Vulnerabilities in Major Password Managers
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
magicalimport
is a Python library that provides a flexible way to import modules and symbols directly from their physical file paths.
In some cases, you might want to import a Python module that is not part of a standard package or is not located in Python's sys.path
. For example:
Standard import mechanisms can be cumbersome in these scenarios. magicalimport
simplifies this by allowing you to import modules directly using their file paths.
A key feature of this library is its special handling of .py
files. The import_module
function can distinguish between a regular module path (like my_package.my_module
) and a direct file path (like ./path/to/my_module.py
), providing a unified interface for both.
You can install magicalimport
using pip:
pip install magicalimport
Let's say you have the following directory structure:
.
├── my_app
│ └── main.py
└── external_module
└── helper.py
And helper.py
contains:
# external_module/helper.py
def greet(name):
return f"Hello, {name}!"
From main.py
, you can import helper.py
like this:
# my_app/main.py
import os
from magicalimport import import_from_physical_path
# Assuming the script is run from the project root
helper_path = os.path.abspath("../external_module/helper.py")
helper = import_from_physical_path(helper_path)
print(helper.greet("world"))
# => Hello, world!
The import_module
function is a convenient wrapper that combines Python's standard importlib.import_module
with import_from_physical_path
. It automatically detects whether the provided path is a file path ending in .py
or a regular module path.
from magicalimport import import_module
# Imports a regular module
http_client = import_module("http.client")
print(http_client.HTTPConnection)
# Imports a .py file directly
helper = import_module("./external_module/helper.py")
print(helper.greet("again"))
This allows you to use the same function for both types of imports, simplifying your code.
You can also import a specific symbol (a class, function, or variable) from a module using import_symbol
. The symbol is specified using a string in the format path/to/module.py:symbol_name
.
from magicalimport import import_symbol
# Import the 'greet' function directly
greet_func = import_symbol("./external_module/helper.py:greet")
print(greet_func("from symbol"))
# => Hello, from symbol!
# You can also import from standard libraries
HTTPConnection = import_symbol("http.client:HTTPConnection")
print(HTTPConnection)
import_from_physical_path(path, as_=None, here=None, cwd=True)
path
(str): The relative or absolute path to the .py
file.as_
(str, optional): The name for the module in sys.modules
. If not provided, a name is generated from the file path.here
(str, optional): The base directory to resolve relative paths. If None
, it's determined from the caller's file (__file__
) or the current working directory.cwd
(bool): If True
and here
is None
, the current working directory is used as the base.import_module(module_path, here=None, cwd=True)
module_path
(str): A module path (e.g., my_package.my_module
) or a file path (e.g., ./my_module.py
).here
, cwd
: Same as in import_from_physical_path
.import_symbol(sym, here=None, sep=":")
sym
(str): The string representing the symbol to import, in the format <module_path>:<symbol_name>
.here
: Same as above.sep
(str): The separator between the module path and the symbol name.expose_all_members(module)
_
) from the given module into the caller's global scope, similar to from module import *
.expose_members(module, members)
members
from the given module
into the caller's global scope.This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
importing a module by physical file path
We found that magicalimport demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
Security News
Oxlint’s new preview brings type-aware linting powered by typescript-go, combining advanced TypeScript rules with native-speed performance.
Security News
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.