在Python中从子文件夹导入

时间:2018-07-11 23:19:20

标签: python import

这种情况。我正在使用Python 3.6

我目前有下一个文件夹组织:

/MainProject
  __init__.py
    /Folder1
      pyscript1.py
      pyscript2.py
      __init__.py
    /Folder2
      pyscript3.py
      __init__.py

因此,我正在尝试从pyscript3获得pyscript1.py中存在的功能。我还在每个级别添加了一个 init .py。在pyscript3.py内部,我尝试了以下操作:

from . import Folder1

给出错误:

ImportError: cannot import name 'Folder1'

我也尝试过:

from .Utils import script1

给出错误:

ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a 
package

我知道我可以通过以下方式使用sys和os来解决它:

sys.path.append(os.path.realpath('../..'))

但是我想知道在不使用sys的情况下是否有可能。

2 个答案:

答案 0 :(得分:1)

请注意,Folder1是目录,.py脚本是您的模块。

pyscript3中,您应该可以:

from Folder1 import pyscript1

然后,您可以访问名称为methodname的方法,例如:

pyscript1.methodname()

否则,您可以直接导入该方法,例如:

from Folder1.pyscript1 import methodname

并像这样使用它:

methodname()

编辑:

要让您的程序看到Folder1Folder2,您需要从MainProject文件夹中运行程序。

pyscript3移至MainFolder或编写另一个脚本,我们将其称为main.py,然后调用必要的代码以实例化类/在{{1 }}。

总而言之,您始终希望从项目的基本文件夹中运行入口模块。

答案 1 :(得分:0)

您可以使用 from ..Folder1 import pyscript1 在pyscript3.py中 但是您必须从父模块或在MainProject中加载pyscript3。