我应该如何在模块中导入另一个 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.functionsFromfile1
和 MyModule.MySubModule.functionsFromfile2
.
我正在构建一个相对简单的 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.functionsFromfile1
和 MyModule.MySubModule.functionsFromfile2
.