我正在创建一个独立的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库,而不导入已安装的库,如果安装了一个?
澄清:
答案 0 :(得分:2)
将myprogram\xlrd
重命名为myprogram\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
之前,将其放在程序中。