包括xlrd/xlwt/xlutils以及python安装之外的模块

2024-09-23 20:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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. 不幸的是,情况似乎并非如此。在

谢谢你的关心,任何帮助都将不胜感激。在

另外,我不想修改路径变量,因为我不知道谁将使用这个工具集,权限很可能是一个问题,等等


Tags: path函数frompyinitosmyinstallation
1条回答
网友
1楼 · 发布于 2024-09-23 20:29:31

我意识到我在用冲击加载源不正确。正确的语法应该是:

imp.load_source("xlrd",os.path.join(path,"xlrd","__init__.py"))

XLLS最终导致的问题并不比我需要修改的代码更多。在

相关问题 更多 >