如何从 Python 中的子文件夹导入模块或文件?

Posted

技术标签:

【中文标题】如何从 Python 中的子文件夹导入模块或文件?【英文标题】:How to Import module or a file from subfolder in Python? 【发布时间】:2018-06-01 22:13:59 【问题描述】:

有一个文件test.py,位于一个目录中,例如/pyproject。在/pyproject 中有一个名为api 的子目录,其中有两个名为gmailfacebook 的子目录,并且在这两个目录中都有.py 文件,例如:

/pyproject/api/gmail/abc.py
/pyproject/api/facebook/xyz.py

从 test.py 导入 abc 和 xyz py 文件:

import api.gmail.abc

结果:

  File "./test.py", line 3, in <module>
    import api.gmail.abc
ImportError: No module named api.gmail.abc

是否有任何想法如何将 xyz/abc 从子目录导入到主 test.py 文件?

【问题讨论】:

【参考方案1】:

做了一些研发之后,已经做了 只需创建__init__.py(一个空的py文件)并将其添加到所有子目录 比如

 /pyproject/
    api/
      __init__.py
      gmail/
          __init__.py
          abc.py

      facebook/
         __init__.py
         xyz.py

并在主py文件中添加

from api.gmail.abc import *
or
import api.gmail.abc

【讨论】:

【参考方案2】:

你需要在每个目录中有一个空的__init__.py 文件,它是一个标记,告诉python这个文件夹是一个模块。我认为它应该可以解决python2的问题。

在 python3 中的导入略有改变,您还需要使用-m 命令行参数。

如果您尝试运行的文件是 .../pyproject/src/scraper.py 您需要将您的工作目录设置为项目根.../pyproject/,然后运行:

python -m src.scraper

在此示例中,我使用了更长的路径来显示子目录由. 而非/ 分隔。在您的情况下,python -m test 应该可以正常工作。

【讨论】:

以上是关于如何从 Python 中的子文件夹导入模块或文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的其他目录导入模块? [复制]

如何从 C# 中的子文件夹导入 .dll 库

(Python第八天)模块

如何在包中只导入没有 exec __init__.py 的子模块

python 从Python中的父文件夹导入模块

python 如何从模块文件夹树导入文件