【发布时间】:2018-11-27 11:30:29
【问题描述】:
我有一个这样组织的简单应用:
.
`-- app
|-- __init__.py (empty)
|-- extensions.py (just defines foo())
`-- server.py
server.py 看起来像这样:
from app.extensions import foo
以python app/server.py 运行它当然不起作用,因为从命令行运行时 server.py 不在“应用程序中”。它的包名是__main__。我知道以python -m app.server 运行它可以工作,但由于各种原因我不能这样做(其中,我正在使用重新加载器,而python -m<foo>“有帮助”用完整的模块名称重写了 argv)。
我想我了解极其拜占庭式的 Python 包/模块导入内容,至少我已经阅读了很多。我认为解决此问题的标准(?)方法是将应用程序目录添加到 sys.path,例如sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))。但这对我来说似乎很奇怪,正确地做到这一点并非易事(请参阅有关此主题的其他类似 SO 问题)。似乎应该通过设置__name__ 和/或__package__ 或__path__ 或其他更隐藏的东西来告诉python“这是app.server”。
有没有办法像这样“欺骗”包导入系统?
【问题讨论】:
标签: python python-import python-module