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
Hlianbobo
V2EX  ›  Python

可以把一些 Python 开源项目当作第三方 Python 库来使用么?

  •  
  •   Hlianbobo · 2020-09-13 14:42:45 +08:00 · 2053 次点击
    这是一个创建于 1537 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们使用 python 第三方库以避免自己造轮子。那么开源项目是否可以当作第三方库来使用么? 如果不能,原因是什么?举个例子。假设我想爬取大众点评的评论内容做数据分析。有两条路:

    道路 1:学习 python 的爬虫知识,包括各种第三方爬虫库的使用,如何使用打码平台进行登录验证。如何做爬虫调度,如何针对目标网站的反扒机制针对性的克服反爬等等。其实就是使用他人积累的知识和写好的库实现自己的目的。你说完全可控么?好像也不尽然?那些库不支持的功能你有什么办法么?即使那些库都是开源的你会去看源码,改源码么?比较流行的库比如说 numpy 使用过程中遇到问题在网上搜索或者发帖求助应该会容易获得有用信息吧?我猜也很少有人去看 numpy 的源码寻求解决办法。

    道路 2:github 上有个爬取大众点评内容的开源项目。从名字上开至少是针对大众点评开发的。按理说如何登录大众点评,如何克服反爬。包括爬下来的数据存储。这些问题都解决了。虽然未必 100%符合你的需求。但是感觉上应该比道路 1 要省心省力吧。一个硬币两面。因为他已经针对大众点评”定制化开发了“。所以也比较小众了。使用过程中遇到问题,发帖或搜索到有用相关信息的概率也比较低。大概率你要自己看源码消化吸收后自己设法解决。考虑到这些因素后于道路 1 相比,道路 2 还是好的选择么?更何况针对性这么强的一个开源项目,是否好用,也未可知,万一是个坑呢?如何识别是不是坑呢?


    以上是我思考时想到的问题。想知道各位论坛大佬在面对以上问题时如何抉择?如何看待以上两条路,哪条路学习成本低?后期维护成本低?有过经历的欢迎现身说法。

    以上我思考中反映出的一些认知偏差,还望各位读者指正!
    11 条回复    2020-09-13 16:29:56 +08:00
    imn1
        1
    imn1  
       2020-09-13 15:05:55 +08:00
    关键是看对方授权协议吧
    自己学习应该问题不大,但长久使用,或提供给其他人使用,就要看协议了
    Hieast
        2
    Hieast  
       2020-09-13 15:15:41 +08:00 via iPhone
    连同作者信息一期直接拷进代码里用就是了
    Hlianbobo
        3
    Hlianbobo  
    OP
       2020-09-13 15:22:34 +08:00
    @imn1 你的意思我明白。假设完全是自己用,不涉及商业化。只从学习成本,使用成本,后期维护成本的角度考虑以上问题!
    imn1
        4
    imn1  
       2020-09-13 15:37:09 +08:00
    @Hlianbobo #3
    那我就用得多了,但有些我是改了人家的代码才用的
    跟#2 说的一样,我习惯留个来源网址在代码里面,一来方便查看来源有没有更新,二来万一、万一要给别人用,也好去查协议,有几个模块(代码段)就是当时忘了记录来源,现在怎么也想不起在哪 copy 过来的
    dayeye2006199
        5
    dayeye2006199  
       2020-09-13 15:41:25 +08:00
    这个问题的背景太模糊了。你在开发的个人项目的目的是什么?是抱着学习的目的,还是有目的的获取数据,方便下游系统使用?这个项目是一次性使用,还是需要不断维护迭代?项目的周期有多长?你的个人开发经验是怎么样的?你说的第三方包,是什么机构或者个人维护的?这些因素都会影响你提的问题的答案。

    根据标题来回答的话,很少有 py 程序不依赖第三方包来实现部分功能,所以必然会把开源包作为库来使用
    imn1
        6
    imn1  
       2020-09-13 15:49:35 +08:00
    @dayeye2006199 #5
    我觉得他说的是那些开源,但不在 pypi,也没有提供 setup.py 的代码
    我不少代码是从 so 的答案里面 copy 过来的,这些并非一个完整 module,但也确实是别人写的解决一个问题的代码段,不是靠自己能力写出来的
    Hlianbobo
        7
    Hlianbobo  
    OP
       2020-09-13 15:56:06 +08:00
    @imn1 你真是太善解人意了。确实,我的意思就是那些只在 GitHub 上开源了。但是没有办法通过 pip 安装进而直接在 python 中通过 import 来使用的三方库。

    也可能是一种认知偏见。我总觉得 pip 上能安装的库,和那些只在 Github 上开源的项目还是有些差别的。
    westoy
        8
    westoy  
       2020-09-13 15:58:02 +08:00
    理论上

    自己用, 随意

    作为服务提供给第三方, 除了 AGPL 外随意

    提供源码给第三方, 看引用类库的协议

    实际上么

    类似的东西就算有用, 时效性也非常短的, 到最后你还是必须得自己维护一个
    Hlianbobo
        9
    Hlianbobo  
    OP
       2020-09-13 16:02:44 +08:00
    @westoy 对开源项目了解及其有限,请问时效性非常短是什么意思?是说项目维护人有一天会突然关闭这个项目么?
    Reficul
        10
    Reficul  
       2020-09-13 16:17:30 +08:00
    法律上看许可证,坑不坑看自己。用开源项目出技术问题,就得有看源码去修复问题的觉悟
    renmu123
        11
    renmu123  
       2020-09-13 16:29:56 +08:00 via Android
    要看协议,有些是不允许商用的,个人一般都没什么问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3364 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:50 · PVG 19:50 · LAX 03:50 · JFK 06:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.