gpt4 book ai didi

Python 相对导入以从随机目录调用脚本

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:46 25 4
gpt4 key购买 nike

我有以下目录结构:

test1/
test1/a.py
test1/test2/b.py

b.py需要导入a.py中的类。所以我可以在导入 a 之前将以下行添加到 b.py 中。

sys.path.append(os.path.dirname(sys.argv[0]) + "/..")

这有效,我可以从任何目录调用 b.py 并且它能够导入 a.但是当我在另一个目录中编写脚本以使用 execfile() 调用该文件时,这会失败。

我尝试了相对导入,但收到“尝试在非包中进行相对导入错误”

from ..a import someclass as cls

我在 test1 和 test2 中都有 __init__.py

有人知道如何让它发挥作用吗?PYTHONPATH 是正确的选择吗?

最佳答案

问题是 execfile 会将您调用的文件评估为纯 python 代码。 b.py 中的每个相对导入语句(以及由它导入的任何包模块)都必须与您的调用脚本保持一致。

一种解决方案是不在包内使用任何相对导入路径。确保 test1 包也在您的 PYTHONPATH 上。

b.py

from test1 import a

在 PYTHONPATH 中添加 test1 后,a 的导入应该会在 execfile 中成功

>>> import sys
>>> sys.path.append('/path/to/parent/of_test1')
>>> execfile('/path/to/parent/of_test1/test1/test2/b.py')

关于Python 相对导入以从随机目录调用脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11092693/

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