从子文件夹而不是同一目录导入模块?

Posted

技术标签:

【中文标题】从子文件夹而不是同一目录导入模块?【英文标题】:Import module from child folder instead of same directory? 【发布时间】:2021-05-24 12:25:57 【问题描述】:

所以我有以下文件结构(win10)

project/
        mycode.py
        lib/
           bunch of python modules
           paramiko/
                    all of paramiko's files

在这里,所有模块都在一个子文件夹中,当我说 import paramiko 在 mycode.py 中,找不到 paramiko。但是,当我将它们全部移出 lib 目录时,它工作正常。

工作解决方案:

project/
        mycode.py
        bunch of python modules
        paramiko/
                 all of paramiko's files

但它很难看,我宁愿将它们全部放在一个 lib 目录中。如何访问子目录中的模块?

编辑:好的,想通了。我用过操作系统。添加到路径:

projectPath = os.path.dirname(os.path.abspath(__file__))
sys.path.append(projectPath+"\\lib")

我之前尝试过,除了这次,我在对路径进行编辑之后将导入 paramiko 移到了。天哪,我有时觉得自己很愚蠢

【问题讨论】:

【参考方案1】:

您也可以不将其添加到路径中:

from lib import paramiko

import lib.paramiko

只要你有这样的目录结构

project/
        mycode.py
        lib/
           bunch of python modules
           paramiko/
                    all of paramiko's files

【讨论】:

第一个结果是:Traceback (most recent call last): File "E:\skylight\skylight.py", line 18, in <module> from lib import paramiko File "E:\skylight\lib\paramiko\__init__.py", line 21, in <module> from paramiko._version import __version__, __version_info__ ModuleNotFoundError: No module named 'paramiko',第二个结果是一样的。 如果您在mycode.py 中执行import lib.paramiko,它应该可以工作,我的工作结构类似。

以上是关于从子文件夹而不是同一目录导入模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python3中正确导入同一目录下的模块

目录树中不同级别的CORBA python文件而不是导入它们的模块

如何在python3中正确导入同一目录下的模块

如何从子模块导入python脚本?

python中模块包无法导入import问题

python导入同一目录下的自定义模块,出现ModuleNotFoundError