首页 > 解决方案 > 从子目录导入模块 - python

问题描述

我想以一种简单的方式从子目录中导入模块:

我想调用 app.py 中的所有函数

.
├── app.py
└── testsubdir
    └── testsubsubdir
        ├── utils.py
testsubdir2
└── testsubsubdir2
    ├── utils2.py

为此,我现在使用:

sys.path.append('/home/www/testsubdir/testsubsubdir')
sys.path.append('/home/www/testsubdir2/testsubsubdir2')
from utils import <some_function>
from utils2 import <some_function>
  1. 有没有办法让/home/www作为python调用脚本的主路径,所以我不需要每次都写。像这样的东西?sys.path.append('$MAINPATH.'/testsubdir2/testsubsubdir2')
  2. 有没有办法告诉从项目的根目录 /home/www 到 sys.path 的所有子目录,所以它们用于包含库?

标签: pythonpython-import

解决方案


您需要__init__.py每个目录中的文件来帮助 Python 识别这些是模块的包和目录。你不应该这样修改sys.path。例如,请参阅modules的文档。

对于“兄弟”的情况,您可能可以使用sys.path.append(path)(或sys.path.insert(0, path),但这不是一个很好的解决方案。对于更好的选择,我会参考这个怪物帖子。

所以对于你的问题 1,你可以(用丑陋的黑客)做os.path.append(os.path.dirname(os.path[0])).


推荐阅读