python - 管理包中的导入
问题描述
我对如何最好地管理以下情况感到困惑,即 python 包中的多个模块具有相同的依赖关系。
假设我有一个foo
文件结构为的包
foo/
__init__.py
bar.py
baz.py
并且两者bar.py
都baz.py
需要一些其他包,例如external_pkg
,以便他们阅读
# foo/bar.py
import external_pkg
def bar_fn(x):
# do something with external_pkg
和
# foo/baz.py
import external_pkg
def baz_fn(x):
# do something with external_pkg
问题:有没有办法重构包,以便我们可以只在 中包含该import external_pkg
行__init__.py
,而不是在模块中重复编写它?天真import external_pkg
地从模块中删除并将其放入__init__.py
会导致NameError: name 'external_pkg' is not defined
错误。
在上面的示例中,这显然不是一个大问题,但我正在尝试编写一个包含更多模块和更多常见导入的小包。我知道这也可能只是我的包装设计问题。我试图用谷歌搜索这个,但似乎无法找到正确的术语组合来获得有用的答案。
解决方案
foo/__init__.py:
import numpy as np
富/bar.py:
from . import * # or from foo import *
print(np.zeros(10))
运行(需要在 foo 目录之外才能工作):
$ python -m foo.bar
输出:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
推荐阅读
- javascript - ChartJS 中时间序列图表的建议最小值
- python - 无法使用 Selenium(python)在文本框中键入文本
- php - Laravel 创建未定义的索引
- c - 用系列计算 pi
- oracle - 如何验证弹出 lov 的数据在 Oracle Apex 中是否已更改
- amazon-web-services - fullpage.js 插件不工作 net::ERR_ABORTED 403(禁止)
- java - 将标头添加到 ChannelHandlerContext (Netty) 触发的响应中
- html - 如何在html中的动态大小图像上放置一些动态大小的链接?
- windows - 使用 ffmpeg 将 LiveVideo 发送到 Http 服务器
- java - 需要交替使用 SSL Mutual Authentication 和密码认证两种方式