- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,这是一组关于如何在包/子包中使用 __init__.py 的问题。我已经搜索过了,令人惊讶的是没有找到一个像样的答案。
如果我有以下结构(显然这只是一个简化的例子):
my_package/
__init__.py
module1.py
my_sub_package/
__init__.py
module2.py
module1.py的内容是
my_string = 'Hello'
module2.py的内容是
my_int = 42
__init__.py 文件中应该包含什么?
我可以将它们留空,在这种情况下,import my_package
实际上什么都不做(显然它会导入包,但包实际上什么都不包含)。这显然很好,在大多数情况下应该发生什么。
在这种情况下,我希望 import my_package
允许我使用 my_package.module1.my_string
和 my_package.my_sub_package.module2。 my_int
.
我可以将 __all__ = [ 'module1' ]
添加到 my_package/__init__.py 和 __all__ = [ 'module2' ]
到 my_package/my_sub_package/__init__.py,但这只会影响我理解的使用通配符的导入(所以只有 from my_package import *
和 from my_package.my_sub_package import *
)。
我可以通过放置来实现这一点
import my_package.module1
import my_package.my_sub_package
在 my_package/__init__.py 和
import my_package.my_sub_package.module2
在 my_package/my_sub_package/__init__.py 中,但这是个坏主意吗?当我在 Python 解释器(3.5.5)中执行此操作时,它会创建一个(看似)无限系列的 my_package.my_package.my_package....
如果我希望能够执行以下操作
import my_package
print(my_package.my_string)
print(str(my_package.my_sub_package.my_int))
即如果我实际上在每个包中都有很多模块,我想纯粹使用 module1 和 module2 将代码分成更小的更易读的文件(这显然不适用于这个简单的例子,但很容易)
正在执行 from my_package.module1 import *
in my_package/__init__.py 和 from my_package.my_sub_package.module2 import *
in my_package/my_sub_package/__init__.py怎么做?我不喜欢使用通配符导入,但导入(真实)模块中定义的所有内容并将它们全部列出似乎是不切实际的冗长。
有没有一种方法可以实现上述目标,而不必将包的名称放入其中的源代码中?我问是因为如果我重命名包,我想避免在多个地方更改它(同样,在这个简单的例子中很简单,实际上可以通过 IDE 或脚本完成,但很高兴知道如何避免)。
最佳答案
在 my_package/__init__.py
中,使用
from . import my_sub_package
等等
参见例如 NumPy 的 __init__.py
,它有 from 。导入随机
,并允许
import numpy as np
np.random.random
如果您在从中导入的模块和子包中定义了 __all__
,则单个包中的通配符导入往往很常见。又是一个来自 NumPy 的 __init__.py
的示例,它有几个通配符导入。
这是 __init__.py
的一部分:
from . import core
from .core import *
from . import compat
from . import lib
from .lib import *
from . import linalg
from . import fft
from . import polynomial
from . import random
from . import ctypeslib
from . import ma
from . import matrixlib as _mat
from .matrixlib import *
from .compat import long
还要注意两个 core
导入行。 numpy.core
和核心定义(函数、类等)都可用。
如果不确定如何做某事,或者某事是否是好的做法,请查看一些知名的库或包。这有助于获得一些有值(value)的见解。
关于python - 子包和 __init__.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52498113/
是否有可能进行标准的 war 部署,它可以部署在 tomcat 上,也可以构建为 OSGi 包并与 OSGi 容器 tomcat 中的其他包一起部署(我认为是处女座)? 最佳答案 是的,WAR 和 W
我在尝试将包从根目录移动到用户帐户时弄乱了我的 R 安装。我尝试通过 apt-get install 卸载(使用 --purge)并重新安装 R(r-base r-base-dev)。但我得到了错误
请原谅模糊的标题。 我正在尝试构建一个包来帮助我使用第三方云存储 API(例如 Firebase 存储),添加 Combine 支持等。这个包对 CloudKit 做同样的事情。一切都编译得很好,但是
我想将所有 Excel 工作表读入 R 列表 df。我使用的代码是: file <- file.choose() name <- basename(file) require(XLConnect) w
我正在尝试使用 R 包 RecordLinkage,并且正在使用 two articles包作者作为使用指南,除了包 documentation . 我正在使用 2 个大型数据集(超过 100k 行)
基本上我想从 applescript 包中启动一个 Python 脚本 所以我已经将文件 (Controller.py) 捆绑在包中 我需要运行的脚本是 执行 shell 脚本 "PYTHONPATH
我有脚本: $Test = (dotnet list C:\Tasks.Api.csproj package) 它提供了一些包(最后有 2 个空格!): Project 'Tasks.Api' has
我正在使用这个 mopabootstrap bundle ,按照所有说明进行操作。我收到以下错误: An exception has been thrown during the compilatio
我们的存储库中有 3 个包(A、B、C)。每个包都有 dist/some-data。 (而且,这些包裹数量可能会增加) 使用 3 个不同的 dist 路径对 PublishBuildArtifacts
我想结合OSGI构建一个Web应用程序以使其模块化。但我有点困惑。我使用简单的 Hello Word Servlet 构建了一个 OSGI Web 包。有用。但现在,我怎样才能创建一个“完整的”Web
我要求对包目录中的包和子目录进行明确的说明。 一个场景 - 假设我有一个目录 food,其中包含一个子目录 Fruit,我将其用作包名称。 我有一个名为 apple.java 的 java 文件,其中
我怎么说 MXML 组件在某个包中?好吧,它在不同的文件夹中......我知道怎么做 ActionScript......但是当我在 MXML 中这样做时,我没有明确声明包,因为我不知道如何以及何时将
我在 Google App Engine 上进行开发,这意味着我有一个部署命令 (appcfg.py update),它只需将整个目录的副本上传到 App Engine 并在那里运行。 我看到很多在线
我在计算包和 channel 之间的多对多关系时遇到了问题。每个 channel 都属于一个包,但一次有多个包。 IE: Channel 1 属于 Package 1,2,3,4,5 Channel
在我的数据库接口(interface)库中 jOOQ ,我想添加对 Oracle(或 DB2 等)包的支持。我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的 Java 类。比如这个存储
我对 gradDescent package 有理解上的问题在 R 中。假设我有一个包含一个自变量的数据集,我想对该数据运行简单的线性回归,并使用批量梯度下降 (GD) 算法估计模型及其参数。 例如,
我使用带有 CommonJS 模块输出的 TypeScript 和 webpack 创建一个浏览器包,使用 libraryTarget: 'var'在 webpack 中,这样我的库将作为全局变量“F
我是 django 的新手,我一直在浏览 djangopackages 站点。我想知道那些“django”包和不是 django 包的 python 库之间有什么区别。 例如,sendgrid 有一个
我已经在 Py2.7 中创建了一个包,我正在尝试使其与 Py3 兼容。问题是如果我在 __init__.py 导入构建返回这个错误 error in daysgrounded setup comman
有人能解释一下 egg-info 目录是如何与它们各自的模块相关联的吗?例如,我有以下内容: /usr/local/lib/python2.5/site-packages/quodlibet/ /us
我是一名优秀的程序员,十分优秀!