importing a module by physical file path
Project description
magicalimport
magicalimport is a Python library that provides a flexible way to import modules and symbols directly from their physical file paths.
Motivation
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:
- Loading a plugin from a user-specified path.
- Using a Python script as a configuration file.
- Dynamically loading modules in a script or a tool.
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.
Installation
You can install magicalimport using pip:
pip install magicalimport
Basic Usage
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!
Special Handling of .py Files
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.
Importing Symbols
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)
API Reference
import_from_physical_path(path, as_=None, here=None, cwd=True)
path(str): The relative or absolute path to the.pyfile.as_(str, optional): The name for the module insys.modules. If not provided, a name is generated from the file path.here(str, optional): The base directory to resolve relative paths. IfNone, it's determined from the caller's file (__file__) or the current working directory.cwd(bool): IfTrueandhereisNone, 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 inimport_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)
- Imports all members (that don't start with
_) from the given module into the caller's global scope, similar tofrom module import *.
expose_members(module, members)
- Imports specified
membersfrom the givenmoduleinto the caller's global scope.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file magicalimport-0.9.2.tar.gz.
File metadata
- Download URL: magicalimport-0.9.2.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcdc657196db955684d65e0a40b88c036f0bca4ee8a48100e4fe2ad78252db80
|
|
| MD5 |
9fbc7b7c798d140c4d5d34c9ad1f820f
|
|
| BLAKE2b-256 |
b8108e4ff6e0829283de50458a3e4a137fe218777627077e641b32d2ba74f765
|
File details
Details for the file magicalimport-0.9.2-py3-none-any.whl.
File metadata
- Download URL: magicalimport-0.9.2-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08a326ece05932caaf9be8eae865a42e85afda1c2642411063ab816a8872f0b2
|
|
| MD5 |
db8278a9d0cd1e2c8ac4ce4129264570
|
|
| BLAKE2b-256 |
f805a2a8f0ae1cbcfe6cece7edcc2b48d9e14023c797ea4ae8581eae85d1540a
|