【问题标题】:What is the best way to package large filesets with a PyPi release?使用 PyPi 版本打包大型文件集的最佳方法是什么?
【发布时间】:2020-10-12 11:20:08
【问题描述】:

我目前正在开发一个 PyPi 包,它利用了大约 350 MB 的音频文件和一个 Tkinter GUI。由于 50 MB 的限制,我无法将这些音频文件上传到 PyPi,因此我采用了一种创造性的方法来获取最终用户安装的文件。

我创建了一个函数 audio_download(),它使用GitPython 执行以下代码:

import os
from git import Repo
def audio_download():
    path = os.path.join(os.path.split(os.path.realpath(__file__))[0],'audio')
    git_link = GIT_LINK_HERE
    if not os.path.isdir(path):
        print('Cloning audio files to the package directory...')
        Repo.clone_from(git_link,path)
        print('Audio engine downloaded to {}'.format(path))
    else:
        print('Audio files already present in {}. If you want to uninstall, you must manually delete the folder.'.format(path))

简单地说,它会检查音频文件夹的包目录,如果不存在,它会克隆一个包含这些文件的 GitHub 存储库。

三个问题:

  1. 以这种方式操作使用 pip 安装的软件包是安全的还是不好的做法?
  2. 是否有更好的方法可以在所有平台上仅使用 Python 执行此操作? GitPython 需要安装 git,我希望即使是最缺乏经验的 Python 用户也能尽可能轻松地进行安装。
  3. 如果我想允许用户将文件下载到他们选择的文件夹(而不是一些深度嵌套的 Python 包),那么在我的 PyPi 包中跟踪文件夹的最佳方法是什么?只需编写一个带有文件夹路径的文件,或者更优雅的东西?

【问题讨论】:

  • @Chris_Rands 有没有办法将它与 PyPi 集成?我喜欢使用 pip 的简单性——最终用户当然可以从 git 存储库下载并手动运行 setup.py,但我也希望有一个简单的 pip 安装可用。

标签: python git pypi


【解决方案1】:

您可以使用package_data (assuming you're using setuptools) 将大型音频文件放入发行版中。但是拥有这么大的文件并不是很理想,可能你必须sort this out with PyPI。最好让用户(例如通过 GUI 对话框)在应用程序第一次启动后触发下载并将其存储在 user's application directory 中(或者让用户选择目标目录,再次通过 GUI 对话框) .

【讨论】:

  • 在接受此答案之前您还想澄清什么?
  • 感谢提醒 :) 顺便说一句,我确实打开了 PyPI 的问题,他们对这个想法不太感兴趣,所以我相信我会采用 appdirs 方法。
  • 没问题。很高兴它有帮助。
猜你喜欢
  • 2021-12-29
  • 2012-09-29
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多