python - 如何使 zipimporter 模块自包含
问题描述
为不清楚的标题提前道歉。问题将在下面变得清晰。
我有一个目录main.py
和一堆支持文件a.py
,b.py
例如。main.py
做这个:
from a import func_a, Class_a
from b import func_b, Class_b
run_name = sys.argv[1]
def main():
# do stuff
if __name__ == '__main__':
file_names = ['main.py', 'a.py', 'b.py', 'c.py']
# `archive` implementation available on request
archive(f'runs/{run_name}.zip', file_names)
main()
因此,我正在有效地尝试保持(几乎)完全可重复的“跑步”记录。
如果以后我想重现我使用的运行reproduce.py
:
import sys
import zipimport
script_name = sys.argv[1]
run_name = sys.argv[2]
importer = zipimport.zipimporter(f'runs/{run_name}.zip')
module = importer.load_module('main')
main = module.main
main.main()
这就是问题所在。我注意到module.main
实际上是在我的工作目录中导入a.py
and b.py
,而不是从 zip 存档中导入的。我希望它从 zip 存档中加载。使事情进一步复杂化的是a.py
和/或b.py
可能从c.py
解决方案
推荐阅读
- reactjs - 如何通过在反应多选中选择一个选项来替换 Select ...?
- javascript - VoiceOver 不解析 React SPA 中的 DOM?
- docker - Docker 错误:没有这样的容器:路径 .. 尝试复制到本地驱动器时
- r - rjdbc dbSendUpdate ORA-12899 值对于列来说太大
- python - 使用 JSON 的原子 Redis 操作
- r - 任何人都可以帮我解释我在将 tensorflow 用于神经网络时获得的这些图表吗?
- docker - 如何通过变量扩展将参数传递给 ENTRYPOINT?
- python - 火炬:最小填充张量,使得 num 元素可被 x 整除
- android - 如何使用 Google Classroom API 访问 Classroom Course Stream
- unity3d - 更改我的 mac 后在 Unity 中看不到我的项目