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 · 3362 次点击
    这是一个创建于 2758 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景是这样的:假设 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   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:39 · PVG 10:39 · LAX 18:39 · JFK 21:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.