Python:导入“导入文件”

问题描述 投票:0回答:2

我正在导入很多不同的脚本,因此在我的文件顶部它会被导入语句弄乱,即:

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
...

有没有一种方法可以将所有这些内容移动到其他地方,然后我所要做的就是导入该文件,这样它只是一个干净的导入?

python python-import
2个回答
38
投票

我强烈反对你想做的事。您又犯了全局包含文件错误。尽管只有一个模块正在导入所有模块(而不是所有模块都导入全局模块),但剩下的一点是,如果有充分的理由将所有这些模块收集在一个通用名称下,那就没问题了。如果没有原因,那么它们应该作为单独的包含保留。原因是文档。如果我打开您的文件,只看到一次导入,我就无法获得有关导入内容及其来源的任何信息。另一方面,如果我有进口清单,我一眼就知道需要什么,不需要什么。

此外,我认为您还犯了另一个重要错误。当你说

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...

我假设您正在导入一个类,就像这样

from somewhere.fileA import MyClass

这是错误的。这个替代解决方案要好得多

 from somewhere import fileA 

 <later>

 a=fileA.MyClass()

为什么?原因有两个:第一,命名空间。如果您有两个模块都有一个名为 MyClass 的类,则会发生冲突。第二,文档。假设您使用第一个选项,我在您的代码中找到以下行

 a=MyClass()

现在我不知道这个 MyClass 来自哪里,我将不得不 grep 周围的所有文件才能找到它。使用模块名称限定它可以让我立即了解它来自哪里,并通过 /search 立即找到来自 fileA 模块的内容在您的程序中使用的位置。

最后一点:当你说“fileA”时,你犯了一个错误。有模块(或包),而不是文件。模块映射到文件,包映射到目录,但它们也可能映射到egg文件,甚至可以创建一个根本没有文件的模块。这是概念的命名,是横向问题。


24
投票

当然有;只需在主文件所在的同一目录中创建一个名为

myimports.py
的文件并将导入文件放在那里即可。然后你可以简单地在你的主脚本中使用
from myimports import *

© www.soinside.com 2019 - 2024. All rights reserved.