关于 Python 的库开源问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
linlin6

关于 Python 的库开源问题

  •  
  •   linlin6 Mar 31, 2021 2592 views
    This topic created in 1852 days ago, the information mentioned may be changed or developed.
    请教下各位老哥,有查询 Python 的第三方库用什么开源协议的网站吗,我现在安装都直接 pip install ***安装了,然后网上找的话这方面资料几乎没有,是要 fq 找吗。
    主要是通过一些第三方库开发了几个软件,然后有人询问出售,目前不清楚这些库是用哪种开源协议的。
    11 replies    2021-04-02 16:46:50 +08:00
    wevsty
        1
    wevsty  
       Mar 31, 2021
    pip 安装的 lib 在 pypi 上可以直接找到授权信息:
    比如:
    https://pypi.org/project/numpy-stl/

    如果 pypi 上没有写,就需要看项目本身的网站或者版本库了。
    ClericPy
        2
    ClericPy  
       Mar 31, 2021
    多数情况 Github 上都直接搜的到... 正规点的库在 pypi 官网也该填了的
    no1xsyzy
        3
    no1xsyzy  
       Mar 31, 2021
    $> grep '^License: ' $VIRTUAL_ENV/lib/python*/site-packages/*.dist-info/METADATA
    no1xsyzy
        4
    no1xsyzy  
       Mar 31, 2021
    $> awk 'BEGINFILE{PRINTED=0} /^License: /{print FILENAME, "-", $0; PRINTED=1} ENDFILE{if(PRINTED==0)print FILENAME, "- NO LICENSE!!!"}' $VIRTUAL_ENV/lib/python*/site-packages/*.dist-info/METADATA

    ,我写这干嘛(太诡了
    sunhk25
        5
    sunhk25  
       Apr 1, 2021 via Android
    有个库可以查出当前环境所有 pip 安装的软件的协议。名字忘了,可以找找。
    linlin6
        6
    linlin6  
    OP
       Apr 1, 2021
    @wevsty
    @ClericPy
    @sunhk25 谢谢各位老哥
    linlin6
        7
    linlin6  
    OP
       Apr 1, 2021
    @no1xsyzy 这是遍历出所有的 METADATA 文件吗
    no1xsyzy
        8
    no1xsyzy  
       Apr 2, 2021
    @linlin6 对的,但没有去校验 *.dist-info/LICENSE
    理论上需要 LICENSE 文件配套才能算真的符合。
    在线版可能在发生变动的情况下也跟你本地的不一致,如果你打包的话 LICENSE 文件才是实际对版权法生效的那个。

    Metadata 里会有个问题,License 项没法区分 BSD-2-clause 和 BSD-3-clause,都是 BSD license,在 Classifier 项里才会有 BSD 和 BSD-like 的区别…… 具体也没细看。
    sunhk25
        9
    sunhk25  
       Apr 2, 2021   1
    ```python
    import pkg_resources

    def get_pkg_license(pkg):
    try:
    lines = pkg.get_metadata_lines('METADATA')
    except:
    lines = pkg.get_metadata_lines('PKG-INFO')

    license = 'UNKNOWN'
    labels = ['License: ', 'Classifier: License :: OSI Approved :: ']
    for label in labels:
    for line in lines:
    if line.startswith(label):
    license = line[len(label):]
    break
    if license != 'UNKNOWN':
    return license

    return '(Licence not found)'

    def get_pkg_home_page(pkg):
    try:
    lines = pkg.get_metadata_lines('METADATA')
    except:
    lines = pkg.get_metadata_lines('PKG-INFO')
    label = 'Home-page: '
    for line in lines:
    if line.startswith(label):
    url = line[len(label):]
    break
    if url == 'UNKNOWN':
    url = 'https://pypi.python.org/pypi/'+pkg.key
    return url

    def create_packages_and_licenses_text():
    text = ''
    for pkg in sorted(pkg_resources.working_set, key=lambda x: str(x).lower()):
    text += '\t'.join([pkg.key,pkg.version,get_pkg_license(pkg),get_pkg_home_page(pkg)]) + '\n'
    return text

    if __name__ == "__main__":
    text = create_packages_and_licenses_text()
    print(text)

    filename = 'packages_and_licenses.txt'
    with open(filename, 'w', encoding='Shift-JIS') as f:
    f.write(text)
    ```
    sunhk25
        10
    sunhk25  
       Apr 2, 2021
    linlin6
        11
    linlin6  
    OP
       Apr 2, 2021
    @no1xsyzy 谢谢老哥

    @sunhk25 谢谢老哥,能跑成功
    About     Help     Advertise     Blog     API     FAQ     Solana     4141 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 04:13 PVG 12:13 LAX 21:13 JFK 00:13
    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