我需要在运行时通过文件路径(例如“/some/path/to/module.py”)导入Python模块,并忽略任何存在的“.pyc”文件。
这个之前的问题建议使用
在执行两次后,第一次调用后将使用
这个之前的问题建议使用
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'>
很遗憾,imp.load_source
有相同的行为(来自文档):
请注意,如果存在一个与给定源文件匹配的正确的编译字节文件(带有后缀 .pyc 或 .pyo),将使用它而不是解析给定源文件。
使每个包含脚本的目录都只读是我所知道的唯一解决方案(首先防止生成 .pyc
文件),但如果可能的话,我宁愿避免这样做。
(注:使用 python 2.7)