当模块相互依赖时,如何将模块组织成一个包?

时间:2018-10-22 23:55:59

标签: python-3.x import package

我需要将代码组织到一个包中,但是由于不同功能之间的相互依赖关系,所以我无法正确处理导入语句。下面是我的代码的显示方式,并在Jupyter Notebook中运行它。但是它已经很长了,我需要更好地组织它。

import sys
import numpy as np

def Class myClass():
    ...

def f1():
    ...
    call myClass()

import tkinter as tk
from tkinter import filedialog
def f2():
    ....

def f3():
    ...
    call f2

some scripts

import pptx
def f4():
    ....

def f5():
    call f2 & f4
    ....
some more scripts....

and so on (more functions)

我想做的是创建一个程序包,其中的每个.py模块都基于某种逻辑包含不同的类和函数定义。例如,所有处理文件操作的功能都将进入files.py,所有绘图功能都将进入plots.py,依此类推:

mypackage/
    __init__.py
    files.py
    data.py
    analysis.py
    plots.py

我已经创建了上面的目录结构,并在每个模块中放置了不同的功能集。这就是我卡住的地方。

  1. 我将所有导入语句放在哪里?
  2. 假设myClass在files.py中,而f1在data.py中,并且f1使用myClass的实例。我在哪里放置“从文件导入myClass”语句?
  3. 在我的示例中可以看到,f3中使用了f2:关于导入f2,以便f3可以访问f2,我在哪里/怎么说?
  4. 如果我打开Python3解释器,是否要先导入mypackage,然后再从mypackage下的每个模块中导入每个函数?
  5. 如果在另一个函数(例如,f2(位于data.py中))中调用了一个函数f1(位于files.py中),我是否需要在我的主代码中同时导入files.f1和data.f2 ,还是可以在def f2():语句之前在data.py模块中说“ import files.f1”?

我一直在阅读有关模块相对导入的信息,我认为这与我正在做的事情有关,但是我仍然感到困惑。如果有人可以帮助我更好地理解这一点,那将不胜感激。我经历了How to write a Python module/package?https://docs.python.org/3/tutorial/modules.html,但在阅读它们后仍无法解决我的问题。

0 个答案:

没有答案