gpt4 book ai didi

python 3 : importing different python modules with same name

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:10 24 4
gpt4 key购买 nike

我有几个彼此独立编写的 python 项目(例如 a、b)。我想创建第三个项目(c),它使用这两个项目的例程,而不对(a,b)的主要内容引入太多改动。

如果 (a.py, b.py) 在其各自的项目文件夹中调用时仍然可以工作,则可以对 (a, b) 中的导入语句进行微小的更改。

这个问题有点类似于之前的帖子(Re-importing different python module with same name)但是:

  1. 我使用的是 Python 3,因此相对导入的工作方式似乎有所不同。

  2. 我想知道如何替换下面示例中所示的“from utils import *”行。

  3. 我在当前工作目录下有另一个 utils.py 隐藏项目 a 和 b 中的另一个 utils.py。


例如我的项目如下:

  • 一个
    • a.py
    • 实用程序.py
  • b
    • b.py
    • 实用程序.py
  • c
    • 主要文件
    • 实用程序.py

a/a.py 的内容:

import utils
utils.hello()

a/utils.py 的内容:

def hello():
print('hello from a')

b/b.py 的内容:

from utils import *
hello()

b/utils.py 的内容:

def hello():
print('hello from b')

main.py 的内容

import sys
sys.path.append('../a')
import a
sys.path.append('../b')
import b
import utils

utils.hello()

示例打印(我希望三行分别打印 a,b,c):

hello from c
hello from c
hello from c

在我看来,sys.path.insertsys.append 不是导入模块的好习惯,并且可能使项目容易受到错误的影响,因为项目扩大规模。

最佳答案

I'm using Python 3 so relative imports no longer works.

不确定您为什么得出那个结论,但是:

在 a.py 中:

from .utils import hello # the . is important!
hello()

(在 b.py 和 c.py 中类似)

打印所需的输出

请注意 python 3 中的相对导入需要 from ... import ... 语法


编辑:

如果你的 main.pyc/ 中,你需要改变导入路径,因为相对导入不能超过 python 启动的工作目录(那是为什么在 c 中导入 ab 会出错。

您可以更改环境变量 PYTHONPATH(请参阅 norok's answer),或者您可以在 main.py 中执行此操作:

import sys
sys.path.append('..')
import b.b # no more errors!

请注意,您仍然需要在 a.pyb.pymain.py 中对 utils 进行相对导入

关于 python 3 : importing different python modules with same name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com