Python 通过终端在深层子目录中执行脚本会分解我的导入
我的文件结构如下:Python 通过终端在深层子目录中执行脚本会分解我的导入,python,path,relative-path,Python,Path,Relative Path,我的文件结构如下: project/ __init__.py common/ __init__.py util.py utilhelper.py stuff/ __init__.py coolstuff/ __init__.py awesome.py 公共/初始化.py 公共/util.py stuff/coolstuff/awesome.py
project/
__init__.py
common/
__init__.py
util.py
utilhelper.py
stuff/
__init__.py
coolstuff/
__init__.py
awesome.py
公共/初始化.py
公共/util.py
stuff/coolstuff/awesome.py
当我这样做时:
python项目/stuff/coolstuff/awesome.py
“从公共导入util”失败,并显示“没有名为公共的模块”
我意识到我遗漏了一些非常重要的心理概念,比如路径和包装,因为我不知道如何解决这个问题。但如果可能的话,我希望在深层子目录中保留类似“fromcommonimportutil”的代码
我考虑过:
-设置铺装器以将路径依赖项注入到通过sh运行python脚本的任务中:
@task
@needs(['common'])
def dostuff():
sh('python stuff/coolstuff/awesome.py')
不幸的是,我不知道我在做什么,也找不到关于这方面的好例子/教程
-使用imp在100%的脚本中显式导入相对和/或绝对文件路径
-在每个python文件的顶部编写小的hacky路径插入
我非常感谢您的建议。作为一个快速解决方案,我:
- 已将公用目录移动到stuff/
- 在awome.py“from..common import util”中使用了相对导入
- 在taskrunner文件中使用sh显式硬编码-m(模块模式)python脚本启动器
import utilhelper
help = utilhelper.help()
from common import util
print util.help
@task
@needs(['common'])
def dostuff():
sh('python stuff/coolstuff/awesome.py')