具有特定项目结构的“未命名模块...”

时间:2019-07-04 12:04:43

标签: python python-3.x import python-import

我具有以下项目结构:

MainScript.py
ExampleFolder
├ MainImport.py
└ SecondaryImport.py

MainScript.py:import ExampleFolder.MainImport
MainImport.py:Import SecondaryImport


当我尝试运行MainImport.py时,不会出现任何错误,但是当我尝试运行MainScript.py时,会出现提示为No module named 'SecondaryImport'的导入错误。

我的问题很简单-是否可以通过任何方式仅从MainImport.py导入MainScript.py而不出现此错误,然后导入SecondaryImport.py?预先感谢!

我也尝试过将名为__init__.py的空白文件添加到ExampleFolder,但是错误仍然出现。我也阅读了Python's official documentation,但找不到问题。我想念什么吗? (:

2 个答案:

答案 0 :(得分:1)

我认为使用语句import ExampleFolder.SecondaryImport是可行的。

如果确实如此,则可能会发生错误,因为如docs中所述,如果您的模块不在python本身中,则import语句通常会开始在您的主项目目录中搜索python解释器。

另一种方法是使用相对的导入语句,如下所示: import .secondaryimport以便告诉python解释器在当前目录中查找。希望这会有所帮助!

我认为,看看这些链接会有所帮助(当我遇到类似问题时,它对我有帮助): https://docs.python.org/3/library/sys.html#sys.path https://realpython.com/absolute-vs-relative-python-imports/

答案 1 :(得分:0)

  

我还尝试将名为__init__.py的空白文件添加到ExampleFolder

就是这样-您正在以这种方式从目录创建Python包。有了软件包,您就有了命名空间directory.file,其中file是Python文件,在Python世界中也称为模块。

然后您可以从mainscript.py中进行操作:

from examplefolder import mainimport

要在包内导入,可以在mainscript.py中使用以下语法:

import secondaryimport

并在mainscript.py中将其用作:

sevondaryimport.SomeClass()

或者您可以这样做:

from secondaryimport import SomeClass

并像这样使用它:

SomeClass()

顺便说一句,在所有情况下都使用小写字母,但类名称除外-只有它们应该具有CamelCase名称。