首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python包-覆盖内置包和可怕的“模块xxxx已经导入”警告

python包-覆盖内置包和可怕的“模块xxxx已经导入”警告
EN

Stack Overflow用户
提问于 2013-06-19 22:13:17
回答 1查看 1K关注 0票数 2

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

代码语言:javascript
复制
─myprogram
 |   __main__.py
 |   [...other .py files...]
 ├───datafiles
 ├───sandbox
 └───xlrd
     ├───doc
     └───examples

我使用的是xlrd库,我把它包含在程序发行版中,这样他们就不必安装它了。

我已经测试了我的程序,以确保它与环境保护署,PortablePython和PythonXY一起工作。

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

代码语言:javascript
复制
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库,而不导入已安装的xlrd库?

澄清:

  1. 除了打印的警告外,还有什么副作用会发生吗?我希望使用xlrd的嵌入式版本,而不是安装在python中的全局副本。
  2. 如果没有什么问题,我如何才能抑制此库的警告呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-19 22:24:31

myprogram\xlrd重命名为myprogram\frozen_xlrd。然后用

代码语言:javascript
复制
try:
    import xlrd
except ImportError:
    import frozen_xlrd as xlrd

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

代码语言:javascript
复制
import warnings
warnings.filterwarnings("ignore", 
                        message="Module xlrd was already imported", 
                        category=UserWarning)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17202297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档