我知道已经有很多类似的问题,但不幸的是我还没有找到如何应用我的问题。
我的项目结构如下:
Project
|___ maincode
|___ __init__.py
|___ losses.py
|___ bin
|___ __init__.py
|___ train.py
然后在train.py
我有以下代码:
# Allow relative imports when being executed as script.
if __name__ == "__main__" and __package__ is None:
__package__ = "maincode.bin"
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
from .. import losses
def main(args=None):
#some code here
if __name__ == '__main__':
main()
现在,如果我从项目主目录train.py
执行脚本Project/
,即在终端中运行以下内容:
maincode/bin/train.py
然后我得到以下错误:
SystemError:父模块' maincode.bin'没装,不能 执行相对导入
我尝试使用Python 2.7.6和Python 3.5.2并获得了相同的错误。
你可以帮忙吗?提前谢谢!答案 0 :(得分:3)
如果您只想运行该模块而不是整个Package。执行python -m maincode.bin.train
告诉python将其作为模块运行。
如果要运行整个程序包,请将目录更改为项目:cd /path/to/project
然后运行:python maincode
如果您的代码设置正确,则应运行train.py。
否则,将脚本移到Package外部并自行运行它。
有关此内容的更多信息并且可以在此处找到包: Relative imports for the billionth time
答案 1 :(得分:0)
同一目录中的文件只能使用"导入模块"并且不能使用"来自"关键字,原因不明