我目前正在开发一个 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 存储库。
三个问题:
- 这是安全的,还是以这种方式操作使用 pip 安装的软件包是一种不好的做法?
- 有没有更好的方法可以在所有平台上仅使用 Python 来做到这一点?GitPython 需要安装 git,我想让安装尽可能轻松,即使是最没有经验的 Python 用户。
- 如果我想允许用户将文件下载到他们选择的文件夹(而不是一些深度嵌套的 Python 包(,那么在我的 PyPi 包中跟踪文件夹的最佳方法是什么?只需编写一个带有文件夹路径的文件,还是更优雅的文件?
您可以使用package_data
将大型音频文件放入发行版中(假设您使用的是setuptools(。但是拥有这么大的文件并不是很理想,可能你必须用PyPI解决这个问题。最好让用户(例如通过 GUI 对话框(在应用程序首次启动后触发下载,并将其存储在用户的应用程序目录中(或者让用户再次通过 GUI 对话框选择目标目录(。