导入项目模块至项目子目录,而没有相对路径

时间:2019-03-08 10:47:02

标签: python import pycharm project directory-structure

必须已被询问过,但我一生都找不到。

我有一个类似这样的项目结构

ROOT
├── README.md
├── modules
│   ├── __init__.py
│   ├── mod1.py
│   └── mod2.py
├── tests
│   ├── test_mod1.py
│   └── test_mod2.py
├── notebooks
│   ├── nb1.ipynb
│   ├── nb2.ipynb
│   └── sub_dir
│       ├── sub_nb.ipynb
│       ├── generate_py
│       └── py_files
│           └── sub_nb.py
├── definitions
└── main.py

因此,我可以从main.py导入definitions中的任何内容,也可以导入ROOT/modules中的任何模块。

我想要的是能够从notebooks目录树中的任何位置从这些文件中导入。我知道我可以使用以下方法做到这一点:

import sys
sys.path.append("..")

但是notebooks目录树有很多层,我不希望我的代码看起来像这样:

import sys
sys.path.append("../../../../")

此外,文件generate_py是bash脚本,它将jupyter笔记本(.ipynb)转换为.py文件,并将.py文件存储到{{ 1}}子目录。

使用上述方法,我最终不得不手动编辑每个文件,以将额外的./py_files放入../中。这很烦人。

如果我从pycharm中运行文件,则一切正常(我猜想它会在创建sys.append()时更新您的PYTHONPATH以包括项目根目录吗?)

更复杂的是,该项目在多台通过git共享的机器上运行。所以绝对参考了。

但是从终端运行,或者从jupyter内部运行,它无法查找模块或定义,而无需经过main.py进程。而且我觉得必须有更好的方法。

那这里的最佳实践是什么?

0 个答案:

没有答案