gpt4 book ai didi

python 模块和导入

转载 作者:行者123 更新时间:2023-11-30 22:54:41 24 4
gpt4 key购买 nike

如果这是我的目录树

temp
├── __init__.py
└── __main__.py

0 directories, 2 files

我在 __init__.py__main__.py

中有以下代码

__init__.py
"""Initializes the module"""

CONSTANT = 1
sys.exit("what is happening here")

__main__.py
# from . import CONSTANT
# from temp import CONSTANT
if __name__ == "__main__":

print "This should never run"

我在这里遇到两个问题,我正在尝试解决

temp 目录中运行 python . 时,我得到输出这永远不应该运行,模块不应该首先使用 __init__.py 文件初始化,从而导致中止吗?

第二,我如何在 python 模块中进行导入?我上面提到的两个选项都不起作用。我也不能做 from 。 import CONSTANT 也不是上面代码中的 from temp import CONSTANT 。进行相对进口的正确方法是什么?

我在 Python 2.7.5 上运行这个,如果之前已经有人问过这个问题,我深表歉意。

最佳答案

您应该从 temp 目录运行它。如果 someDir 包含您的 temp 目录,则:

someDir $ python -m temp   #someDir/temp/__init__.py is your file.
<小时/>

On running python . in the temp directory I get the output This should never run, shouldn't the module be initialized first with the init.py file resulting in the abort?

如果您从外部运行它,__init__.py 将被调用。并且 sys.exit 也会被调用。

<小时/>

Second how do I go about doing imports in python modules? Neither of the two options I have mentioned above works. I can neither do from . import CONSTANT nor from temp import CONSTANT in the code above. What is the right way to do relative imports?

你做得很好。只需在 __init__.py 文件中导入 sys 即可。并修正 CONSTANT 的拼写。

<小时/>

Also why do I need the -m flag? Isn't it ok to just do python temp from the parent directory of temp?

您需要 -m 标志来表明您正在使用包。如果您不使用它,您将无法进行相对导入。

关于python 模块和导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685664/

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