我对导入工作有点困惑。假设:
package/
__init__.py
file1.py
在__init__.py
:
from file1 import AClass
__version__ = '1.0'
在file1.py
:
Class AClass(object):
def bar():
# I want to use __version__here, but don't want to pass
# it through the constructor. Is there any way?
pass
如果我在from . import __version__
中使用file1.py
,则只会说ImportError: cannot import name __version__
。
答案 0 :(得分:6)
你有一个循环依赖,因为两个文件互相尝试import
。将__version__
移至单独的模块,例如package/version.py
,然后使用
from .version import __version__
答案 1 :(得分:3)
尝试:
__version__ = '1.0'
from file1 import AClass
您需要在导入模块之前分配常量,以便在尝试导入模块时将其保留到位。
编辑: larsmans建议避免循环依赖是一个好主意。