将任意命名的文件导入为 Python 模块,而不生成字节码文件

2023-12-25

Python程序如何轻松编写从具有任意名称的文件导入 Python 模块?

标准库导入机制似乎没有帮助。一个重要的限制是我不需要附带的字节码文件出现;如果我使用imp.load_module在名为的源文件上foo,一个名为fooc出现,显得杂乱且令人困惑。

Python 导入机制期望它最了解文件名:模块文件在特定的文件系统位置找到,特别是文件名具有特定的后缀(foo.pyPython 源代码等),没有其他。

这与另一个约定冲突,至少在 Unix 上:将作为命令执行的文件应该是命名时不参考实现语言 https://secure.wikimedia.org/wikipedia/en/wiki/File_suffix#Command_name_issues。例如,执行“foo”的命令应该位于名为的程序文件中foo没有后缀。

然而,对这样的程序文件进行单元测试需要导入该文件。我需要程序文件中的对象作为 Python 模块对象,准备好在单元测试用例中进行操作,就像import会给我。

是什么Pythonic 方式导入模块,特别是来自名称不以以下结尾的文件.py, 没有出现字节码文件对于那个进口?


import os
import imp

py_source_open_mode = "U"
py_source_description = (".py", py_source_open_mode, imp.PY_SOURCE)

module_filepath = "foo/bar/baz"
module_name = os.path.basename(module_filepath)
with open(module_filepath, py_source_open_mode) as module_file:
    foo_module = imp.load_module(
            module_name, module_file, module_filepath, py_source_description)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将任意命名的文件导入为 Python 模块,而不生成字节码文件 的相关文章

随机推荐

  • for 循环中的 If 和Continue 语句

    我有一个forMatlab 中的循环 for 循环内的所有代码都包含在if陈述 例如 for p 1 length array if array p 1 Test positive for condition Generic code he
  • Subversion 合并历史可视化

    是否有任何实用程序可以绘制 subversion 存储库的合并历史记录的图片 我们总是使用 相当 一致的日志消息提交合并 并且能够自动将此信息提取到单个图片中会很方便显示什么时候发生了哪些分支 以及合并的状态是什么 我只是对信息工具感兴趣
  • SvelteKit 与 Nginx 返回响应错误 500

    我正在尝试建立SvelteKit项目并将其托管在服务器上nginx using sveltejs adapter static 该应用程序在本地开发时工作正常 但在构建并上传时我得到了500 JSON parse unexpected ch
  • 发布列表<接口> .net core 1.0

    我正在 net core 中构建一个动态表单创建器 表单 将由许多不同的表单元素组成 所以表单模型看起来像这样 public class FormModel public string FormName get set public Lis
  • 在 Hibernate 中使用 LIKE %

    我该如何使用LIKE 处于休眠状态 我想使用 SQLLIKE in my hbm xml文件 我有 2 个查询 我正在将其合并为 1 个 查询如下所示 select from PAY GROUP VW where CASE SID AND
  • 如何创建计算以从两个日期获取一个人的年龄?

    我正在尝试制定一种方法来计算一个人的年龄 我想在第二个下完成计算public static int getAge 如果这个人出生在当前日期之后 我希望它打印出错误 1 我如何比较两者SimpleDate values dateBd and
  • 动态更改 iframe 的 onload

    我有一个页面包含几个标签 我想动态更改他们的加载操作 我有以下代码 可以在 FF Safari Chrome Opera 中正常工作 但 IE 8 拒绝遵守 document getElementById myiframe onload f
  • 在Scala中,是否有一个预先存在的库函数用于将异常转换为选项?

    这基本上是包装 java 工厂方法 如果无法根据输入创建项目 这些方法会抛出异常 我正在基础库中寻找类似的内容 def exceptionToOption A f gt A Option A try Some f catch case e
  • 由于激活原因,无法使 QSystemTrayIcon 正常工作

    我使用的是 Ubuntu 12 04 虽然我可以创建带有可用菜单的托盘图标 但我无法控制其操作 trayIcon new QSystemTrayIcon this trayIcon gt setIcon QIcon icons Pictur
  • 与 php 算术相关

    y 013 echo y 5 this result in 16 我不明白它的答案怎么是16 有人可以帮忙吗 因为 013 不是十进制 以 10 为基数 它是八进制 基数为 8 十进制值为 0 8 2 1 8 1 3 8 0 0 8 3 1
  • 查找两个 numpy 数组之间的索引映射

    有没有好的方法进去numpy获取每个元素所在位置的逐元素索引array1 is in array2 一个例子 array1 np array 1 3 4 array2 np arange 2 5 1 dtype np int np wher
  • Xcode 调试器不会打印对象并显示 nil(当它们不打印时)

    尝试使用以下命令打印对象时 Xcode 显示错误po
  • PHP file_put_contents() 错误

    每次我尝试修改文件时 都会收到此错误 但我不知道这意味着什么 A PHP Error was encountered Severity Warning Message file put contents function file put
  • 如何在客户端授权的情况下使用 Microsoft.Graph 并且不会收到 401

    We have 创建了 Azure Active Directory 创建了一个新的应用程序 在 Azure AD 中注册新应用程序 授予 API 的所有权限 授予管理员权限 现在我们使用此应用程序凭据登录 我们获得授权 GET 11111
  • 如何以编程方式检测 64 位或 32 位机器?

    我不明白32位和64位是什么意思 人们似乎都说 64 位计算机运行速度更快 但为什么呢 这是否意味着有 64 位整数而不是 32 位整数 如果是这样的话 有没有办法编写一个程序来确定我们是在 32 位还是 64 位机器上 在 64 位机器上
  • 如何找到 Django 查询集中不在另一指定查询集中的实体?

    我正在使用 Django 为教育机构开发课程注册网站 假设我有两个 Django 查询集 一个包含占用会话 1 的课程 集合 A 另一个包含会话 2 中的课程 集合 B A session1 courses all B session2 c
  • iOS8 中的 AVPlayerItem addobserver 问题

    您好 我正在使用 AVPlayer 在 UITableViewCells 上播放视频 它在 iOS 7 上工作正常 但在 iOS8 中崩溃并出现以下错误 An instance 0x7c01b000 of class AVPlayerIte
  • 在 Clang 中使用指向成员和地址空间的指针

    我正在具有多个地址空间的目标上处理 C 代码 我想使用的代码有指向成员的指针 struct foo int bar int baz typedef int foo foo member foo member m foo bar define
  • 设置列表格式

    我有以下清单 X X O NIL NIL O NIL NIL O 我想将其格式化为如下所示 X X O O O 我也许可以用我对 Lisp 所知甚少的东西拼凑出一些东西FORMAT 但这可能会非常糟糕 任何指示将不胜感激 format t
  • 将任意命名的文件导入为 Python 模块,而不生成字节码文件

    Python程序如何轻松编写从具有任意名称的文件导入 Python 模块 标准库导入机制似乎没有帮助 一个重要的限制是我不需要附带的字节码文件出现 如果我使用imp load module在名为的源文件上foo 一个名为fooc出现 显得杂