首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从__init__.py导入Python中的文件

从__init__.py导入Python中的文件
EN

Stack Overflow用户
提问于 2009-07-29 15:29:27
回答 3查看 11.9K关注 0票数 13

假设我有以下结构:

代码语言:javascript
运行
复制
app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py、b.py和c.py共享一些公共导入(日志、os、re等)。是否可以从__init__.py文件中导入这三个或四个通用模块,这样我就不必在每个文件中都导入它们?

编辑:我的目标是避免在每个文件中导入5-6个模块,这与性能原因无关。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-29 15:33:20

不,它们必须放在每个模块的名称空间中,所以您必须以某种方式导入它们(除非您将logging作为函数参数传递,至少可以说这是一种奇怪的处理方式)。

但是这些模块只导入一次(然后放入abc名称空间),所以不用担心使用太多内存或类似的东西。

当然,您可以将它们放入一个单独的模块中,然后将其导入到每个abc中,但每次都必须导入这个单独的模块。

票数 11
EN

Stack Overflow用户

发布于 2009-07-29 15:38:33

您可以使用通用文件(如include.py )来完成此操作,但这与推荐的做法背道而驰,因为它涉及通配符导入。考虑以下文件:

代码语言:javascript
运行
复制
app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

现在,在a.py等代码中,执行以下操作:

代码语言:javascript
运行
复制
from include import *

如上所述,不推荐这样做,因为不鼓励使用通配符导入。

票数 14
EN

Stack Overflow用户

发布于 2009-07-29 15:51:04

是的,但是,不会这么做的。说真的,不要。但是如果你仍然想知道怎么做,它应该是这样的:

代码语言:javascript
运行
复制
import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

我说不要这样做,不仅仅是因为它很混乱和没有意义,还因为你的包不应该像那样使用__init__.py。这是包初始化代码。

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

https://stackoverflow.com/questions/1201115

复制
相关文章

相似问题

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