我对python很新。虽然我了解基本数据类型,控制流程等,但从顶层视图来看,我仍然觉得有些困难。
其中一个问题是relative import
。
我有一本试图使用python实现队列结构的书中的代码。当我运行代码时,我从导入中得到错误,
" ValueError:尝试在非包装中进行相对导入"。
以下是导入行:
from ..exceptions import Empty
我现在在我的工作项目文件夹中。 我的问题是如何调整此行以使整个代码工作? 我猜这"例外"模块由作者而不是内置模块制作,并且作者不会在当前文件夹中包含该模块。 我在哪里可以找到python内置模块源代码,所以我可以看一下?
我的系统是ubuntu
谢谢。
答案 0 :(得分:1)
这些是显式相对导入。该语法意味着该行代码所在的文件正在尝试import
Empty
模块(我正在对此进行有根据的猜测,没有看到实际的目录结构,尽管它不常见模块有一个大写字母 - 通常是为类保留的,来自exceptions
子文件夹,它位于父目录中。
有关详细信息,请参阅Module: Packages doc,包括具有相对导入的特定文件夹结构示例。
本书真的应该在一个独立的目录结构中提供代码 - 比如说,你可以克隆一个 git repo - 这些内部包依赖关系才能正常工作。如果它是库存的话,它不太可能与你的系统安装有关(虽然当然可以设置 PYTHONPATH 和其他可能影响环境的方法)。
模块结构是什么样的?
我还建议您查看virtualenv以便沙盒化您的Python环境。 (虽然对于自定义代码,可能也需要运行本地 Pypi 服务器或类似服务器,尽管还有其他选项 - 请参阅下面的@ abarnert评论。它不会对这个特定的问题有所帮助,但总的来说,保持项目及其各种包装要求是隔离的,这是一个好主意。