# importpy
Dynamic, lazy-style support importer for Python. It lets you import individual .py files directly at the module level, while still replicating standard package semantics (including automatic \_\_init\_\_.py execution) and resolving relative-import issues in nested directories—no changes to sys.path required. Use it to override Python’s built-in import mechanism only when you need that extra flexibility.
## Use Relative Path
```
root package
│
├─── __init__.py
│
├─── packageA/
│ │
│ ├─── __init__.py
│ ├─── moduleA1.py
│ └─── moduleA2.py
│
├─── packageB/
│ │
│ ├───── packageC/
│ │ │
│ │ ├─── __init__.py
│ │ ├─── moduleC1.py
│ │ └─── moduleC2.py
│ │
│ ├─── __init__.py
│ ├─── moduleB1.py
│ └─── moduleB2.py
```
Now you can import regardless of path.
For example, you can import moduleB1 of packageB from moduleA1 of packageA as follows.
```
moduleA1.py of packageA
moduleB1 = importpy('../packageB/moduleB1.py')
```
likewise, can import moduleA2 of packageA from moduleC2 of packageC as follows.
Of course, absolute paths are also possible.
```
moduleC2.py of packageC
moduleA1 = importpy('../../packageA/moduleA2.py')
or
moduleA1 = importpy('c:/program files/python/project/test/package_root/packageA/moduleA2.py')
```
```
moduleC2.py of packageC
member1, member2, classC = importpy('../../packageA/moduleA2.py', 'member1', 'member2', 'classC')
```
I came up with this approach because I usually put unit tests in '\_\_main\_\_' of each module.
Additionally, modules imported in this way can be executed independently regardless of the package structure. That's it....
## Use URL Path
import Remote Package
```python
remote_package = importpy('file://example.com/remote_package')
remote_package = importpy('http://example.com/remote_package')
remote_package = importpy('https://example.com/remote_package')
remote_package = importpy('ftp://user:pass@example.com/remote_package')
import remote_package # You can use it as a general import.
remote_package.__version__
```
import Remote Module
```python
remote_module = importpy('file://example.com/remote_module.py')
remote_module = importpy('http://example.com/remote_module.py')
remote_module = importpy('https://example.com/remote_module.py')
remote_module = importpy('ftp://user:pass@example.com/remote_module.py')
```
import Remote wheel/sdist
```python
pip_package = importpy('https://files.pythonhosted.org/packages/29/a2/d40fb2460e883eca5199c62cfc2463fd261f760556ae6290f88488c362c0/pip-25.1.1-py3-none-any.whl')
pip_package = importpy('https://files.pythonhosted.org/packages/59/de/241caa0ca606f2ec5fe0c1f4261b0465df78d786a38da693864a116c37f4/pip-25.1.1.tar.gz')
import pip # You can use it as a general import.
pip.__version__
```
import github direct
```python
pip_package = importpy('https://github.com/pypa/pip/tree/main/src/pip')
import pip # You can use it as a general import.
pip.__version__
```
import module/function with arguments
```python
a, b, c = importpy('file://example.com/remote_package', 'a', 'b', 'c') # member module a,b,c
a, b, c = importpy('file://example.com/remote_module.py', 'a', 'b', 'c') # member function a,b,c
```
import using custom loader
```python
remote_package = importpy('userdefined://abc/efg/package', CustomMetaFinder())
CustomMetaFinder(AbstractMetaFinder) # See protocol.py for the format of AbstractMetaFinder.
.
.
.
```
# History
2025/07/11 v0.1.0 : initial released
2025/07/13 v0.1.1 : some minor bug fix, support pytest
2025/07/17 v0.1.2 : some minor bug fix, support remote url
# Installation (pip install)
```python
python -m pip install importpy
or
python -m pip install git+https://github.com/waveware4ai/importpy
```
# Requirements
```python
Python 3.8+
No external dependencies
```
# Features
* Basic Features
+ importing modules using relative paths
+ importing modules using absolute paths
+ importing package using url paths
+ importing modules using url paths
+ importing member functions from modules
+ support lazy-import avoid circular importing
+ support to import functions from module, like from x import y ...
* Import Logic
+ caller location is traced via inspect
+ relative path is resolved automatically
+ module name is derived from the file path (e.g. utils/web.py → utils.web)
+ result is cached in-memory
# Examples
## Relative Path
```python
from importpy import loader as importpy
# simple relative import
aaaa = importpy('aaaa.py') # same to below
aaaa = importpy('./aaaa.py')
# wildcard import
bbbb = importpy('../util/test/bbbb.py') # same to below
bbbb = importpy('../util/test/bbbb.py', '*')
# absolute path
cccc = importpy('/home/user/project/cccc.py')
cccc = importpy('C:/program files/python/project/cccc.py')
# turn on/off lazy-loading
lazy_on = importpy('lazy_on.py', use_lazy = True) # default action
lazyoff = importpy('lazyoff.py', use_lazy = False)
# import specific attributes
a_member_of_x, b_member_of_x = importpy('./pathto/x.py', 'a_member_of_x', 'b_member_of_x')
module_x, a_member_of_x, b_member_of_x = importpy('./pathto/x.py', '*', 'a_member_of_x', 'b_member_of_x') # wildcard include module x self
# class import
ClassA, ClassB = importpy('./pathto/impl.py', 'ClassA', 'ClassB')
```
The following perform the same role:
```python
import aaaa
aaaa = importpy('aaaa.py')
```
```python
from x import a_member_of_x, b_member_of_x
a_member_of_x, b_member_of_x = importpy('x.py', 'a_member_of_x', 'b_member_of_x')
```
```python
from impl import ClassA, ClassB, funcX
ClassA, ClassB, funcX = importpy('impl.py', 'ClassA', 'ClassB', 'funcX')
```
## URL Path
To do this example, you no longer need pip installed locally. Move it somewhere else or delete it.
```python
def import_pip_test(url: str, custom_finder=None, uselazy:bool = True, isolate=True):
from importpy import loader as importpy
pip = importpy(url, custom_finder=custom_finder, uselazy=uselazy, isolate=isolate)
import pip as PIP # must be the same instance.
assert id(pip) == id(PIP)
print(f"---------- pip-{pip.__version__} from [{pip.__file__}].main(['freeze'])")
pip.main(["freeze"])
print(f"---------- pip-{pip.__version__} from [{pip.__file__}].main(['list'])")
pip.main(["list"])
```
pypi sdist/wheel remote access test
```python
import_pip_test("https://files.pythonhosted.org/packages/29/a2/d40fb2460e883eca5199c62cfc2463fd261f760556ae6290f88488c362c0/pip-25.1.1-py3-none-any.whl")
import_pip_test("https://files.pythonhosted.org/packages/59/de/241caa0ca606f2ec5fe0c1f4261b0465df78d786a38da693864a116c37f4/pip-25.1.1.tar.gz")
```
pypi sdist/wheel local access test using file://
```python
import_pip_test("file://[TEST_DIR]/pip-25.1.1-py3-none-any.whl")
import_pip_test("file://[TEST_DIR]/pip-25.1.1.tar.gz")
import_pip_test("file://[TEST_DIR]/pip-25.1.1-py3-none-any/pip") # extract to dir
```
pypi sdist/wheel remote access using ftp://
```python
import_pip_test("ftp://user:pass@localhost/whl/pip-25.1.1-py3-none-any.whl")
import_pip_test("ftp://user:pass@localhost/whl/pip-25.1.1.tar.gz")
import_pip_test("ftp://user:pass@localhost/whl/pip") # extract to dir
```
pypi sdist/wheel remote access using http/https://
```python
import_pip_test("http://localhost:1080/whl/pip-25.1.1-py3-none-any.whl")
import_pip_test("http://localhost:1080/whl/pip-25.1.1.tar.gz")
import_pip_test("http://localhost:1080/whl/pip") # extract to dir
import_pip_test("https://localhost:10443/whl/pip-25.1.1-py3-none-any.whl")
import_pip_test("https://localhost:10443/whl/pip-25.1.1.tar.gz")
import_pip_test("https://localhost:10443/whl/pip") # extract to dir
```
github direct access using https://
```python
import_pip_test("http://github.com/pypa/pip/tree/main/src/pip")
```
# Testing
```
python -m pytest -v ./importpy/tests
collected 30 items
importpy/tests/test_importpy.py::test_importpy_basic_module PASSED [ 3%]
importpy/tests/test_importpy.py::test_importpy_basic_attr_single PASSED [ 6%]
importpy/tests/test_importpy.py::test_importpy_basic_attr_multiple PASSED [ 10%]
importpy/tests/test_importpy.py::test_importpy_basic_star_attribute PASSED [ 13%]
importpy/tests/test_importpy.py::test_importpy_basic_star_includes_expected_attributes PASSED [ 16%]
importpy/tests/test_importpy.py::test_importpy_basic_attr_missing PASSED [ 20%]
importpy/tests/test_importpy.py::test_importpy_basic_args_invalid PASSED [ 23%]
importpy/tests/test_importpy.py::test_importpy_basic_absolute_path_loading PASSED [ 26%]
importpy/tests/test_importpy.py::test_importpy_basic_invalid_file_path PASSED [ 30%]
importpy/tests/test_importpy.py::test_importpy_basic_caching_behavior PASSED [ 33%]
importpy/tests/test_importpy.py::test_importpy_basic_lazy_loader_flag PASSED [ 36%]
importpy/tests/test_importpy.py::test_importpy_basic_occur_cyclic_importing PASSED [ 40%]
importpy/tests/test_importpy.py::test_importpy_basic_avoid_cyclic_importing PASSED [ 43%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_file_import_as_module PASSED [ 46%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_file_import_as_package PASSED [ 50%]
importpy/tests/test_importpy.py::test_importpy_protocol_validation_header PASSED [ 53%]
importpy/tests/test_importpy.py::test_importpy_protocol_validation_file_path PASSED [ 56%]
importpy/tests/test_importpy.py::test_importpy_protocol_validation_http_path PASSED [ 60%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_wheel PASSED [ 63%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_targz PASSED [ 66%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_http PASSED [ 70%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_github PASSED [ 73%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_ftp PASSED [ 76%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_sftp PASSED [ 80%]
importpy/tests/test_importpy.py::test_importpy_protocol_remote_custom_loader PASSED [ 83%]
importpy/tests/test_importpy.py::test_importpy_protocol_local_wheel PASSED [ 86%]
importpy/tests/test_importpy.py::test_importpy_protocol_local_file PASSED [ 90%]
importpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test1 PASSED [ 93%]
importpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test2 PASSED [ 96%]
importpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test3 PASSED [100%]
============================================= 30 passed in 9.15s ==============================================
```
Raw data
{
"_id": null,
"home_page": "https://github.com/waveware4ai/importpy",
"name": "importpy",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "import, package, dynamic, lazy, module",
"author": "14mhz",
"author_email": "14mhz <14mhz@hanmail.net>",
"download_url": "https://files.pythonhosted.org/packages/b5/df/cebd5e2c10180b7bf0103e02db114bc6c70a26fc6f5f855e0623e159c262/importpy-0.1.2.tar.gz",
"platform": null,
"description": "# importpy\r\nDynamic, lazy-style support importer for Python. It lets you import individual .py files directly at the module level, while still replicating standard package semantics (including automatic \\_\\_init\\_\\_.py execution) and resolving relative-import issues in nested directories\u2014no changes to sys.path required. Use it to override Python\u2019s built-in import mechanism only when you need that extra flexibility.\r\n\r\n## Use Relative Path\r\n```\r\nroot package\r\n \u2502\r\n \u251c\u2500\u2500\u2500 __init__.py\r\n \u2502\r\n \u251c\u2500\u2500\u2500 packageA/\r\n \u2502 \u2502\r\n \u2502 \u251c\u2500\u2500\u2500 __init__.py\r\n \u2502 \u251c\u2500\u2500\u2500 moduleA1.py\r\n \u2502 \u2514\u2500\u2500\u2500 moduleA2.py\r\n \u2502 \r\n \u251c\u2500\u2500\u2500 packageB/\r\n \u2502 \u2502\r\n \u2502 \u251c\u2500\u2500\u2500\u2500\u2500 packageC/\r\n \u2502 \u2502 \u2502\r\n \u2502 \u2502 \u251c\u2500\u2500\u2500 __init__.py\r\n \u2502 \u2502 \u251c\u2500\u2500\u2500 moduleC1.py\r\n \u2502 \u2502 \u2514\u2500\u2500\u2500 moduleC2.py\r\n \u2502 \u2502\r\n \u2502 \u251c\u2500\u2500\u2500 __init__.py\r\n \u2502 \u251c\u2500\u2500\u2500 moduleB1.py\r\n \u2502 \u2514\u2500\u2500\u2500 moduleB2.py\r\n```\r\nNow you can import regardless of path. \r\nFor example, you can import moduleB1 of packageB from moduleA1 of packageA as follows. \r\n```\r\nmoduleA1.py of packageA\r\nmoduleB1 = importpy('../packageB/moduleB1.py')\r\n```\r\nlikewise, can import moduleA2 of packageA from moduleC2 of packageC as follows. \r\nOf course, absolute paths are also possible. \r\n```\r\nmoduleC2.py of packageC\r\nmoduleA1 = importpy('../../packageA/moduleA2.py')\r\nor\r\nmoduleA1 = importpy('c:/program files/python/project/test/package_root/packageA/moduleA2.py')\r\n```\r\n```\r\nmoduleC2.py of packageC\r\nmember1, member2, classC = importpy('../../packageA/moduleA2.py', 'member1', 'member2', 'classC')\r\n```\r\nI came up with this approach because I usually put unit tests in '\\_\\_main\\_\\_' of each module. \r\nAdditionally, modules imported in this way can be executed independently regardless of the package structure. That's it.... \r\n\r\n## Use URL Path\r\nimport Remote Package\r\n```python\r\nremote_package = importpy('file://example.com/remote_package')\r\nremote_package = importpy('http://example.com/remote_package')\r\nremote_package = importpy('https://example.com/remote_package')\r\nremote_package = importpy('ftp://user:pass@example.com/remote_package')\r\nimport remote_package # You can use it as a general import.\r\nremote_package.__version__\r\n```\r\nimport Remote Module\r\n```python\r\nremote_module = importpy('file://example.com/remote_module.py')\r\nremote_module = importpy('http://example.com/remote_module.py')\r\nremote_module = importpy('https://example.com/remote_module.py')\r\nremote_module = importpy('ftp://user:pass@example.com/remote_module.py')\r\n```\r\nimport Remote wheel/sdist\r\n```python\r\npip_package = importpy('https://files.pythonhosted.org/packages/29/a2/d40fb2460e883eca5199c62cfc2463fd261f760556ae6290f88488c362c0/pip-25.1.1-py3-none-any.whl')\r\npip_package = importpy('https://files.pythonhosted.org/packages/59/de/241caa0ca606f2ec5fe0c1f4261b0465df78d786a38da693864a116c37f4/pip-25.1.1.tar.gz')\r\nimport pip # You can use it as a general import.\r\npip.__version__\r\n```\r\nimport github direct\r\n```python\r\npip_package = importpy('https://github.com/pypa/pip/tree/main/src/pip')\r\nimport pip # You can use it as a general import.\r\npip.__version__\r\n```\r\nimport module/function with arguments\r\n```python\r\na, b, c = importpy('file://example.com/remote_package', 'a', 'b', 'c') # member module a,b,c\r\na, b, c = importpy('file://example.com/remote_module.py', 'a', 'b', 'c') # member function a,b,c\r\n```\r\nimport using custom loader\r\n```python\r\nremote_package = importpy('userdefined://abc/efg/package', CustomMetaFinder())\r\nCustomMetaFinder(AbstractMetaFinder) # See protocol.py for the format of AbstractMetaFinder.\r\n .\r\n .\r\n .\r\n\r\n```\r\n\r\n# History\r\n2025/07/11 v0.1.0 : initial released \r\n2025/07/13 v0.1.1 : some minor bug fix, support pytest \r\n2025/07/17 v0.1.2 : some minor bug fix, support remote url \r\n\r\n# Installation (pip install)\r\n```python\r\npython -m pip install importpy\r\nor\r\npython -m pip install git+https://github.com/waveware4ai/importpy\r\n```\r\n# Requirements\r\n```python\r\nPython 3.8+\r\nNo external dependencies\r\n```\r\n# Features\r\n* Basic Features\r\n + importing modules using relative paths \r\n + importing modules using absolute paths \r\n + importing package using url paths \r\n + importing modules using url paths \r\n + importing member functions from modules \r\n + support lazy-import avoid circular importing \r\n + support to import functions from module, like from x import y ...\r\n* Import Logic \r\n + caller location is traced via inspect \r\n + relative path is resolved automatically \r\n + module name is derived from the file path (e.g. utils/web.py \u2192 utils.web) \r\n + result is cached in-memory \r\n# Examples\r\n## Relative Path\r\n```python\r\nfrom importpy import loader as importpy\r\n# simple relative import\r\naaaa = importpy('aaaa.py') # same to below\r\naaaa = importpy('./aaaa.py')\r\n\r\n# wildcard import\r\nbbbb = importpy('../util/test/bbbb.py') # same to below\r\nbbbb = importpy('../util/test/bbbb.py', '*') \r\n\r\n# absolute path\r\ncccc = importpy('/home/user/project/cccc.py')\r\ncccc = importpy('C:/program files/python/project/cccc.py') \r\n\r\n# turn on/off lazy-loading\r\nlazy_on = importpy('lazy_on.py', use_lazy = True) # default action\r\nlazyoff = importpy('lazyoff.py', use_lazy = False)\r\n\r\n# import specific attributes\r\na_member_of_x, b_member_of_x = importpy('./pathto/x.py', 'a_member_of_x', 'b_member_of_x') \r\nmodule_x, a_member_of_x, b_member_of_x = importpy('./pathto/x.py', '*', 'a_member_of_x', 'b_member_of_x') # wildcard include module x self\r\n\r\n# class import\r\nClassA, ClassB = importpy('./pathto/impl.py', 'ClassA', 'ClassB')\r\n```\r\nThe following perform the same role: \r\n```python\r\nimport aaaa\r\naaaa = importpy('aaaa.py')\r\n```\r\n```python\r\nfrom x import a_member_of_x, b_member_of_x\r\na_member_of_x, b_member_of_x = importpy('x.py', 'a_member_of_x', 'b_member_of_x') \r\n```\r\n```python\r\nfrom impl import ClassA, ClassB, funcX\r\nClassA, ClassB, funcX = importpy('impl.py', 'ClassA', 'ClassB', 'funcX')\r\n```\r\n## URL Path\r\nTo do this example, you no longer need pip installed locally. Move it somewhere else or delete it.\r\n```python\r\ndef import_pip_test(url: str, custom_finder=None, uselazy:bool = True, isolate=True):\r\n from importpy import loader as importpy\r\n pip = importpy(url, custom_finder=custom_finder, uselazy=uselazy, isolate=isolate)\r\n import pip as PIP # must be the same instance.\r\n assert id(pip) == id(PIP) \r\n\r\n print(f\"---------- pip-{pip.__version__} from [{pip.__file__}].main(['freeze'])\")\r\n pip.main([\"freeze\"])\r\n print(f\"---------- pip-{pip.__version__} from [{pip.__file__}].main(['list'])\")\r\n pip.main([\"list\"])\r\n```\r\npypi sdist/wheel remote access test\r\n```python\r\n import_pip_test(\"https://files.pythonhosted.org/packages/29/a2/d40fb2460e883eca5199c62cfc2463fd261f760556ae6290f88488c362c0/pip-25.1.1-py3-none-any.whl\")\r\n import_pip_test(\"https://files.pythonhosted.org/packages/59/de/241caa0ca606f2ec5fe0c1f4261b0465df78d786a38da693864a116c37f4/pip-25.1.1.tar.gz\")\r\n```\r\npypi sdist/wheel local access test using file://\r\n```python\r\n import_pip_test(\"file://[TEST_DIR]/pip-25.1.1-py3-none-any.whl\")\r\n import_pip_test(\"file://[TEST_DIR]/pip-25.1.1.tar.gz\")\r\n import_pip_test(\"file://[TEST_DIR]/pip-25.1.1-py3-none-any/pip\") # extract to dir\r\n```\r\npypi sdist/wheel remote access using ftp://\r\n```python\r\n import_pip_test(\"ftp://user:pass@localhost/whl/pip-25.1.1-py3-none-any.whl\")\r\n import_pip_test(\"ftp://user:pass@localhost/whl/pip-25.1.1.tar.gz\")\r\n import_pip_test(\"ftp://user:pass@localhost/whl/pip\") # extract to dir\r\n```\r\npypi sdist/wheel remote access using http/https://\r\n```python\r\n import_pip_test(\"http://localhost:1080/whl/pip-25.1.1-py3-none-any.whl\")\r\n import_pip_test(\"http://localhost:1080/whl/pip-25.1.1.tar.gz\")\r\n import_pip_test(\"http://localhost:1080/whl/pip\") # extract to dir\r\n import_pip_test(\"https://localhost:10443/whl/pip-25.1.1-py3-none-any.whl\")\r\n import_pip_test(\"https://localhost:10443/whl/pip-25.1.1.tar.gz\")\r\n import_pip_test(\"https://localhost:10443/whl/pip\") # extract to dir\r\n```\r\ngithub direct access using https://\r\n```python\r\n import_pip_test(\"http://github.com/pypa/pip/tree/main/src/pip\")\r\n```\r\n# Testing\r\n```\r\npython -m pytest -v ./importpy/tests\r\ncollected 30 items\r\nimportpy/tests/test_importpy.py::test_importpy_basic_module PASSED [ 3%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_attr_single PASSED [ 6%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_attr_multiple PASSED [ 10%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_star_attribute PASSED [ 13%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_star_includes_expected_attributes PASSED [ 16%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_attr_missing PASSED [ 20%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_args_invalid PASSED [ 23%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_absolute_path_loading PASSED [ 26%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_invalid_file_path PASSED [ 30%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_caching_behavior PASSED [ 33%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_lazy_loader_flag PASSED [ 36%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_occur_cyclic_importing PASSED [ 40%]\r\nimportpy/tests/test_importpy.py::test_importpy_basic_avoid_cyclic_importing PASSED [ 43%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_file_import_as_module PASSED [ 46%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_file_import_as_package PASSED [ 50%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_validation_header PASSED [ 53%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_validation_file_path PASSED [ 56%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_validation_http_path PASSED [ 60%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_wheel PASSED [ 63%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_targz PASSED [ 66%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_http PASSED [ 70%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_github PASSED [ 73%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_ftp PASSED [ 76%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_sftp PASSED [ 80%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_remote_custom_loader PASSED [ 83%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_local_wheel PASSED [ 86%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_local_file PASSED [ 90%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test1 PASSED [ 93%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test2 PASSED [ 96%]\r\nimportpy/tests/test_importpy.py::test_importpy_protocol_instance_isolation_test3 PASSED [100%]\r\n\r\n============================================= 30 passed in 9.15s ==============================================\r\n```\r\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Dynamic, lazy-style module importer for Python. ",
"version": "0.1.2",
"project_urls": {
"Home": "https://github.com/waveware4ai/importpy",
"Homepage": "https://github.com/waveware4ai/importpy",
"Source": "https://github.com/waveware4ai/importpy"
},
"split_keywords": [
"import",
" package",
" dynamic",
" lazy",
" module"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "07771c55882f686bb2b9784e585c656b493949399fc45ee00646db23f249befc",
"md5": "4dc54ab5bbfdab978cdc9a9165f79663",
"sha256": "5494f8a41172638c2c9ac292c900a7004b8420d5a9d1ee375ceffb6d70a0d59d"
},
"downloads": -1,
"filename": "importpy-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4dc54ab5bbfdab978cdc9a9165f79663",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 18444,
"upload_time": "2025-07-17T14:17:21",
"upload_time_iso_8601": "2025-07-17T14:17:21.311394Z",
"url": "https://files.pythonhosted.org/packages/07/77/1c55882f686bb2b9784e585c656b493949399fc45ee00646db23f249befc/importpy-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b5dfcebd5e2c10180b7bf0103e02db114bc6c70a26fc6f5f855e0623e159c262",
"md5": "5f583c11dfff75c3d71fc9a11501d1fa",
"sha256": "d3c5ff795ed6dfa9ca8d0b8a687a092d50b70c934c40987992c520568426690e"
},
"downloads": -1,
"filename": "importpy-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "5f583c11dfff75c3d71fc9a11501d1fa",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 19910,
"upload_time": "2025-07-17T14:17:23",
"upload_time_iso_8601": "2025-07-17T14:17:23.541374Z",
"url": "https://files.pythonhosted.org/packages/b5/df/cebd5e2c10180b7bf0103e02db114bc6c70a26fc6f5f855e0623e159c262/importpy-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-17 14:17:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "waveware4ai",
"github_project": "importpy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "importpy"
}