【问题标题】:use import_module to access module from site-packages使用 import_module 从站点包访问模块
【发布时间】:2021-12-30 12:58:23
【问题描述】:

我想从我使用 pip 安装的包的特定目录中导入所有模块,即它位于site-packages

我尝试了什么

假设包名是package,它有一个名为directory的目录。它有很多文件,如a.pyb.py 等。我需要将它们全部导入。我使用内置的__file__ 列出了directory 中的所有文件,这不是问题。当我尝试使用importlib.import_module 导入模块时,我得到了ModuleNotFoundError,即使我100% 确定它们存在。我使用了相对导入。

代码片段

modulesdirectory中所有文件的列表

for module in modules:
    importlib.import_module('.'+module, 'C:\\Users\\.....\\package\\directory')

ModuleNotFoundError: No module named 'C:\\Users\\.....\\package\\directory'

终于

我做错了什么以及引用站点包的正确方法是什么?

【问题讨论】:

    标签: python windows modulenotfounderror python-importlib site-packages


    【解决方案1】:

    在您想要的目录下创建一个空的__init__.py 文件 执行

    import pkgutil
    import sys
    
    
    def load_all_modules_from_dir(dirname):
        for importer, package_name, _ in pkgutil.iter_modules([dirname]):
            full_package_name = '%s.%s' % (dirname, package_name)
            if full_package_name not in sys.modules:
                module = importer.find_module(package_name
                            ).load_module(full_package_name)
                print module
    
    
    load_all_modules_from_dir('site-packages')
    

    【讨论】:

    • 此代码只有在 site-packages 的父目录中运行时才有效,这违背了整个目的。另外,我需要目录路径而不是站点包但即使我得到site-packagesdirectory 的绝对路径,它也会给出导入错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2013-10-20
    • 1970-01-01
    • 2021-06-12
    • 2020-05-13
    相关资源
    最近更新 更多