我正在编写自己的模块mymodule
。它包含这个:
myroot
|-mymodule
| |-file1
| |-file2
|
|-tests
| |-...
|
|-...
在file1
我要导入file2
。首先我使用from . import file2
,因为这似乎是最佳实践 - 因为如果我在命名空间中犯了错误就没有问题(例如,当该文件2具有我已经使用的名称或类似的东西时,它如果我想从子模块导入文件,也会更好。)
然后我改为仅使用import file2
因为测试在这些相对导入时遇到问题。我已经描述了这个问题here。
现在导入没有 .
时出现问题,因为在安装模块时它们不再起作用了。 (我把它安装到我自己的电脑上。)
什么更好?如何避免在没有.
的情况下导入的问题? (我知道,我可以注意不要使用已经使用过的名字。但我很难相信可能会因为他使用我的模块而导致别人程序崩溃的事情。
那么:什么是最佳做法?为什么?如果没有这样的话:在哪里使用?
答案 0 :(得分:0)
以下是两者之间的区别。
这意味着,当以不同方式运行时,需要以不同的方式导入脚本的单个部分。
这意味着我要做的就是不要决定我应该使用哪种导入方式,而是使用类似的东西:
if is_run_as_unittest:
import file2
else:
from . import file2
所以我必须知道它是否是单位测试。 (我假设这也适用于脚本是从unittest导入的,至少最重要的是主脚本(或顶级模块,无论如何)是否作为unittest运行