我最近在Python3.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时会发生什么;模块被分配到什么名称?
为了解决这个看起来有问题的问题,我在重启shell之后尝试了
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
包,第二行使cx_Freeze.freezer
不直接可用。因此,您可能应该只使用cx_Freeze
;它包含了cx_Freeze.freezer
的所有外部使用部分。如果您需要cx_Freeze.freezer
,可能需要使用一些私有功能,您可以在sys.modules
中找到它:import sys
freezer = sys.modules['cx_Freeze.freezer']
关于python - 使用点表示法的Python导入无法按预期进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25234839/