如何从 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
的子目录,其中有两个名为gmail
和facebook
的子目录,并且在这两个目录中都有.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 中的子文件夹导入模块或文件?的主要内容,如果未能解决你的问题,请参考以下文章