如何在 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.py 和 utils_functionality_1.py。同样,在 main_functionality_2.py 中,它将使用 utils_general.py 和 [=82 中的函数=].
我想导入 utils 文件的所有功能,就好像它是一个单独的模块一样。我的意思是,我想让utils_functionality_1.py“继承”utils_general.py的功能。这个想法类似于 class-inheritance,但是这两个文件是完全可用的(在 utils_general.py 和 utils_functionality_1.py 没有定义 classes,只有函数)。
例如,这将导致 main_functionality_1.py 我可以访问 utils_general.py 的功能和 utils_functionality_1.py 的名称为 utils
(请注意,在 utils_general.py 和utils_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 *
我在一个具有多种功能的 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.py 和 utils_functionality_1.py。同样,在 main_functionality_2.py 中,它将使用 utils_general.py 和 [=82 中的函数=].
我想导入 utils 文件的所有功能,就好像它是一个单独的模块一样。我的意思是,我想让utils_functionality_1.py“继承”utils_general.py的功能。这个想法类似于 class-inheritance,但是这两个文件是完全可用的(在 utils_general.py 和 utils_functionality_1.py 没有定义 classes,只有函数)。
例如,这将导致 main_functionality_1.py 我可以访问 utils_general.py 的功能和 utils_functionality_1.py 的名称为 utils
(请注意,在 utils_general.py 和utils_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 *