首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入模块,而不导入模型导入

导入模块,而不导入模型导入
EN

Stack Overflow用户
提问于 2013-04-12 17:05:49
回答 2查看 1.7K关注 0票数 1

我试图导入python模块,而不导入该模块。我只是研究了一下,但是在导入文件时排除运行任何命令的唯一方法是if __name__ == "__main__":,但是模块也是由其他模块导入的,这些模块使模块导入,所以我不能将导入放在if __name__ == "__main__":下面--知道如何解决这个问题吗?

我不想导入这个模块的原因是,这些模块也可以从和导入java.lang函数中运行。我只需要访问该文件中的几个函数,而不需要全部访问,导入这些模块就会破坏make。我试图访问的函数不需要模块ahs的任何依赖项。

我通过‘从moduleX导入f1,f2,f3’导入

EN

回答 2

Stack Overflow用户

发布于 2013-04-12 18:07:10

您可以使用导入钩子来解决这个问题。sys.meta_path变量是可以覆盖正常导入处理的进口商列表。您可以使用它们对只存在于Jython中的模块进行存根。下面是一个例子:

代码语言:javascript
复制
import types, sys

class Stub(object):
    def __getattr__(self, name):
        return self

class StubModule(types.ModuleType):
    def __getattr__(self, name):
        return Stub()

class StubJavaImporter(object):
    def find_module(self, fullname, path = None):
        if fullname == 'java' or fullname.startswith('java.'):
            return self
        else:
            return None

    def load_module(self, fullname):
        mod = sys.modules.setdefault(fullname, StubModule(fullname))
        mod.__file__ = "<%s>" % self.__class__.__name__
        mod.__loader__ = self
        mod.__path__ = []
        mod.__package__ = fullname
        return mod

sys.meta_path.append(StubJavaImporter())

运行此代码后,您可以导入以java.开头的任何模块,并访问其中的任何属性路径。例如:

代码语言:javascript
复制
In [2]: from java.lang import Object

In [3]: Object.equals
Out[3]: <__main__.Stub at 0x14d8b90>

In [4]: Object
Out[4]: <__main__.Stub at 0x14d8b90>

In [5]: Object.foo.bar.baz
Out[5]: <__main__.Stub at 0x14d8b90>

这可能就足以让事情运转起来。这是一个讨厌的,讨厌的黑客,但如果你真的不能修改冒犯的模块,这可能是你能做的最好的。

票数 0
EN

Stack Overflow用户

发布于 2013-04-12 17:22:57

如果您想使用from module import *而不包括在module中导入的所有内容,那么您应该在module中定义变量__all__。这个变量应该是一个字符串列表,命名应该导入的类、变量、模块等。

来自python文档

如果标识符列表被星号(*)替换,则模块中定义的所有公共名称都绑定在导入语句的本地命名空间中。

由模块定义的公共名称是通过检查模块名称空间中名为__all__的变量来确定的;如果定义了,则必须是由该模块定义或导入的字符串序列。__all__中给出的名称都被认为是公共的,并且必须存在。如果未定义__all__,则该公共名称集包含模块名称空间中的所有名称,这些名称不以下划线字符(_) .开头,目的是避免意外导出不属于的项(例如在模块中导入和使用的库模块)。(强调地雷)

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

https://stackoverflow.com/questions/15977072

复制
相关文章

相似问题

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