gpt4 book ai didi

python - pydev - ide 提示模块导入自身

转载 作者:行者123 更新时间:2023-11-28 20:52:02 24 4
gpt4 key购买 nike

注意:我没有接受答案,因为我真正的问题是为什么这被标记为编译错误。我对@TorelTwiddler 的回答投了赞成票,因为他提供了一个解决方法,但我想了解这个问题。


我有一个包含自测代码的简单模块。为了便于在交互式 session 中使用,自测代码会自行重新加载(模块)。

这在 PyDev (RunAs) 和在交互式窗口中运行(在手动修改 sys.path 和导入之后)都可以正常工作;但是 PyDev IDE 仍然在行上给出“编译”/red-X 错误

import Mod1  

我从自身导入 Mod1 的原因是名称必须在运行 Test() 的任何上下文中可解析,以便重新加载成功。例如,如果您从一个新的交互式窗口导入 MyMain,则在没有导入的情况下对 reload 的调用将失败,因为名称 Mod1 未知。

有什么办法可以解决这个问题吗? Mod1 是一个更大项目的一部分,将其始终标记为未编译会使开发变得更加困难...

有问题的模块:

# Mod1.py
def Test():
"""
run the self-test, but first force a reload of the module under test (this mod)
"""
import Mod1 # *****'COMPILE' ERROR HERE******
import imp
Mod1 = imp.reload(Mod1)

TestImpl()

def TestImpl():
"""
self test here
since I reload above, I can change this code and re-run from an interactive window
this has to be a seperate function for the reload in Test to have an effect on this code
"""
print(input("enter"))

仅在 PyDev 中使用的额外 Bootstrap 模块(因此我可以“运行”)

# MyMain.py
import Mod1
Mod1.Test()

PyDev/Project PYTHONPATH(显示正确,此文件夹位于我工作区的根目录)。既然它确实在 PyDev 中运行 OK,那肯定是正确的?

/MyDirectory

谢谢!

最佳答案

如果您在自身内部重新加载一个模块,您会创建一个无限循环,因为您重新加载该模块只是为了再次重新加载该模块,如此反复...

在您的 MyMain.py 中,您可以这样做:

import Mod1
reload(Mod1)

Mod1.Test()

我想如果没有进一步的代码示例,很难准确判断为什么你必须重新加载模块,但如果你必须这样做,那应该可以工作(无需在模块中执行)

关于python - pydev - ide 提示模块导入自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770425/

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