【问题标题】:Where can I store extracted program files from a Python package?我可以在哪里存储从 Python 包中提取的程序文件?
【发布时间】:2014-12-05 13:11:18
【问题描述】:

我编写了一个 Python 包 hwrt,它带有一个 model.tar 文件。文件本身和内容都不应打扰用户(他们可以查看它,这不是秘密 - 但他们不需要它)。

我需要处理该存档中的文件。为此,我提取内容并使用它们:

import tarfile
tar = tarfile.open('model.tar in python package')
tar.extractall()
tar.close()
[... work with those files ...]

这行得通。但是,我发现这种方法存在两个问题:

  1. model.tar 每次都会被提取。
  2. 包含的文件被放置在用户可能不期望的当前工作目录中。

为了解决问题 (2),在我看来,在 tempfile.gettempdir() 中创建一个临时文件夹将是最干净的解决方案。但是,我不确定这是否是应该这样做的地方。

是否有其他存档格式可以让我直接访问存档的内容?是否有一个目录可以在我的 Python 包安装后(适用于所有用户)放置文件?

【问题讨论】:

  • 请使用with 语句打开文件。
  • tempfile.gettempdir 对我来说似乎很好,但为什么不能在 tarfile 所在的地方提取 tarfile
  • model.tar 内容真的是临时的吗?据我了解,您会经常访问此类内容。我说的对吗?
  • @Veedrac:我不确定 Python 包的放置位置以及程序是否有权在此处写入。如果是这样,那么这就是我的问题的答案。
  • @Menegazzo:是的,你是对的。 model.tar 不会改变。每次程序执行我可能会访问内容数百(或数千)次,但至少访问一次。但是,我只阅读了一次内容(它们的大小约为 10MB)。

标签: python temporary-files tarfile


【解决方案1】:

如果文件只有 ~10MB,只需将其读入 RAM。您以后的数千次访问将感谢您。

如果您只想第一次解包,您有几种选择:

  • 安装时解压到源目录

  • 解压一次到本地.cache目录

如果您可以忍受每次运行一次,请使用tempfile.gettempdir

【讨论】:

  • > "如果文件只有 ~10MB,只需将其读入 RAM。您以后的数千次访问将感谢您。"这就是我所做的。
  • > "安装时解压到源目录" 保证这是可写的吗?
  • @moose 这将不允许您在运行时更改目录,但您可以在安装时编写目录,因为根据定义,您已经可以访问它。
  • 安装时执行的代码应该放在哪里?
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2018-09-23
  • 1970-01-01
  • 2021-09-09
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多