Python 如何在项目中使用自己定制的开源代码同时能把修改提交给项目原仓库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chuanqirenwu
V2EX    Python

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

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

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

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

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

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

    自己搭一个 PyPI server,用于管理定制过或尚未 PR merge 或尚未发布到 PyPI 的包:
    http://doc.devpi.net/latest/
    chuanqirenwu
        5
    chuanqirenwu  
    OP
       2017-06-03 21:22:52 +08:00
    @flniu 感谢!但是自己搭建 PyPI server 比较麻烦。pip 不是可以从 github 直接安装吗?我能先从我 fork 的项目直接安装到我的本地。然后等我的 PR 被上游仓库合并后,我再改为用 pip 从上游仓库安装。我想知道的是这样做会引起本地项目包的冲突么?因为我肯定这次修改以后就不会再有大的修改,所以我希望还是跟着上游仓库的代码更新。
    flniu
        6
    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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4261 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 10:10 PVG 18:10 LAX 03:10 JFK 06:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86