Python 机器学习导入

Python imports for machine learning

我正在为我正在做的新机器学习项目从 R 切换到 Python。

我找到了一种看起来不错的代码架构(下图),但如果我想让我的代码保持干爽,我在实现时会遇到问题。

所以基本上我有一段代码(函数),我想在不同的模块(即位于 [=14= 下的 datafeaturesmodel 之间共享] 模块)。 本例中的代码包含加载和保存数据的函数。

问题是我无法从上层模块导入函数(例如,如果我 functions.py 直接位于 src 文件夹下)

我可以在每个模块(datafeaturesmodels)中添加单独的 functions.py,但这会破坏我尝试创建结构良好的项目的目的.

我想我不是唯一遇到这个问题的人。

这通常是如何处理的?

如何创建可供所有嵌套最深的模块使用的共享模块? (我想将相同的模块导入 make_dataset.pybuild_features.pypredict_model.pytrain_model.py

编辑:

我也忘了说我用的是 virtualenv 和 global space 不应该被污染。

解决方案:

所以我最终做的是将以下代码添加到我的顶级包 __init__.py 文件中: import sys, os fullPathToProjectFolder = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, fullPathToProjectFolder) print('__init__ project packege linked: ' + fullPathToProjectFolder)

因此,无论何时您使用主包或子包中的任何内容,它都会自动链接(因为当您导入主包时,会自动调用 __init__.py 文件)。而且每个模块都可以相对于顶层包进行导入。

例如:如果 train_model.py 想要导入 build_features.py 它会这样做:

from features import build_features

您需要将您的项目添加到您的系统路径,以便 python 可以找到该模块。

这可以在 python:

内完成
import sys
sys.path.insert(0, fullPathToProjectFolder)

然后你就可以用

调用你的模块了
import general_functions

您需要在您的目录中创建 __init__.py 文件,您是否可以将其作为模块创建。所以 functions.py 或文件夹中您可以使用 import 调用的任何内容。希望有用https://docs.python.org/3/tutorial/modules.html#packages