用python从不同模块进行绝对导入的最佳方法

2024-10-02 20:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法在python项目中执行绝对导入。我提到了Importing modules from parent folder,但是所有的方法都有一些缺点

下面是我的目录结构。我所有的源代码都存在于Bank/src/

structure

文件内容是

模块1A.py

DEMO = '123'

模块2a.py

from module1.module1a import DEMO
print (DEMO)

a.py

from module1 import module1a
print (module1a.DEMO)

我想从银行目录执行我的代码

当我执行a.py时,它工作

(base) ➜  Bank python src/a.py
123

执行module2a.py时失败

(base) ➜  Bank python src/module2/module2a.py
Traceback (most recent call last):
  File "src/module2/module2a.py", line 1, in <module>
    from module1.module1a import DEMO
ModuleNotFoundError: No module named 'module1'

是的,我的src不在PYTHONPATH中这就是它失败的原因

我尝试了以下方法,所有的工作

方法1:

(base) ➜  Bank PYTHONPATH=src python src/module2/module2a.py
123

这是个好习惯吗

方法2:

用这样的东西

import os
import sys
currentdir = os.path.dirname(os.path.realpath(__file__))
parentdir = os.path.dirname(currentdir)
sys.path.append(parentdir)

问题:我需要将它添加到我执行的所有python文件中(在项目中有多个入口点的情况下)

方法3:

通过使用setuptools创建设置

from setuptools import setup, find_packages

setup(name='myproject', version='1.0', packages=find_packages())

问题:由于我的代码在src目录中,我无法更改包名,我必须像from src.module1.module1a import DEMO那样导入,我需要像from myproject.module1.module1a import DEMO这样的东西


Tags: path方法frompyimportsrc目录base