在 Python 3.8+ 中链接同级目录导入

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

在我的 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
将这些目录视为包(我认为)。

python python-3.x python-import
1个回答
0
投票

只要同级文件夹位于共享包中,例如 main_dir,您就可以直接从那里导入。

from main_dir.subdir1.module1 import *
© www.soinside.com 2019 - 2024. All rights reserved.