Python3 从不同文件导入模块
Python3 Module import from different files
我在 python 中有一个项目使用与此类似的文件结构:
program/
main.py
SubFolder/
module1.py
module2.py
TestFolder/
test.py
在此结构中,main.py
导入 module2.py
,module2.py
导入 module1.py
。另外 test.py
导入 module2.py
.
这个文件夹结构中的导入有两个问题。
当运行宁main.py
时,module2.py
中的导入如下:
from SubFolder.module1 import *
此处 main.py
的文件夹设置为根文件夹,所有导入均从那里完成。而当我 运行 module2.py
直接导入时应该如下:
from module1 import *
因为现在根文件夹是module2.py
的文件夹。这是一个问题,因为现在从不同的文件 运行ning 时需要不断更改导入语句。有解决办法吗?
第二个问题是当我想运行test.py
时,这个文件导入module2.py
。导入方式应该是:
from ..SubFolder.module2 import *
但这给出了以下错误信息:
from ..SubFolder.module2 import *
ImportError: attempted relative import with no known parent package
我已经查看了很多解决方案,但找不到有效的解决方案。有什么办法可以解决这个问题吗?
有没有人可以向我解释如何解决这些问题?
我已经看过这个:Relative imports in Python 3,但这并不能解决我的问题。
我建议您只在子文件夹中创建空 __init__.py
文件,然后按如下方式导入它: from subFolder.module1 import *
.
创建一个 __init__
文件
program/
main.py
SubFolder/
__init__.py
module1.py
module2.py
TestFolder/
test.py
在__init__.py
中,导入同一目录下的所有文件
from SubFolder.module1 import *
from SubFolder.module2 import *
在 main.py
中,导入子文件夹
from Subfolder import *
function_inside_module1()
现在您可以访问模块 1 和模块 2 中的任何对象。
__init__.py
在 class 函数中的工作方式与 def __init__
相同,
一旦导入父目录(模块),它将自行执行。
所以在main.py
中,它将被执行为:
from SubFolder.module1 import *
from SubFolder.module2 import *
function_inside_module1()
注意:使用import Subfolder
你需要这样调用函数:
import Subfolder
Subfolder.function_inside_module1()
我们现在来看模块2的导入问题,这个在创建__init__.py
的时候就已经解决了。因为现在 python 将其视为一个模块,可以在任何地方导入。
在模块 2 中,
from SubFolder.module1 import *
现在可以在任何工作目录下工作
与 test.py
、
相同
from SubFolder.module2 import *
也适用于 test.py
警告:不要在模块文件中执行此操作并期望正常结果
# in module1:
from SubFolder.module1 import *
# AND in module2:
from SubFolder.module2 import *
这将导致循环导入并导致导入错误或名称未定义
我在 python 中有一个项目使用与此类似的文件结构:
program/
main.py
SubFolder/
module1.py
module2.py
TestFolder/
test.py
在此结构中,main.py
导入 module2.py
,module2.py
导入 module1.py
。另外 test.py
导入 module2.py
.
这个文件夹结构中的导入有两个问题。
当运行宁main.py
时,module2.py
中的导入如下:
from SubFolder.module1 import *
此处 main.py
的文件夹设置为根文件夹,所有导入均从那里完成。而当我 运行 module2.py
直接导入时应该如下:
from module1 import *
因为现在根文件夹是module2.py
的文件夹。这是一个问题,因为现在从不同的文件 运行ning 时需要不断更改导入语句。有解决办法吗?
第二个问题是当我想运行test.py
时,这个文件导入module2.py
。导入方式应该是:
from ..SubFolder.module2 import *
但这给出了以下错误信息:
from ..SubFolder.module2 import *
ImportError: attempted relative import with no known parent package
我已经查看了很多解决方案,但找不到有效的解决方案。有什么办法可以解决这个问题吗?
有没有人可以向我解释如何解决这些问题?
我已经看过这个:Relative imports in Python 3,但这并不能解决我的问题。
我建议您只在子文件夹中创建空 __init__.py
文件,然后按如下方式导入它: from subFolder.module1 import *
.
创建一个 __init__
文件
program/
main.py
SubFolder/
__init__.py
module1.py
module2.py
TestFolder/
test.py
在__init__.py
中,导入同一目录下的所有文件
from SubFolder.module1 import *
from SubFolder.module2 import *
在 main.py
中,导入子文件夹
from Subfolder import *
function_inside_module1()
现在您可以访问模块 1 和模块 2 中的任何对象。
__init__.py
在 class 函数中的工作方式与 def __init__
相同,
一旦导入父目录(模块),它将自行执行。
所以在main.py
中,它将被执行为:
from SubFolder.module1 import *
from SubFolder.module2 import *
function_inside_module1()
注意:使用import Subfolder
你需要这样调用函数:
import Subfolder
Subfolder.function_inside_module1()
我们现在来看模块2的导入问题,这个在创建__init__.py
的时候就已经解决了。因为现在 python 将其视为一个模块,可以在任何地方导入。
在模块 2 中,
from SubFolder.module1 import *
现在可以在任何工作目录下工作
与 test.py
、
from SubFolder.module2 import *
也适用于 test.py
警告:不要在模块文件中执行此操作并期望正常结果
# in module1:
from SubFolder.module1 import *
# AND in module2:
from SubFolder.module2 import *
这将导致循环导入并导致导入错误或名称未定义