Python3配置导入

Python3配置导入,python,Python,如果这是一个明显的问题,我表示歉意,但我整个上午都在绞尽脑汁想如何设置这个问题,而谷歌并没有帮上忙 背景 我有一个数据科学项目,它依赖于两个不同的定制工具(数据获取功能、数据处理功能、绘图功能等)。以前,它们都只存在于我的项目目录中自己的文件中,我基本上是将它们作为脚本运行,或者通过exec调用它们。代码已经足够成熟了,我想拿出一些核心实用程序,并将它们放在我的项目目录中的一个包中。我在想象这样一个项目结构: project │ notebook1.ipynb │ notebook2.i

如果这是一个明显的问题,我表示歉意,但我整个上午都在绞尽脑汁想如何设置这个问题,而谷歌并没有帮上忙

背景

我有一个数据科学项目,它依赖于两个不同的定制工具(数据获取功能、数据处理功能、绘图功能等)。以前,它们都只存在于我的项目目录中自己的文件中,我基本上是将它们作为脚本运行,或者通过
exec
调用它们。代码已经足够成熟了,我想拿出一些核心实用程序,并将它们放在我的项目目录中的一个包中。我在想象这样一个项目结构:

project
│   notebook1.ipynb
│   notebook2.ipynb
│
└───project_utilities
    │   __init__.py
    │   config.py
    │   get_data.py
    |   transform_data.py
    |   common_plots.py
因此,在我的报告笔记本中,我可以将一个
导入项目_实用程序称为pu
,并访问我所有的方便功能(以及其他功能)

问题

当涉及到在模块之间共享变量时,我真的被彻底颠覆了。按照的建议,我正在创建一个
config.py
文件,在其中放置所有全局变量,我正试图使用该文件,如下所示:

# config.py
DATA_DIR = "~/project/data"

# get_data.py
import pandas as pd
import config

def get_data():
    return(pd.read_csv(config.DATA_DIR + 'dat.csv'))
但是,当我转到导入项目实用程序。获取数据时,我得到一个错误:

ModuleNotFoundError:没有名为'config'的模块

现在,我已经找到了一个使用相对路径的解决方法:

# get_data.py
import pandas as pd
from .config import *

def get_data():
    return(pd.read_csv(config.DATA_DIR))

但由于这与医生的建议不一致,我担心这不是肾盂之类的东西。这真的让我发疯了,是我遗漏了一些明显的东西,还是这只是常见问题部分的疏忽?如果是这样的话,将来有什么更好的来源可以参考呢。导入配置
Gotcha,这通常是处理包内导入的“正确”方法吗@JohnGordonYes,这是“最疯狂的”方式。太棒了,谢谢John!