python - 在同一模块中引用文件的正确方法

标签 python

我正在使用 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/

相关文章:

python - 安装 Flask 失败。错误: No available formula with the name "flask"

python - 使用 Python 读取 csv 文件第 i 列的最佳方法是什么?

python - 在 mac 上安装 tensorflow

python - 如何在其他函数 flask 中使用局部变量?

python - 在 Django Admin 中的自定义列表过滤中将 modeladmin 作为参数传递

python - 使用 apply 函数在 pandas 中创建一个具有舍入值的新列

python - 在 Python 中使用 BeautifulSoup 获取具有特定类属性的链接的 href 文本

python - Python 3.4 中的多处理被破坏了吗?

python - 如何关闭所有 flake8 风格错误并留下编程错误?

python - 使用opencv捕获单张图片