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

时间:2017-12-19 12:58:24

标签: python

有一个文件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文件?

2 个答案:

答案 0 :(得分:1)

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

在python3中,导入稍有变化,你还需要使用-m命令行参数。

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

python -m src.scraper

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

答案 1 :(得分:0)

做了一些R&amp; D之后,已经完成了 只需创建select b.Name as BranchName, COUNT(t.Id) as Transactions, SUM(ti.Pages * ti.Rate) - SUM(t.Commission) as TotalSales, SUM(ISNULL(ti.Pages, 0)) as Pages from Sales.Branch b left join Sales.[Transaction] t on b.Id = t.BranchId and t.Date >= '2017-11-01' AND t.Date < '2017-12-01' left join Sales.TransactionItem ti on ti.TransactionId = t.Id group by b.Name order by b.Name ASC (一个空的py文件)并将其添加到所有子目录 比如

__init__.py

并添加主py文件

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

      facebook/
         __init__.py
         xyz.py
相关问题