【发布时间】:2014-10-15 12:35:09
【问题描述】:
我在导入自制模块时遇到了一些麻烦,我只是看不到我做错了什么。
我有一个名为 basics 的包,其中包含我所有的基类 我有第二个名为 components 的包,components 中的每个模块都使用基础模块。 我有一个脚本文件,位于另一个文件夹中,它调用基础和组件模块。
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "H:/scripts/CIF_utilities/scripts/hello world.py", line 11, in <module>
TW=TextWriter(r'H:/scripts/CIF_utilities/components')
File "H:\scripts\CIF_utilities\components\textwriter.py", line 23, in __init__
layout=Layout(File=os.path.join(path,'alphabet.CIF'))
NameError: global name 'Layout' is not defined
有我的脚本:hello world.py
#hello world.py
import basics
from components.textwriter import *
TW=TextWriter(r'H:/scripts/CIF_utilities/components')
cell=TW.writeText('Hello World',30e3)
cell.draw()
layout=Layout()
layout.addCell(cell)
layout.workCell=cell
layout.exportCIF('hello world',os.getcwd())
textwriter.py 是给出错误的那个。在 init 中,我使用 Layout 类从预先格式化的文件中加载一些数据(这将进行导入) 在 textwriter.py 中
#texwriter.py
import basics
import os, os.path, sys
import re
from numpy import *
from scipy import *
class TextWriter:
def __init__(self,pathToCIF=None):
if pathToCIF==None:
path=os.path.split(textwriter.__file__)[0]
else:
path=pathToCIF
###line that crashes is here
layout=Layout(File=os.path.join(path,'alphabet.CIF'))
self.alphabet=layout.workCell
还有 layout.py 类:
#layout.py
import basics
from numpy import *
from scipy import *
import Tkinter
import tkFileDialog
import os, os.path
import re
import datetime
class Layout:
countCell=0
@classmethod
def getNewNumber(self):
Layout.countCell+=1
return Layout.countCell
def __init__(self,File=None):
self.cellList=[]
self.layerList=[]
self.nameFile=""
self.comments=""
self.workCell=None
if File!=None:
self.importCIF(File)
基础包的 init.py 包含所有必要的导入:
#__init__.py in basics folder
from baseElt import *
from cell import *
from layout import *
from transformation import *
组件中的 init.py 为空
我目前正在使用 anaconda 64 位发行版(如果我没记错的话是 python 2.7)
感谢您急需的帮助!
【问题讨论】:
-
不应该是
basics.Layout(...)(或from basics import Layout)吗? -
我将“import basics”更改为“from basics import *”,现在可以了!我会用一些更高级的脚本再试一次,看看它是否也适用
标签: python python-2.7 namespaces python-import