如何在 Python 中将两个 python 文件作为单个模块导入?

How to import two python files as a single module in Python?

我在一个具有多种功能的 Python 项目中工作。这些功能中的每一个都作为自己的项目使用自己的模块。

我已经定义了一个utils_general.py模块,其中包含每个功能都可以使用的通用功能。此外,每个功能都有自己的 utils_functionality_x.py 模块,其中包含仅在该模块中使用的功能。我的项目结构如下:

.
+-- __init__.py
+-- src
|   +-- utils_general.py
|   +-- functionality_1.py
|   |   +-- __init__.py
|   |   +-- main_functionality_1.py
|   |   +-- utils_functionality_1.py
|   +-- functionality_2.py
|   |   +-- __init__.py
|   |   +-- main_functionality_2.py
|   |   +-- utils_functionality_2.py
+-- .gitignore
+-- README.md

在上面的示例中,在 main_functionality_1.py 中,它将使用来自 utils_general.pyutils_functionality_1.py。同样,在 main_functionality_2.py 中,它将使用 utils_general.py[=82 中的函数=].

我想导入 utils 文件的所有功能,就好像它是一个单独的模块一样。我的意思是,我想让utils_functionality_1.py“继承”utils_general.py的功能。这个想法类似于 class-inheritance,但是这两个文件是完全可用的(在 utils_general.pyutils_functionality_1.py 没有定义 classes,只有函数)。

例如,这将导致 main_functionality_1.py 我可以访问 utils_general.py 的功能和 utils_functionality_1.py 的名称为 utils(请注意,在 utils_general.pyutils_functionality_1.py)。例如,我想做这样的事情(这行不通):

# This is pseudo-code and won't work
import src.utils_general as utils
import src.functionality_1.utils_functionality_1 as utils

我能想到的就是把utils_general.py的函数导入到utils_functionality_1.py然后创建一个可以从外部调用的包装函数。像这样:

utils_functionality_1.py中的代码:

# Code in utils_functionality_1.py
import src.utils_general as utils_general

def function_general(*args, **kwargs):
    return utils_general.function_general(*args, **kwargs)

有没有更好的way/good-practice来实现Python中模块之间的这种“伪继承”?

您可能需要稍微更改您的文件夹结构,但您可以使用 "namespace packages" 来使用附加文件扩展现有模块。

Namespace packages are a mechanism for splitting a single Python package across multiple directories on disk.

Here's and answer I wrote 话题。

您必须将 utils_general 中的所有名称导入 utils_functionality_1,仅此而已。

# utils_functionality_1.py
from utils_general import *