簡體   English   中英

使用點表示法的Python導入無法按預期進行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM