我在Python世界自学成才,所以有些结构约定对我来说还是有点模糊。然而,我已经接近了我想要完成的目标,但是却遇到了一个更大的问题。在
基本上,我有一个类似这样的目录结构,它将位于普通python安装之外(这将分发给那些不必知道python安装是什么的人,但是将拥有ArcGIS标准的安装):
top_directory/
ArcToolbox.tbx
scripts/
ArcGIStool.py (script for the tool in the .tbx)
pythonmod/
__init__.py
general.py
xlrd/ (copied from my own python installation)
xlwt/ (copied from my own python installation)
xlutils/ (copied from my own python installation)
所以,我喜欢这个目录结构,因为ArcGIStool.py脚本调用pythonmod包中的函数(类似于通用.py),以及所有通用.py函数可以用简单的“import xlrd”语句调用xlrd和xlwt函数。这意味着,如果用户需要,他/她只需将pythonmod文件夹移动到python site packages文件夹中,即使xlrd/xlwt/xlutils已经安装,一切都会正常运行。在
问题是: 一切都很好,直到我尝试在通用.py. 具体来说,我需要“从xlutils.copy.复制“导入副本”。但是,这会引发一连串的导入错误。一个是xlutils/复制.py使用“来自”xlutils.filter导入过程,XLRDReader,XLWTWriter”。我通过修改xlutils解决了这个问题/复制.py像这样:
^{pr2}$我认为这在其他情况下也能正常工作,但是xlutils包中有一些模块需要导入xlrd。我试着遵循this建议,但是当我使用
try:
import xlrd
except ImportError:
import os, sys, imp
path = os.path.dirname(os.path.dirname(sys.argv[0]))
xlrd = imp.load_source("pythonmod.xlrd",os.path.join(path,"xlrd","__init__.py"))
我得到一个新的导入错误:在xlrd/init.py中,信息模块被调用(从xlrd/信息py),但当我使用上面的代码时,我得到一个错误,说“info”这个名称没有定义。在
这让我相信我不知道到底发生了什么,因为我认为当init.py文件被导入时,它会像普通文件一样运行,并在其包含的文件夹中查找信息py. 不幸的是,情况似乎并非如此。在
谢谢你的关心,任何帮助都将不胜感激。在
另外,我不想修改路径变量,因为我不知道谁将使用这个工具集,权限很可能是一个问题,等等
我意识到我在用冲击加载源不正确。正确的语法应该是:
XLLS最终导致的问题并不比我需要修改的代码更多。在
相关问题 更多 >
编程相关推荐