我在Google App Engine中的某个应用中使用了this code。我遇到了引用单个文件的问题。例如,在__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中的应用配置?
答案 0 :(得分:0)
如果要使用包,则必须在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开始,上面的语句只会被解释为绝对导入,而不是寻找相对的语句。显式绝对导入将在两个版本中按预期工作。