变量isDevelopment
位于manager/__init__.py
文件中:
isDevelopment = True
在同一目录中,文件fusion.py
尝试在文件级别导入它:
from . import isDevelopment
注意:pycharm
与其矛盾:在任何情况下都不会标记导入:
尝试从其他位置导入它时,例如..
pycharm确实抱怨:
运行时
python3 manager/fusion.py
发生以下情况:
ImportError: cannot import name 'isDevelopment' from '__main__'
根据其中一项建议进行的另一尝试:
from ..manager import isDevelopment
结果是:
ValueError: attempted relative import beyond top-level package
为什么import
尝试失败了?需要更改什么?
答案 0 :(得分:1)
./test.py
./manager/__init__.py
./manager/fusion.py
isDevelopment = True
from . import isDevelopment
def checkDevelopment():
print("isDevelopment = {0}".format(isDevelopment))
import manager
if __name__ == "__main__":
print("isDevelopment = {0}".format(manager.isDevelopment))
manager.checkDevelopment()
python3 ./test.py
isDevelopment = True
isDevelopment = True
您是要执行manager / fusion.py来设置模块还是要使其成为可执行应用程序的一部分?如果您只是想知道管理器模块中isDevelopment的值,则可以实现。如果您希望管理器中包含可执行功能,请使用setup.py
探索入口点。答案 1 :(得分:0)
__init__.py
用于初始化程序包。根据{{3}}
包的用户可以从包中导入各个模块
您不导入__init__.py
中的内容,而是在导入时自动运行。
在最简单的情况下, init .py只能是一个空文件,但它也可以执行该程序包的初始化代码
由于isDevelopment
是不是模块,因此您无法导入它!如果您有另一个模块fusion2.py
,则可以使用
from . import fusion2
在那里您应该可以看到isDevelopment
。