首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python模块名称冲突

Python模块名称冲突
EN

Stack Overflow用户
提问于 2011-05-09 21:46:11
回答 4查看 7.5K关注 0票数 10

我遇到了两个Python模块,它们必须使用相同的模块名称导入,例如

代码语言:javascript
复制
import foo

我知道我想要的那个模块提供了特定的功能(例如foo.bar()),那么有没有办法循环使用相同名称的模块,直到我找到提供这些功能的模块?或者除了在安装前重命名模块之外别无选择?

编辑:只是为了澄清我的意思,这两个模块都在site-package中:

代码语言:javascript
复制
site-packages$ ls python_montage-0.9.3-py2.6.egg
EGG-INFO montage
site-packages$ ls montage-0.3.2-py2.6.egg/
EGG-INFO montage
EN

回答 4

Stack Overflow用户

发布于 2011-05-09 22:06:58

以下是一种方法:

代码语言:javascript
复制
import imp
import sys


def find_module(name, predicate=None):
    """Find a module with the name if this module have the predicate true.

    Arguments:
       - name: module name as a string.
       - predicate: a function that accept one argument as the name of a module and return
             True or False.
    Return:
       - The module imported
    Raise:
       - ImportError if the module wasn't found.

    """

    search_paths = sys.path[:]

    if not predicate:
        return __import__(name)

    while 1:
        fp, pathname, desc = imp.find_module(name, search_paths)
        module = imp.load_module(name, fp, pathname, desc)

        if predicate(module):
            return module
        else: 
            search_paths = search_paths[1:]

我敢打赌,有一些角落我没有考虑到,但希望这能给你一些想法。

注:如果可能的话,我认为最好的办法就是重命名你的模块。

注2:正如我在你编辑的答案中看到的那样,不幸的是,这个解决方案将不起作用,因为两个模块存在于同一个目录(site-packages/)中。

票数 6
EN

Stack Overflow用户

发布于 2011-05-09 22:45:14

有一些方法可以绕过两个具有相同名称限制的模块,但除非您这样做只是出于教育目的,否则我不建议这样做。最终的结果将是令人困惑和不可维护的。我强烈建议重命名其中一个或两个模块,而不是胡乱处理与Python导入相关的晦涩特性。

票数 3
EN

Stack Overflow用户

发布于 2011-05-09 21:54:18

因为Python2.5 (and PEP 328)绝对导入是在python中管理模块的首选方法。在你的例子中,你的模块树肯定是这样的:

代码语言:javascript
复制
/src/first_level/foo
                /other_foo
    /second_level/foo # with the bar method

如果您想将foo模块与bar方法一起使用,请使用以下命令:

代码语言:javascript
复制
import second_level.foo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5937739

复制
相关文章

相似问题

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