【问题标题】:What is the best way to use a custom fork of a python library in another python project?在另一个 python 项目中使用 python 库的自定义分支的最佳方法是什么?
【发布时间】:2020-06-09 10:06:57
【问题描述】:

我正在开发一个 python 应用程序。这个应用程序依赖于一个我已经分叉和大量修改的开源库。

如果重要,github 上提供了(非常 WIP 的)分叉库,它会有所帮助。

要在我的应用程序中导入分叉库,我目前正在做的事情如下:

sys.path.append(os.path.abspath(os.path.join(__file__, '..', '..', '..', '..', '..', 'couchdb')))
import couchdb

这可行,但出于显而易见的原因,我对此并不完全满意。它远非优雅或灵活,而且似乎也让我的 IDE 感到困惑。我觉得,尤其是在 Python 这样优雅的语言中,应该有更好的方法来同时开发应用程序和它所依赖的库。

库和应用程序当前并排位于我机器上的一个文件夹中,共享一个虚拟环境,但位于两个单独的 git 存储库中。对我来说,重要的是它们保留在不同的 git 存储库中,因此将库嵌套在应用程序中已不存在,但我很乐意更改其余部分。

我确定其他人以前也遇到过这种情况,所以我希望有人知道一种更受 Python“官方认可”的方法。

【问题讨论】:

  • python -m pip install -e <github_path>。这会将库安装在您的项目中,但在开发环境中。 (-e 表示可编辑):pip.pypa.io/en/stable/reference/pip_install
  • 我实际上不知道 pip 可以从 PyPi 以外的位置安装,谢谢。我将不得不再看一下该文档。
  • 在这种情况下也请看这里:github.com/pypa/pip/issues/3610。它解释了如何从 github 进行 pip 安装。此外,如果您想从特定分支安装,只需将@<branch_name> 附加到<github_path>,使其变为<github_path>@<branch_name>。如果没有,它会从 master 安装 @<branch_name>

标签: python python-3.x virtualenv python-module


【解决方案1】:

您的代码基于couchdb 这一事实并不重要,因为它可能与couchdb 不再兼容了。只需以自己的唯一名称正确安装它,然后像导入任何其他模块一样导入它。

import couchdbdmj

不要让您的脚本依赖于您的开发环境:配置您的开发环境以统一提供您的自定义模块。

【讨论】:

  • 谢谢,在这和 mattyx17 的评论之间,我想我知道我现在需要做什么了。我假设我想将库的开发副本移出库的 venv,对吗?
  • 更正:我的意思是将库移出 应用程序的 venv。
  • 应用程序的 venv 不正是它的正确位置吗? (或者您的意思是将库的存储库移出,然后将库本身安装到 venv 中?)
  • 是的,将 repo 移出并在 venv 中安装库是我所理解的。对吗?
  • 所以,我必须将库移出应用程序的 venv 文件夹。使用上面评论中提到的 -e 标志将库安装在 venv/src 中。我必须保留一个单独的开发副本,因为无论出于何种原因,venv/src 中的 git repo 不会让我推送到原点,但它确实让我拉动。所以我的问题现在解决了。只需从库的开发副本推送,然后拉回 venv/src 中的副本。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2023-01-19
  • 1970-01-01
相关资源
最近更新 更多