安装和使用无法通过 pip 或 tarball 发行版获得的 python 库的最佳实践

Posted

技术标签:

【中文标题】安装和使用无法通过 pip 或 tarball 发行版获得的 python 库的最佳实践【英文标题】:Best practices for installing and using python libraries that are not available through pip or tarball distributions 【发布时间】:2020-02-23 05:30:06 【问题描述】:

安装 VCS 上可用但不作为 pip 可安装包维护的 Python 库的最佳做法是什么?

到目前为止,我发现了很多只建议 installing directly from GitHub 的解决方案,但这些似乎都要求维护者已打包以进行 pip 安装。还有option of installing from tarballs,但在这种情况下,维护者不提供可安装的压缩包。

pypi 曾多次尝试发布此内容,但都已过时或存在某种问题。

有问题的库用于使用 E-Paper displays from waveshare。我想使用的库隐藏在 git 存储库中的几个 directories deep 中。更糟糕的是,该项目发布时没有 license.txt,但确实有 generic license text within each library file。许可文本似乎授予了广泛的许可,可以将这些库包含到任何类型的项目中(请参阅下面的文本)。

我想出了一些解决这个问题的方法,但我希望有更好的选择:

    将库复制到项目中

    问题:

    库过时了 除了手动复制到项目中之外,没有简单的方法来更新它们

    重新打包库并上传到 pip

    问题:

    我现在需要维护 pypi 项目 它们最终变得陈旧,并且出现的问题与我目前发现的问题完全相同

【问题讨论】:

如何将子目录复制/过滤到您自己的私有 Git 存储库并从那里安装? 我绝对可以将所需的子目录复制到我自己的仓库中。有没有一种理智的方法可以在不手动拉取和重新复制的情况下保持该副本的新鲜感?我可以编写脚本,但这一切都感觉像是一个巨大的杂物,并且不会使项目在未来易于部署。 您链接到的代码并不是真正的生产质量...因此,如果您真的要在生产环境中部署该项目,则无论如何都应该有人维护该复制的库。跨度> 这是一个家庭项目,但我可以看到它一遍又一遍地使用。我想我可以在 README.md 中添加一行,提示我手动或使用脚本更新库。这是“好习惯”吗?或者,有没有更好的方法? 【参考方案1】:

有一个setup.py,所以应该可以使用以下命令安装项目:

pip install -e 'git+https://github.com/waveshare/e-Paper.git#egg=waveshare-epd&subdirectory=RaspberryPi&JetsonNano/python'

但它失败了,因为目录名称中有一个 & 符号 (&)。如果有可能以某种方式逃脱该角色,它可能会起作用。

【讨论】:

我不知道你可以指定这样的子目录!这是一个巨大的附带胜利。谢谢你教我。 我克隆了 Repo 并重命名了目录以删除有问题的“&”,但 pip 仍然存在问题。看起来它希望树中有一个 setup.py 更高: IOError: [Errno 2] No such file or directory: '/home/pi/src/slimpi_epd/src/waveshare-epd/setup.py'还有其他想法吗? $ pip3 install -e git+https://github.com/txoof/e-Paper.git#egg=waveshare-epd&subdirectory=RaspberryPi_and_JetsonNano/python 确实将 repo 克隆到 ~/src/waveshare-epd 中,但最终出现错误:FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/src/waveshare-epd/setup.py' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /home/pi/src/waveshare-epd/ Aaand。我是个白痴。我忘记了引号!谢谢你的帮助。这可能是一个很好的中间解决方案。 如果我是你,我会要求项目的维护人员修复文件夹的名称。【参考方案2】:

我尝试了一些 url 编码的变体等,但无法直接从 pip 获取它...所以我做了以下操作:

git clone https://github.com/waveshare/e-Paper
cd e-Paper/RaspberryPi\&JetsonNano/
pip3 install -e .

Successfully installed waveshare-epd:D

【讨论】:

以上是关于安装和使用无法通过 pip 或 tarball 发行版获得的 python 库的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

别人的Linux私房菜(22)软件安装:源代码与Tarball

GitHub Api 下载 zip 或 tarball 链接

StreamSets学习系列之StreamSets的Core Tarball方式安装(图文详解)

从源码安装golang

第22章 软件安装:源码与Tarball

hue 4.2.0安装(tarball 安装)