python中的相对导入错误,以及哪里可以找到python模块源代码

时间:2014-09-05 23:31:04

标签: python python-import

我对python很新。虽然我了解基本数据类型,控制流程等,但从顶层视图来看,我仍然觉得有些困难。

其中一个问题是relative import。 我有一本试图使用python实现队列结构的书中的代码。当我运行代码时,我从导入中得到错误, " ValueError:尝试在非包装中进行相对导入"。

以下是导入行:

from ..exceptions import Empty

我现在在我的工作项目文件夹中。 我的问题是如何调整此行以使整个代码工作? 我猜这"例外"模块由作者而不是内置模块制作,并且作者不会在当前文件夹中包含该模块。 我在哪里可以找到python内置模块源代码,所以我可以看一下?

我的系统是ubuntu

谢谢。

1 个答案:

答案 0 :(得分:1)

这些是显式相对导入。该语法意味着该行代码所在的文件正在尝试import Empty模块(我正在对此进行有根据的猜测,没有看到实际的目录结构,尽管它不常见模块有一个大写字母 - 通常是为类保留的,来自exceptions子文件夹,它位于父目录中。

有关详细信息,请参阅Module: Packages doc,包括具有相对导入的特定文件夹结构示例。

本书真的应该在一个独立的目录结构中提供代码 - 比如说,你可以克隆一个 git repo - 这些内部包依赖关系才能正常工作。如果它是库存的话,它不太可能与你的系统安装有关(虽然当然可以设置 PYTHONPATH 和其他可能影响环境的方法)。

模块结构是什么样的?

我还建议您查看virtualenv以便沙盒化您的Python环境。 (虽然对于自定义代码,可能也需要运行本地 Pypi 服务器或类似服务器,尽管还有其他选项 - 请参阅下面的@ abarnert评论。它不会对这个特定的问题有所帮助,但总的来说,保持项目及其各种包装要求是隔离的,这是一个好主意。