Python 如何在项目中使用自己定制的开源代码同时能把修改提交给项目原仓库?

2017-06-02 23:51:03 +08:00
 chuanqirenwu
场景是这样的:假设 GitHub 上有一个第三方库,我觉得正好适合我的项目,但是有一些地方还不完善,我需要对其进行定制。那么我有什么办法保证在项目中使用自己定制的开源代码同时能把修改提交给项目原仓库?也就是说我定制完后,我可能就要废弃掉本地的仓库,以后跟随着原仓库的代码进行更新了。

我想的一个方案是这样,不知道行不行得通?

首先我 fork 原仓库到我的 GitHub 仓库,然后我 clone 一份到本地进行修改,同时我通过 pip 从我自己的仓库安装这个库,这样我自己修改的代码就能及时应用于我的项目。等修改完后,我再提交一份 PR 给原仓库,如果作者合并了我的 PR 后,我就可以废弃掉我 fork 的那个仓库,以后更新这个库的代码时就从项目作者的发行版本安装。

请教一下这种方案可行么?平时大家遇到这种场景是如何处理的呢?
3143 次点击
所在节点    Python
6 条回复
ryd994
2017-06-03 00:03:28 +08:00
可以
你也可以试试 submodule
其实没必要删自己的,可以等 PR merge 以后反过来覆盖自己的就行。如果经常用的话省得下次再 fork 了
chuanqirenwu
2017-06-03 00:06:10 +08:00
@ryd994 这个项目下应该只会修改一次?也就是说我以后我从原作者发行的包中更新最新版代码都不会有问题?这我就放心了。
maze1024
2017-06-03 00:29:37 +08:00
项目稳定运行了一般就不需要更新了啊,如果有新的 feature 是用得到的可以手动 merge 回来
flniu
2017-06-03 17:01:37 +08:00
补充一点信息:

自己的 fork 不用删,需要时和原项目同步一下即可:
https://help.github.com/articles/syncing-a-fork/

自己搭一个 PyPI server,用于管理定制过或尚未 PR merge 或尚未发布到 PyPI 的包:
http://doc.devpi.net/latest/
chuanqirenwu
2017-06-03 21:22:52 +08:00
@flniu 感谢!但是自己搭建 PyPI server 比较麻烦。pip 不是可以从 github 直接安装吗?我能先从我 fork 的项目直接安装到我的本地。然后等我的 PR 被上游仓库合并后,我再改为用 pip 从上游仓库安装。我想知道的是这样做会引起本地项目包的冲突么?因为我肯定这次修改以后就不会再有大的修改,所以我希望还是跟着上游仓库的代码更新。
flniu
2017-06-03 22:36:59 +08:00
@chuanqirenwu 我没用过直接从 github 安装,但道理一样,在 requirements.txt 中指定 repo 和版本,上游合并后更新 requirements.txt。
https://stackoverflow.com/questions/16584552/how-to-state-in-requirements-txt-a-direct-github-source

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/365587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX