Python:如何确保您使用的库不会意外导入您的代码?

SiL*_*hon 6 python debugging naming

几个小时前,我不小心把我的短剧命名为code.py.显然,有这样的包装,例如由ptvsd或使用pdb.这导致我code.py被导入而导致一堆嵌套的未处理异常,在尝试调试我的代码时缺少导入.令人沮丧的是,追溯没有显示导入我的code.py文件的任何迹象,所以我花了很长时间才找到问题的根源.

我想在将来避免这种情况,所以我的问题是:确保您使用的模块由于这样的名称冲突而错误地导入代码的最佳做法是什么?

bru*_*ers 3

这是一个常见的问题,实际上没有万无一失的方法可以避免它。至少您可以确保您的模块全部位于包中(如果这是一个没有可重用代码的小项目,则至少有一个包),以便您将它们用作而不是(还要from mypackage import code确保import code您使用绝对导入等),并且您始终从包含包的目录运行代码,而不是从包目录本身运行代码(python 将当前工作目录插入到 的第一个位置sys.path)。

这不会阻止所有可能的名称屏蔽问题,但应该可以最大程度地减少这些问题。现在根据经验,一旦您至少经历过一次此类问题,您通常会很快发现症状 - 最常见和最明显的是一些完全不相关的 stlib 或第三方模块开始因 ImportErrors 或 AttributeErrors 崩溃(带有“模块 X 没有属性 Y”消息)。此时,如果您刚刚在自己的代码中添加了一个新模块,则很可能是新模块破坏了所有内容,因此您只需重命名它(确保清理 .pyo/.pyc 文件(如果有))并查看是否它解决了这个问题。否则检查回溯以找出哪些导入失败,大多数时候您会发现当前工作目录中有同名的模块或包。