如何在 Python 模块中正确使用相对或绝对导入? [复制]

2024-03-22

在 Python 中使用相对导入有一个缺点:您将无法再作为独立运行模块,因为您将收到异常:

ValueError:尝试在非包中进行相对导入

Code

# /test.py: just a sample file importing foo module
import foo
...

# /foo/foo.py:
from . import bar
...
if __name__ == "__main__":
   pass

# /foo/bar.py: a submodule of foo, used by foo.py
from . import foo
...
if __name__ == "__main__":
   pass

我应该如何修改示例代码才能执行以下所有操作?test.py, foo.py and bar.py.

我正在寻找适用于 Python 2.6+(包括 3.x)的解决方案。


您可以以一种不同的方式开始“独立运行模块”:

代替:

python foo/bar.py

Use:

python -mfoo.bar

当然,foo/__init__.py文件必须存在。

另请注意,您之间存在循环依赖关系foo.py and bar.py– 这是行不通的。我想这只是你的例子中的一个错误。

看来使用它作为第一行也非常有效foo/bar.py:

#!/usr/bin/python -mfoo.bar

然后就可以直接执行脚本了POSIX https://en.wikipedia.org/wiki/POSIX系统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 模块中正确使用相对或绝对导入? [复制] 的相关文章

随机推荐

  • 如何设置新语言 IDE

    在工作中 我们使用专有语言 并使用带有简单代码突出显示的 Notepad 进行编程 这真的很烦人 所以我想做的是花一些时间来设置一个文本编辑器或现有的 IDE 来支持我的语言 我在谷歌上搜索了很多 有很多选择 在开始工作之前我想问你什么是最
  • 生成 Play 2 的 javascript 路由器的更简洁的方法

    目前我以相当详细的方式定义我的应用程序的 javascript 路由器 def javascriptRoutes Action implicit request gt import routes javascript Ok Routes j
  • 有没有办法立即检查目录是否正在使用?

    我想使用 Directory Move 移动目录及其所有子目录 不过 在此之前 我想检查该目录及其子目录中的任何文件和子文件是否正在被其他进程使用 然后 在移动之前 我想将目录锁定到其他进程 这样我就可以确保 Directory Move
  • 在 jQuery 对象数组上调用 show

    我有一个关于性能的小问题jQuery show 这个问题出现在 IE8 中 可能还有以下版本 但 IE8 是我感兴趣的 我有一个 jQuery 对象数组 我们称之为elements 我想向他们展示 所以我这样做了 for var i ele
  • WebClient.DownloadFileTaskAsync() 实际上永远不会超时吗?

    在异步之前的日子里 人们想知道如何设置超时WebClient答案很简单 就是扩展基类并覆盖GetWebRequest 并在那里设置超时 protected override WebRequest GetWebRequest Uri addr
  • 在 Excel VBA 宏中使用 Google 翻译

    各位 多年来 我一直在我的 Excel 宏之一中使用以下函数来帮助我将照片标题从英语撰写为法语 今天上午它开始抛出一个错误 该错误指向 Send下面代码中的命令 Public Function getGoogleTranslation st
  • 从 MySQL 表中选择值是数组的行?

    我有一个包含 ID 列表的表 我使用查询来选择它 然后将其作为数组获取 我知道如何执行此操作 然后我想从另一个表中选择行 其中 ID 位于之前获取的数组中 我该怎么做 提前致谢 你很可能想做一个WHERE field IN 类型查询 它本质
  • neo4j中如何删除多个节点

    如何在neo4j中删除多个节点 不是全部 我有这个查询MATCH n where n name IS NULL delete n 它返回多个节点 我想删除所有这些节点 所有节点 这些节点是错误创建的 这就是为什么变成空 我面临的错误是 ja
  • Rails 模型范围内的关联数据

    我有一个名为Post 博客文章 和一个名为Category 每个帖子belongs to一个类别 每个类别都有一个名为retainer指定帖子 过期 之前的时间量 例如movies category retainer 30 days 我想做
  • 在 Python 中迭代嵌套字典

    我的字典的结构如下 stockData AAPL beta 1 01833975315094 company name Apple dividend 1 9341673320912078 total 300 GOOG beta 1 0183
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 要复制到 Windows 共享 (SMB) 的 Ant 任务

    是否有 ant 任务 类似于 ftp 或 scp 任务 允许我将一组文件复制到 Windows smb 共享 编辑 我必须为此使用 jcifs 创建一个任务 如果有人需要 这里是代码 取决于 jcifs 和 apache ioutils i
  • 使用内置 std::sort 函数对 C++ 中的二维数组进行排序

    我有一个形式的矩阵pMat M N where M and N是可变的 因此是来自用户的输入 我想使用内置的对二维数组的元素进行排序std sort功能 例如 考虑以下数组 5 9 6 8 1 3 7 2 4 它应该输出为 1 2 3 4
  • 用于上采样的 PCM 算法

    我有 8k16 位 pcm 音频 我想将其上采样到 16k16 位 我必须手动执行此操作 有人可以告诉我线性插值的算法吗 我应该在每两个字节之间插入吗 另外 当我上采样时 我必须对 wav 标头进行更改 我应该更改什么 正如其他人提到的 线
  • 如何仅合并特定表格行的两个单元格? (文档、应用程序脚本)

    I am trying to create a table in a Doc file using Google Appsscript The last row should only consist of one cell 但我能得到的就
  • 如何使用 Jquery 更改选项值?

    我正在寻找一种在用户单击链接时更改选择标记的选项值的方法 例如我有一个选择选项 html
  • 如何在 Raspbian Jessie 上安装 Python 3.5

    我需要在 Rasbian Raspberry Pi 的 Debian 上安装 Python 3 5 目前仅支持 3 4 版本 对于我想要编译的源 我必须安装 sudo apt get install y python3 python emp
  • Sails.js v 10.2 缺少 Express 应用程序

    升级后如何从 Sails 全局对象访问 Express 应用程序实例 在 sails 0 9x 中 我们可以通过以下方式访问 Express 应用程序实例 sails express app 升级到0 10后 快递功能缺失 我们如何调用该应
  • 如何在OpenCV 3.0或更高版本中使用estimateRigidTransform,还有其他选择吗?

    我想使用OpenCV的estimateRigidTransform函数 但它抛出一个错误 AttributeError Traceback 最近调用 最后 在 30 31 求变换矩阵 gt 32 m cv2 estimateRigidTra
  • 如何在 Python 模块中正确使用相对或绝对导入? [复制]

    这个问题在这里已经有答案了 在 Python 中使用相对导入有一个缺点 您将无法再作为独立运行模块 因为您将收到异常 ValueError 尝试在非包中进行相对导入 Code test py just a sample file impor