我正在使用 this code在我在 Google App Engine 中的一个应用程序中。我在引用单个文件的方式上遇到了问题。例如,在 __init.py__
中文件 decorators.py、errors.py 等导入如下:
import reddit.decorators
import reddit.errors
import reddit.helpers
import reddit.objects
既然文件都在同一个模块中,不应该像这样导入吗instead :
import decorators
import errors
import helpers
import objects
只有当 reddit 包在系统路径上时,绝对引用才有效,出于某种原因,在 Google App Engine 中似乎并非如此。
这是源代码的问题,还是我需要在 Google App Engine 中更仔细地检查我的应用程序配置?
最佳答案
如果你想使用一个包,你必须将整个目录安装到 Python 可以找到它的地方,即安装到 sys.path
中的目录。您永远不应尝试将包内容用作独立模块,因为这不是包的设计目的。
由于您的主脚本 (.
) 的工作目录位于 sys.path
中,您应该能够使用 reddit
包只需将整个包目录放在与主脚本相同的目录中。如果您无法在 Google App Engine 中import reddit
,则必须检查那里的设置。不幸的是,我不知道 GAE 是如何工作的或者您可以在那里安装什么,但我想它应该可以工作,因为它们允许您将任意 Python 模块和包放入您的网站空间,不是吗?
关于您原来的问题,您指的是手册的错误部分。对于 intra-package references ,你应该使用绝对导入:
import reddit.decorators as decorators
或相关的:
from . import decorators
绝对导入语法是否有效取决于您的 Python 版本。这是模棱两可的:
import decorators
你的意思是一个全局模块(/decorators.py
)?还是包中的模块 (/reddit/decorators.py
)? Python 2.x 将首先查找相对导入,如果相对导入失败,则尝试绝对导入。从 2.6 版开始,不推荐使用绝对样式导入,不应再使用。从 3.0 开始,上面的语句只会被解释为绝对导入,而不是寻找相对的。显式绝对导入将在两个版本中按预期工作。
关于python - 在同一模块中引用文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248382/