Python 程序如何轻松地从具有任意名称的文件中导入 Python 模块?
标准库导入机制似乎没有帮助。一个重要的约束是我不希望出现伴随的字节码文件;如果我在名为 foo
的源文件上使用 imp.load_module
,则会出现一个名为 fooc
的文件,该文件困惑且令人困惑。
Python 导入机制期望它最了解文件名:模块文件在特定的文件系统位置找到,特别是文件名具有特定的后缀(foo.py
对于 Python 源代码代码等),没有其他。
这与另一个约定冲突,至少在 Unix 上:将作为命令执行的文件应该是 named without reference to the implementation language .例如,执行“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)
关于python - 将任意命名的文件导入为 Python 模块,而不生成字节码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811902/