从Python中的子文件夹导入
情况就是这样。我正在使用Python 3.6 我当前有下一个文件夹组织:从Python中的子文件夹导入,python,import,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。在pyscript
/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'
ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a
package
我也试过:
from .Utils import script1
给出错误:
ImportError: cannot import name 'Folder1'
ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a
package
我知道我可以通过以下方式使用sys和os解决它:
sys.path.append(os.path.realpath('../..'))
但我想知道,如果不使用sys,这是否可行。您可以使用
from..Folder1导入pyscript1
在pyscript3.py中
但是您必须从父模块或main项目中加载pyscript3。注意,
Folder1
是一个目录,.py
脚本是您的模块
在pyscript3
中,您应该能够:
from Folder1 import pyscript1
然后可以访问名为methodname
的方法,如:
pyscript1.methodname()
否则,您可以直接导入方法,如下所示:
from Folder1.pyscript1 import methodname
然后像这样使用它:
methodname()
编辑:
要让程序查看Folder1
和Folder2
,需要从MainProject
文件夹运行程序
要么将pyscript3
移动到您的main文件夹
,要么编写另一个脚本,让我们调用它main.py
,并调用必要的代码来实例化类/调用您想要在pyscript3.py
中使用的函数
总而言之,您总是希望从项目的基本文件夹运行entry模块。这是两个级别以上的模块,不起作用,而且我无法从父模块加载pyscript3,如果我使用..Folder1,则会给出:ValueError:尝试在顶级包之外进行相对导入这是我评论的问题,I Get ModuleNotFoundError:没有名为“Folder1”的模块您无法导入Folder1,但可以从Folder1导入脚本。您是否可以展开主项目文件夹?入口点在哪里?我正在尝试从pyscript3到pyscript1,入口点应该是pyscript3。能否显示main.py或等效文件?大概它在MainProject文件夹中?还有,你是如何运行你的程序的?简单地
python main.py
?