访问子目录中的模块

问题描述 投票:0回答:1

我正在组织系统脚本,并尝试正确划分脚本。

我尝试使用

__init__.py
文件和动态调用,但它只是说找不到该文件

结构:

Main Folder
    Module_Folder
        Portal_Modules
            Log_In.py
    Script_Folder
        Contractors
            Contractor_Management.Py

我添加了以下内容

Main Folder
    Module_Folder
        __init__.py
        Portal_Modules
            __init__.py
            Log_In.py
    Script_Folder
        Contractors
            Contractor_Management.Py

模块文件夹

__init__.py
from Module_Folder.Portal_Modules.Log_In import Log_in

门户模块

__init__.py
from Portal_Modules.Log_In import Log_in

承包商_管理.Py

import Modular_Folder

我尝试了一些不同的变化,包括

sys.path
也做
from Modular_Folder.Partal_Modules.Log_In import Log_In

这是错误

ModuleNotFoundError: No module named 'functions_modules.mods_argis_portal'
python
1个回答
0
投票

首先,Python 模块(里面有

__init__.py
文件的文件夹)应该全部小写,单词之间用下划线分隔。所以
Module_Folder
Portal_Module
可以写成
modules
(这里文件夹是多余的)和
portal_module
(你也可以放弃模块后缀,但这里并没有那么糟糕)。另外,如果 Log_In 是一个函数,它也应该是小写的(即
log_in
)。只有类遵循驼峰命名法(即
LogIn
而不是
Log_In
)。

两个

__init__.py
文件中的导入都是不正确的:除非您在
PYTHONPATH
变量中指定它们,否则它们不知道其父级。您可以尝试通过这样设置导入:我假设
Log_In
是一个函数。

#modules/__init__.py
from portal_module.log_in import log_in

通过执行此操作,您无需修改

portal_module/__init__.py
中的文件,因为您正在使
log_in
函数可用于父文件夹 (
modules
),因此您将能够执行以下操作:

from modules import log_in

在你的情况下,我宁愿做其他事情,即直接从portal_module导入,首先将其导入到

portal_module/__init__.py
文件中,如下所示:

#portal_module/__init__.py
from log_in import log_in

然后像这样导入

log_in
函数:

#Any other py file under Main Folder
from modules.portal_module import log_in

因此,如果任何其他模块具有

log in
函数,您就可以明确要导入哪个
log in
函数。

© www.soinside.com 2019 - 2024. All rights reserved.