[英]Python import using dot notation doesn't work as expected
我最近在Python 3.3.2中安装了一个库。 我试图从中这样导入一个模块: import cx_Freeze.freezer
。 但是,cx_Freeze.freezer没有按照我的预期定义,如IDLE所示:
>>> ================================ RESTART ================================
>>> import cx_Freeze.freezer
>>> cx_Freeze.freezer
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
cx_Freeze.freezer
AttributeError: 'module' object has no attribute 'freezer'
>>>
命令行中发生相同的事情。 我想我误解了当您使用带点表示法的import时会发生什么。 模块被分配给哪个名称?
为了解决这个看似的问题,我在重新启动外壳程序后尝试import cx_Freeze.freezer as f
,但是该错误与以前相同。 有人可以解释一下为什么这些导入语句不让我访问该模块吗?
cx_Freeze/__init__.py
具有以下内容:
version = "5.0"
import sys
from cx_Freeze.dist import *
if sys.platform == "win32":
from cx_Freeze.windist import *
elif sys.platform == "darwin":
from cx_Freeze.macdist import *
from cx_Freeze.finder import *
from cx_Freeze.freezer import *
from cx_Freeze.main import *
del dist
del finder
del freezer
对于此问题重要的部分from cx_Freeze.freezer import *
和del freezer
。 这些行的第一cx_Freeze.freezer.__all__
列出的cx_Freeze.freezer.__all__
直接导入到cx_Freeze
包中,第二cx_Freeze.freezer
不直接可用。 因此,您可能应该只使用cx_Freeze
; 它包含cx_Freeze.freezer
所有供外部使用的部分。 如果您需要cx_Freeze.freezer
,也许要使用某些私有功能,可以在sys.modules
找到它:
import sys
freezer = sys.modules['cx_Freeze.freezer']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.