在我的 Python 项目中,我在导入同级目录时遇到问题。我的文件结构如下:
main_dir/
__init__.py
subdir1/
__init__.py
module1.py
module2.py
subdir2/
__init__.py
module3.py
setup.py
重要的是,
module1.py
从module2.py
导入所有函数,因此在module1.py
中我有以下导入:
from module2 import *
module1.py
中的函数会调用其中的module2.py
中的函数。
跑步
module1.py
显然效果很好。问题是我需要 module3.py
从 module1.py
导入函数。非常清楚的是,在 module3.py
中,我需要从 module1.py
运行一个函数,该函数从其中调用 module2.py
中的函数。
在我项目的其他部分,我一直在努力导入同级目录。我发现适用于 Python 3.8.0-3.12.2 的修复方法是使用
setup.py
文件,并且在需要同级导入的文件中,使用
import sys
sys.path.append('..')
from sibling_dir.module import needed_fun
这一直有效,与我尝试过的任何其他解决方案不同,例如
from ..sibling_dir.module import *
或
from .. import siblingdir.module
。
setup.py
文件如下:
from setuptools import setup, find_packages
setup(name = 'example_name', version = '1.0', packages = find_packages())
(这当然需要安装外部
setuptools
包)
但是,回到主要问题。我需要
module3.py
从 module1.py
导入函数。在module3.py
中,我尝试了通常的设置。由于 module1.py
从 module2.py
导入函数,我也导入 module2.py
的函数:
在
module3.py
import sys
sys.path.append('..')
from subdir1.module2 import *
from subdir1.module1 import *
我也尝试过
import sys
sys.path.append('..')
import subdir1.module2
from subdir1.module1 import *
当我尝试运行
module3.py
时,我得到“没有名为'module2'的模块”。此错误发生在from subdir1.module1 import *
线上。我想知道是否有一些秘密的导入组合来解决这个问题,或者这种结构对我的项目很重要,因为随着项目变得越来越大,某种相对路径是必不可少的,我不能使用绝对路径。 __init__.py
里面有任何东西,它们主要是为了 setuptools
将这些目录视为包(我认为)。
只要同级文件夹位于共享包中,例如 main_dir,您就可以直接从那里导入。
from main_dir.subdir1.module1 import *