impfxxk

Import for Humans 💅🏻


Keywords
import, metapath
License
MIT
Install
pip install impfxxk==0.0.0.dev0

Documentation

impfxxk -- Import for Humans 💅🏻

This is to be a project on modifying sys.meta_path and making Python import statement as smooth as possible.

Inspiration

This idea was originally inspired from the Bro/Zeek language, where it uses @load statement what import doses in Python, except that the @load statement takes a relative path as its specifier. For example:

@load ./sample_local.bro
@load ../sample_parent.bro
@load ../sample/child.bro

with the project structure as following:

root
|-- foo
|   |-- this_script.bro
|   |-- sample_local.bro
|   |-- sample
|       |-- child.bro
|-- sample_parent.bro

which means, the @load statement is always relative to where it comes from, rather than a working directory or package root as in Python.

Thus, we intend to make the Python import statement works just like @load. This is the back story of the impfxxk project.

Expectation

When your project is as such:

root
|-- foo
|   |-- this_script.py
|   |-- sample_local.py
|   |-- sample
|       |-- child.py
|-- sample_parent.py

Normally, you will want to do:

import .sample_local
import .sample.child
import ..sample_parent

there can be some issues when the Python interpreter tries to figure out what is what when you are not running it at /root/foo/, where the relative paths are ought to be.

However, with impfxxk, you can simply add a statement (it's not decided yet) before your original import statements, just like __future__ does; and your code will work just as you wish.