我应该如何在模块中导入另一个 python 文件

How should I import another python file within a module

我正在构建一个相对简单的 python 模块,其中包含 2 个源 python 文件。

结构是这样的:

├── MyModule
│   ├── MyModule
│   │   ├── __init__.py
│   │   ├── file1.py
│   │   ├── file2.py
│   ├── requirements.txt
│   ├── setup.py

__init__.py里面我有

from .file1 import *

以便在导入时我可以简单地键入 mymodule.myFunction()

在file1.py里面我有

import file2

然后我使用pip install -e .安装模块。

然而,当我尝试导入它时,出现以下错误:

----> 1 import file2
      2 import matplotlib.pyplot as plt
      3 import numpy as np
      4 import scipy.signal

ImportError: No module named 'file2'

我应该采用什么可接受的方式来做这件事?

似乎问题在于,当文件导入到 init.py 文件时,它会看到导入它的当前 python 环境,因此看不到 file2.py。但是,如果我在 init type

内部
from .file2 import *
from .file1 import *

和 file1 类型的内部

import MyModule

然后我可以像这样在 file1 中使用 file2 中定义的函数

MyModule.FunctionFromfile2(...)

另一种方法是初始化一个子包,如此处讨论 https://docs.python.org/2/distutils/examples.html

我最终将它用作子包,因为这对我的特定情况更明智,目录结构现在如下所示:

├── MyModule
│   ├── MyModule
│   │   ├── __init__.py
│   │   ├── file1.py
│   │   ├──MySubModule
│   │   │   ├── __init__.py
│   │       ├── file2.py
│   ├── requirements.txt
│   ├── setup.py

在 MyModule 的 __init__.py 内部,我将 file1 导入为 from .file1 import *,在 MySubModule 的 __init__.py 内部,我将 file2 导入为 from .file2 import *

在 file1 内部,我然后像这样使用 MySubModule:

import MyModule.MySubModule

MyModule.MySubModule.FunctionFromfile2(...)

这有利于在作为模块导入时将 functions/objects 的名称空间与 file1 和 file2 分开。正如用户所见 MyModule.functionsFromfile1MyModule.MySubModule.functionsFromfile2.