Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/roman-neuhauser/py-impala
Import packages and modules from arbitrary directories and files
https://github.com/roman-neuhauser/py-impala
Last synced: 13 days ago
JSON representation
Import packages and modules from arbitrary directories and files
- Host: GitHub
- URL: https://github.com/roman-neuhauser/py-impala
- Owner: roman-neuhauser
- License: mit
- Archived: true
- Created: 2013-10-09T12:14:29.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2014-10-15T14:17:06.000Z (about 10 years ago)
- Last Synced: 2024-10-28T23:36:06.339Z (16 days ago)
- Language: Python
- Size: 219 KB
- Stars: 19
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
.. vim: ft=rst sts=2 sw=2 tw=70
.. default-role:: literal.. This file is marked up using reStructuredText.
Lines beginning with ".." are reST directives.
"foo_" or "`foo bar`_" is a link, defined at ".. _foo" or
".. _foo bar".
"::" introduces a literal block (usually some form of code).
"`foo`" is some kind of identifier.
Suspicious backslashes in the text ("`std::string`\s") are required
for reST to recognize the preceding character as syntax.======================================================================
py-impala
======================================================================
----------------------------------------------------------------------
Import packages and modules from arbitrary directories and files
----------------------------------------------------------------------:Author: Roman Neuhauser
:Contact: [email protected]
:Copyright: This document is in the public domain.Overview
========Impala is a PEP302_ protocol (`sys.meta_path` hook for the `import`
statement) implementation allowing the user to import packages and
modules from arbitrarily named directories and files... _PEP302: http://www.python.org/dev/peps/pep-0302/
Motivation
==========* Comfort and freedom in development
* Installed interface available without installationLet's say I'm developing a Python package called `pyoneer`. I want to
lay the source code out like this: ::README.txt
src/
__init__.py
some.py
more.py
tests/
...The question then is, how do I `import pyoneer` in the test files
(`/tests/...`) and have it load `/src/__init__.py`?
The default `import` mechanism requires packages to live in eponymous
directories.What's the fuss about, you ask? I should simply rename the `src`
directory to `pyoneer` or maybe `src/pyoneer`, no?Indeed, this would be tolerable, at least with top-level packages.
However, if I'm working on something that will be available as
`foo.bar.baz` after installation, I certainly don't want to wade
through the desolate `src/foo/bar` to get to the source code.Maybe I could `import src` in the tests instead? Well, tests are
a form of documentation, and doubly so with `doctest`_. "Proper"
documentation (README.txt, etc) can also contain snippets which
should be verifiable without the CUT being installed.*Impala* to the rescue!
::
from os.path import abspath, dirname
import impalaroot = abspath(dirname(__file__))
impala.register(dict(
pyoneer = '%s/src' % root
))import pyoneer
.. _doctest: http://docs.python.org/2/library/doctest.html
Description
===========`impala.register(aliases)`
++++++++++++++++++++++++++`aliases` is a `dict` mapping from fully-qualified module/package
names to paths to load from. To import a package `p` from path
`/a/b/c`, `aliases` must include the key `p` with associated value
`/a/b/c`, and `/a/b/c/__init__.py` must be a valid package entry
point. To import a module `m` from path `/f/g/h.py`, `aliases` must
include the key `m` with associated value `/f/g/h.py`.Example: ::
from os.path import abspath, dirname
import impalar = dirname(abspath(__file__))
impala.register({
'p': '%s/a/b/c' % r,
'p.q': '%s/f/g/h' % r,
'p.q.m': '%s/k.py' % r,
})import p
import p.q
import p.q.mLicense
=======*py-impala* is distributed under the `MIT license`_. See `LICENSE`
for details... _MIT license: http://opensource.org/licenses/MIT
Installation
============Using `pip` from PyPI_, the Python Package Index: ::
pip install impala
From a checkout_ or extracted tarball: ::
python setup.py install
.. _PyPI: http://pypi.python.org/pypi
.. _checkout: https://github.com/roman-neuhauser/py-impala.gitDevelopment
===========Source code and issue tracker are at Github:
https://github.com/roman-neuhauser/py-impala