Skip to main content

Import top-level modules from a directory not on `sys.path`

Project description

qualify

A Python package that allows you to import top-level modules which reside in a directory that is not on sys.path.

Rationale

This is for scenarios where you have a collection of top-level modules but you want to keep their parent directory off sys.path.

Example:

You have a directory d that contains two top-level modules with the rather generic names main and utils. You want to import these modules but also keep their parent directory d off sys.path to keep the global namespace of top-level modules from being polluted with these generic names.

However, main refers to utils by its top-level name. So if you just run import d.main, you’d get an error:

ModuleNotFoundError: No module named 'utils'

Running enable_submodules('d') will allow you to import d.main successfully.

Running import d.main will add the following modules to sys.modules:

  • d
  • d.main
  • d.utils

Note that unlike similar implementations, the python_qualify package does not touch sys.path. This helps prevent unwanted modules from being exposed to the global namespace.

Installation

Installing from PyPI

To install qualify from PyPI, open a shell and run:

pip install python-qualify

If that doesn’t work, try:

python3 -m pip install python-qualify

Installing from the AUR

Direct your favorite AUR helper to the python-qualify package.

Usage

See USAGE.md or man python_qualify for details.

Contributing to qualify

See CONTRIBUTING.md.

License

Copyright (c) 2024 Claudia Pellegrino

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. For a copy of the License, see LICENSE.

Configuration

Paste into __init__.py of the affected package:

import python_qualify
python_qualify.enable_submodules(__name__)

Description

A Python package that allows you to import top-level modules which reside in a directory that is not on sys.path.

This is for scenarios where you have a collection of top-level modules but you want to keep their parent directory off sys.path.

Example

You have a directory d that contains two top-level modules with the rather generic names main and utils. You want to import these modules but also keep their parent directory d off sys.path to keep the global namespace of top-level modules from being polluted with these generic names.

However, main refers to utils by its top-level name. So if you just run import d.main, you’d get an error:

ModuleNotFoundError: No module named 'utils'

Running enable_submodules('d') will allow you to import d.main successfully.

Notes

Running import d.main will add the following modules to sys.modules:

  • d
  • d.main
  • d.utils

Note that unlike similar implementations, the python_qualify package does not touch sys.path. This helps prevent unwanted modules from being exposed to the global namespace.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_qualify-0.1.1.tar.gz (9.7 kB view hashes)

Uploaded Source

Built Distribution

python_qualify-0.1.1-py3-none-any.whl (11.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page