23

我有一个包含 good.py 模块的 hello1 包。

hello1
├── __init__.py
└── good.py

init模块有一个变量,我需要在A = 1good.py中访问变量hello1.A。

import hello1

class Good(object):
    def __init__(self):
        print hello1.A

if __name__ == "__main__":
    g = Good()

问题是当我执行 python 脚本时出现ImportError: 'No module named hello1'错误。我可以import sys; sys.path.append("..")在第一行添加good.py快速修复。

但是,good.py 在 hello1 包中,__init__.py 也在其中,所以我想知道是否有办法从同一个包中的模块访问 __init__.py 中的变量。

4

5 回答 5

11

Python:导入包含的包

导入__init__似乎工作正常。

import __init__

class Good(object):
    def __init__(self):
        print hello1.A
于 2013-08-16T14:10:53.960 回答
1

如果你不喜欢 sys.path.append(...) 你可以运行你的脚本

python -m hello1.good

在包含“hello1”目录的目录中或使用 PYTHONPATH 环境变量而不是 sys.path。

于 2013-08-16T13:55:04.637 回答
1

如果我没记错的话,你想做这样的事情:

python hello1/good.py

因为good.py它是一个包的子模块,所以不要直接运行它;请记住,当直接执行它时,它不会被视为hello1包的一部分,这会阻止相对导入,并且当前目录是包含文件的目录,因此hello1如果它不是PYTHONPATH. 相反,您可以使用-mpython 解释器的开关运行它:

-m mod:将库模块作为脚本运行(终止选项列表)

我个人不喜欢使用解释器选项来执行 python 文件。我宁愿有一个独立的启动器文件good.py来导入hello1.good模块并使用它来完成它必须做的事情。

于 2013-08-16T13:57:37.963 回答
1

您必须显式导入要使用的常量。

最好将所有常量放在一个“config”文件(即 config.py)中,然后如果您希望它们在包命名空间中,请导入它们。

初始化.py 文件:

from package.config import *

这样更清楚

于 2013-08-16T14:08:38.293 回答
-1
import __init__

...导致:没有名为“ init ”的模块

于 2022-02-20T17:30:19.820 回答