2

我正在创建一个独立的 python 工具,位于一个目录中,我希望我的一些同事能够使用包含 numpy 和 matplotlib 的标准 python 发行版运行该工具。我不希望他们必须安装额外的库。

─myprogram
 |   __main__.py
 |   [...other .py files...]
 ├───datafiles
 ├───sandbox
 └───xlrd
     ├───doc
     └───examples

我正在使用该xlrd库,该库包含在我的程序分发中,因此他们不必安装它。

我已经测试了我的程序以确保它可以与 Enthought EPD、PortablePython 和 PythonXY 一起使用。

这是问题所在:PythonXY 可以与 xlrd 库一起安装。当我用 PythonXY 运行我的程序时,我收到了这个警告:

c:\app\python\pythonxy-2.7.5.0\lib\site-packages\scikits\__init__.py:1:
UserWarning: Module xlrd was already imported from myprogram\xlrd\__init__.pyc,
but c:\app\python\pythonxy-2.7.5.0\lib\site-packages is being added to sys.path
   __import__('pkg_resources').declare_namespace(__name__)

如何调整我的源代码,使其仅导入我提供的嵌入式 xlrd 库,而不是已安装的库(如果已安装)?


澄清:

  1. 除了打印的警告之外,是否会发生任何副作用?我希望使用 xlrd 的嵌入式版本,而不是安装在 python 中的全局副本。
  2. 如果没有问题,我怎样才能只为这个库禁止这个警告?
4

1 回答 1

2

重命名myprogram\xlrdmyprogram\frozen_xlrd. 然后用

try:
    import xlrd
except ImportError:
    import frozen_xlrd as xlrd

或者,您可以告诉 Python 默默地忽略这个特定的UserWarning

import warnings
warnings.filterwarnings("ignore", 
                        message="Module xlrd was already imported", 
                        category=UserWarning)

scikits在导入之前将其放在程序中的早期。

于 2013-06-19T22:24:31.633 回答