如何在不同文件夹中组织的多个模块的项目中在 python 中进行导入?

Posted

技术标签:

【中文标题】如何在不同文件夹中组织的多个模块的项目中在 python 中进行导入?【英文标题】:How to make the imports in python in a project of several modules organised in different folders? 【发布时间】:2022-01-05 15:16:54 【问题描述】:

我正在构建一个软件。我在不同的文件夹中组织了不同的python文件(模块)中的不同代码。

它就像一个魅力。然后今天它不再起作用了,因为我有一些问题:

ModuleNotFoundError: No module named 'modules.mymodulesteam'

这就是我的代码的组织方式:

MySoftware/
    - start.py
    - modules/
        -- mymodules.py
        -- prepare.py
        -- mymodulesteam.py

在 start.py 文件中,我有这个导入:

from modules import prepare_envir_appium

在 prepare.py 我有这行导入

import modules.mymodulesteam as mymodules

当我执行“start.py”时,控制台中出现以下错误消息:

Traceback (most recent call last):
File "E:\MySoftware\modules\prepare.py",
        import modules.mymodulesteam as mymodules
    ModuleNotFoundError: No module named 'modules.mymodulesteam'

所以我寻求帮助,我发现我必须在我的文件夹“模块”中添加一些 _init.py 文件。我做到了,但没有用。我遇到了完全相同的问题。

我阅读了有关此类问题的每篇文章并尝试了很多东西。

from modules import mymodulesteam
from . import mymodulesteam
etc...

我得到了这种错误:

Traceback (most recent call last):
File "E:\MySoftware\modules\prepare.py",
    from modules import mymodulesteam as mymodules
ImportError: cannot import name 'mymodulesteam' from 'modules' (E:\MySoftware\modules\__init__.py)

所以我删除了这个“_ init _.py”文件并再次测试。这次我收到了这个错误:

Traceback (most recent call last):
File "E:\MySoftware\modules\prepare.py",
    from modules import mymodulesteam as mymodules
ImportError: cannot import name 'mymodulesteam' from 'modules' (unknown location)

它曾经工作得很好。我不知道发生了什么。有人可以帮我吗?

【问题讨论】:

【参考方案1】:

它不起作用,因为模块不在同一路径中,并且脚本不知道在哪里查找。

您当前的start.py 文件如下所示,

from modules import prepare_envir_appium

相反,请在 start.py 文件的顶部执行此操作,因为您的 prepare_envir_appium.py 文件位于模块中。

import sys
sys.path.insert(0,"../modules")

import prepare_envir_appium 

现在您可以使用prepare_envir_appium.functionname 访问您的函数。

你也可以这样做,

import sys
sys.path.insert(0,"../modules")

import prepare_envir_appium as per

现在您可以在 start.py 中使用 per.functionname 访问函数。

你也可以像这样导入特定的函数,

import sys
sys.path.insert(0,"../modules")

from prepare_envir_appium import functionname1, functionname2

你可以使用它们的函数名来运行它们。

但是,如果您正在查看 prepare.py 脚本,因为模块与脚本位于同一文件夹中,您所要做的就是导入文件名,如下所示,不带 .py 扩展名。

您可以遵循与上述相同的导入命名约定。

import mymodulesteam

import mymodulesteam as mmt

from mymodulesteam import function1, function2

【讨论】:

感谢您的帮助。它没有改变任何东西。 另外,“import mymodules”位于子文件夹“modules”中的 prepare.py 文件中 @GauthierButtez 对于与模块在同一文件夹中的脚本,您只需导入不带 .py 的文件名 如果它不起作用,你能告诉我错误吗? @GauthierButtez 我得到同样的错误“ModuleNotFoundError: No module named 'mymodulesteam'”

以上是关于如何在不同文件夹中组织的多个模块的项目中在 python 中进行导入?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个 python 文件组织到一个模块中而不像一个包一样?

如何在一个请求中在 Mongoose 中创建多个文档

python学习之模块--模块

如何在构建命令中在Gradle上添加运行时库

verilog中在同一模块中调用其他多个模块,模块是顺序执行的吗

如何最好地组织角度翻译中的翻译字符串?