包 __init__.py 导入所有子文件,但只从另一个脚本加载一个子文件?

2023-12-31

我创建了一个具有以下文件结构的包:

- package
  - __init__.py
  - load.py
  - train.py
  - test.py

My __init__.pyfile 只是这些文件的类的导入:

from package.load import Load
from package.train import Train
from package.test import Test

大多数时候,我想加载所有三个类,但有时我只想专门加载这些类之一。例如,在临时脚本(包外)中,我希望能够仅调用 Load 类,如下所示:

from package import Load

虽然上述所有内容都适用于此设计,但我遇到一个问题,即在导入时也会加载来自训练/测试的依赖项Load就像上面的那样。我该如何设置__init__.py文件,这样我就可以做同样的事情import调用而不获取从训练/测试加载的依赖项?

补充说明:

为什么我这样做:我有一个问题,我希望一些人能够使用Load类,它仅使用基本 python,但是训练/测试文件包含专门的依赖项,仅 Load 类的用户不想使用甚至安装这些依赖项。


这是一种做一些非常接近你想要的事情的方法。而不是无条件地importing 中的所有包的类__init__.py,您可以在其中定义一个函数来显式导入任何所需的函数(如果未指定,则导入所有函数)。

__init__.py:

from pathlib import Path
import sys

print(f'In {Path(__file__).name}')

package_name = Path(__file__).parent.name
package_prefix = package_name + '.'
class_to_module_map = {'Load': 'load', 'Train': 'train', 'Test': 'test'}


def import_classes(*class_names):
    namespace = sys._getframe(1).f_globals  # Caller's globals.

    if not class_names:
        class_names = class_to_module_map.keys()  # Import them all.

    for class_name in class_names:
        module = class_to_module_map[class_name]
        temp = __import__(package_prefix+module, globals(), locals(), [class_name])
        namespace[class_name] = getattr(temp, class_name)  # Add to caller's namespace.

出于测试目的,这是我放入的内容load.py script:
(我还在其他两个模块中添加了类似的内容,以验证它们是否得到了imported.)

load.py:

from pathlib import Path

print(f'In {Path(__file__).name}')

class Load: pass

最后,这是一个仅使用它的示例import the Load class:

ad_hoc.py:

from my_package import import_classes

#from my_package import Load
import_classes('Load')

test = Load()
print(test)

随着输出的产生:

In __init__.py
In load.py
<my_package.load.Load object at 0x001FE4A8>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包 __init__.py 导入所有子文件,但只从另一个脚本加载一个子文件? 的相关文章

  • 从 asyncio 子进程获取实时输出

    我正在尝试使用 Python asyncio 子进程来启动交互式 SSH 会话并自动输入密码 实际用例并不重要 但它有助于说明我的问题 这是我的代码 proc await asyncio create subprocess exec ssh
  • Pandas ParserError:标记数据时出错。 C 错误:字符串内有 EOF

    我的数据超过 400 000 行 运行此代码时 f pd read csv filename error bad lines False 我收到以下错误 pandas errors ParserError Error tokenizing
  • 嵌套函数中的变量作用域

    有人可以解释为什么以下程序失败 def g f for in range 10 f def main x 10 def f print x x x 1 g f if name main main 带有消息 Traceback most re
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • 使用python编辑html,但是lxml将漂亮的html实体转换为奇怪的编码

    我正在尝试使用 python 带有 pyquery 和 lxml 来更改和清理一些 html Eg html div p It 146 s a spicy meatball p div lxml html clean 函数 clean ht
  • 如何使用 Pycharm 运行 fast-api 服务器?

    我有一个简单的 API 函数 如下所示 from fastapi import FastAPI app FastAPI app get async def read root return Hello World 我正在使用启动服务器uvi
  • 使用 Poetry 创建的 Python 项目:如何在 Visual Studio Code 中调试它?

    我有一个根据基本 Poetry 创建的 Python 项目指示 https python poetry org docs basic usage 项目文件夹是这样的 my project my project my project py F
  • 如何检查给定的数字是否是2的幂?

    下面的代码不适用于某些输入 a i set 1 while i lt 10000 a add i i lt lt 1 N int input if N in a print True else print False 我最初的想法是检查每个
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • pandas DataFrame 中行的高效成对比较

    我目前正在处理一个较小的数据集 大约 900 万行 不幸的是 大多数条目都是字符串 即使强制类别 框架在内存中也只有几 GB 我想做的是将每一行与其他行进行比较 并对内容进行直接比较 例如 给定 A B C D 0 cat blue old
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • python os.fork 使用相同的 python 解释器吗?

    据我所知 Python 中的线程使用相同的 Python 解释器实例 我的问题是与创建的流程相同os fork 或者每个进程创建的os fork有自己的翻译吗 每当你 fork 时 整个 Python 进程都会在内存中复制 包括Python
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 如何读取多个文件并将它们合并到一个 pandas 数据框中?

    我想读取位于同一目录中的多个文件 然后将它们合并到一个 pandas 数据框中 如果我这样做的话它会起作用 import pandas as pd df1 pd read csv data 12015 csv df2 pd read csv
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • 如何使用 Matplotlib 可视化标量二维数据?

    所以我有一个网格网格 矩阵 X 和 Y 以及标量数据 矩阵 Z 我需要将其可视化 最好是一些 2D 图像 在各点处带有颜色 显示 Z 值 我做了一些研究 但没有找到任何能完全满足我想要的效果的东西 pyplot imshow Z 看起来不错
  • 如何将另一整列作为参数传递给 pandas fillna()

    我想用另一列中的值填充一列中的缺失值 使用fillna方法 我读到循环遍历每一行将是非常糟糕的做法 最好一次完成所有事情 但我不知道如何使用fillna 之前的数据 Day Cat1 Cat2 1 cat mouse 2 dog eleph
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无
  • 如何在Python中捕获打印机事件

    我想在打印机开始打印时捕获信号 如果你告诉我如何获取将要打印的文档的路径 那就太好了 pywin32print看起来很有用 但不知道怎么用 要获得新打印作业的通知 您可以使用FindFirstPrinterChangeNotificatio

随机推荐