我需要通过文件路径导入python模块(例如,“/some/path/to/module.py”),只在运行时知道并忽略任何.pyc
文件存在。强制python从文件路径动态加载模块时忽略pyc文件
这个previous question建议使用imp.load_module
作为解决方案,但是这种方法如果存在的话也会使用.pyc
版本。
importme.py
SOME_SETTING = 4
main.py:
import imp
if __name__ == '__main__':
name = 'importme'
openfile, pathname, description = imp.find_module(name)
module = imp.load_module(name, openfile, pathname, description)
openfile.close()
print module
执行两次,.pyc
文件首先调用后使用:
$ python main.py
<module 'importme' from '/Users/dbryant/temp/pyc/importme.py'>
$ python main.py
<module 'importme' from '/Users/dbryant/temp/pyc/importme.pyc'>
Unfortun ately,imp.load_source
具有相同的行为(从文档):
注意,如果正确匹配字节编译的文件(后缀为.pyc文件 或.pyo)存在,它将用来代替解析给定的来源 文件。
制作每包含脚本的目录只读的是,我所知道的(防止产生.pyc
文件摆在首位),但如果可能的话,我宁愿避免它的唯一解决方案。
(注:使用Python 2.7)
为什么要防止使用pyc文件?它只会使用pyc文件,如果它与py相同。如果你改变py,它会重新编译pyc。 – Falmarri
@Falmarri这很复杂。它与不同类型的机器访问相同的一组python文件有关,它们似乎产生了相同源代码的不兼容的字节汇编(例如,机器A生成的pyc不能被机器B读取,导致机器B无法动态地导入模块);是的,所有机器都使用解释器二进制。 – awesomo
不同机器编写不同字节码的唯一原因是它们运行不同版本的解释器。 – limscoder