Catalog PyPI
Back to packageRELEASE DETAILS

2.1.0

PyPI

aimport

A minimal library for smart Python imports with automatic path resolution

importmodulepathpythonsys.path
Published14 Aug 2025
Direct dependencies1
Transitive dependenciesNot calculated

README

Version 2.1.0 documentation

aimport

A minimal library for python: Adding support for smart imports with automatic path resolution.

Usage

import aimport

This automatically adds relevant directories to sys.path based on __aimport__ anchor files found in the directory tree.

Features

  • Smart path resolution: Automatically discovers project roots using __aimport__ anchor files
  • Anchor file content support: __aimport__ files can contain paths that will be used instead of the file location
  • Multiple paths support: NEW in v2.1.0: __aimport__ files can contain multiple paths, one per line
  • Fallback support: Falls back to __init__.py files when no __aimport__ files are found
  • Priority ordering: BREAKING CHANGE v2.0.0: New paths are now prepended to sys.path instead of appended, giving them higher import priority
  • Duplicate prevention: Avoids adding duplicate paths to sys.path
  • Automatic execution: Works immediately upon import

Breaking Changes in v2.0.0

⚠️ Import Priority Change: Starting with v2.0.0, discovered paths are prepended to sys.path instead of appended. This means modules in aimport-discovered directories will take precedence over existing sys.path entries. This change ensures that project-local modules are found before system or virtual environment modules.

New Features in v2.1.0

🎉 Multiple Paths Support: __aimport__ files can now contain multiple paths, one per line. This allows a single anchor file to reference multiple directories that should be added to the import path.

How It Works

  1. Anchor File Discovery: Searches upward from the starting directory for __aimport__ files
  2. Content Processing: If an __aimport__ file contains valid paths (one per line), those paths are used; otherwise the file's directory is used
  3. Multiple Path Support: Each line in an __aimport__ file is treated as a separate path - empty lines and whitespace-only lines are ignored
  4. Fallback Mechanism: If no __aimport__ files are found, falls back to searching for __init__.py files
  5. Path Priority: All discovered paths are added to the beginning of sys.path for higher import priority

Anchor File Format

__aimport__ files can contain:

  • Empty file: Uses the directory containing the file
  • Single path: Uses that path (absolute or relative)
  • Multiple paths: One path per line, uses all valid paths

Example __aimport__ file with multiple paths:

../lib
./vendor
/absolute/path/to/modules

Testing

The project includes comprehensive unit tests using pytest:

# Install development dependencies
uv sync --dev

# Run all tests
./test.sh

# Or run pytest directly
uv run pytest tests/ -v

Test Coverage

  • 23 comprehensive test cases
  • Full coverage of all functions and edge cases
  • Integration tests for complex directory structures
  • Behavior-focused testing (not implementation details)

Development

# Build distribution
python setup.py sdist

# Upload to PyPI
twine upload dist/*

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 1

Native requirements
1 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.8",
  "evaluation": "NOT_EVALUATED"
}
pytest<8.4.0,>=7.0.0; extra == "dev"runtime

Distribution files

2 collected
aimport-2.1.0-py3-none-any.whl

bdist_wheel · 4.46 KB · Python py3

Source file
aimport-2.1.0.tar.gz

sdist · 8.62 KB · Python source

Source file

Repository

PENDING
ralf12358/aimport

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 11:24 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:da88cbafda6fc9e355d9fc20150ef19c1f1891ba825afdfe3010bca5ab409c8b

Other collected versions

View all collected versions →