gpt4 book ai didi

python - 从文件路径动态加载模块时强制python忽略pyc文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:27 27 4
gpt4 key购买 nike

我需要通过仅在运行时已知的文件路径(例如“/some/path/to/module.py”)导入 python 模块,并忽略任何存在的 .pyc 文件。

previous question建议使用 imp.load_module 作为解决方案,但这种方法似乎也使用 .pyc 版本(如果存在)。

importme.py

SOME_SETTING = 4

ma​​in.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 具有相同的行为(来自文档):

Note that if a properly matching byte-compiled file (with suffix .pyc or .pyo) exists, it will be used instead of parsing the given source file.

使 每个 包含脚本的目录只读是我所知道的唯一解决方案(首先防止生成 .pyc 文件)但我宁愿尽可能避免。

(注意:使用python 2.7)

最佳答案

load_source 为我做了正确的事情,即

dir, name = os.path.split(path)
mod = imp.load_source(name, path)

即使 pyc 文件可用,也使用 .py 变体 - 在 python3 下名称以 .py 结尾。显而易见的解决方案显然是在加载文件之前删除所有 .pyc 文件 - 如果您运行多个程序实例,则竞争条件可能是一个问题。

另一种可能性:IIrc 你可以让 python 从内存中解释文件——即使用普通文件 API 加载文件,然后编译内存中的变体。像这样的东西:

path = "some Filepath.py"
with open(path, "r", encoding="utf-8") as file:
data = file.read()
exec(compile(data, "<string>", "exec")) # fair use of exec, that's a first!

关于python - 从文件路径动态加载模块时强制python忽略pyc文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com