Mat*_*hew 2 python python-import importerror python-3.x python-3.3
我最近在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'
>>>
Run Code Online (Sandbox Code Playgroud)
在命令行中也会发生同样的事情.我想我误解了使用点符号导入时会发生什么; 模块分配给什么名称?
为了解决这个看似问题,我import cx_Freeze.freezer as f在重新启动shell之后尝试了,但是它给出了和以前一样的错误.有人可以解释为什么这些导入语句不允许我访问该模块?
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
Run Code Online (Sandbox Code Playgroud)
对这个问题很重要的部分是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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |