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

关于 Python 的库开源问题

  •  
  •   linlin6 · 2021-03-31 22:16:43 +08:00 · 2163 次点击
    这是一个创建于 1335 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教下各位老哥,有查询 Python 的第三方库用什么开源协议的网站吗,我现在安装都直接 pip install ***安装了,然后网上找的话这方面资料几乎没有,是要 fq 找吗。
    主要是通过一些第三方库开发了几个软件,然后有人询问出售,目前不清楚这些库是用哪种开源协议的。
    11 条回复    2021-04-02 16:46:50 +08:00
    wevsty
        1
    wevsty  
       2021-03-31 22:28:43 +08:00
    pip 安装的 lib 在 pypi 上可以直接找到授权信息:
    比如:
    https://pypi.org/project/numpy-stl/

    如果 pypi 上没有写,就需要看项目本身的网站或者版本库了。
    ClericPy
        2
    ClericPy  
       2021-03-31 22:33:45 +08:00
    多数情况 Github 上都直接搜的到... 正规点的库在 pypi 官网也该填了的
    no1xsyzy
        3
    no1xsyzy  
       2021-03-31 22:52:54 +08:00
    $> grep '^License: ' $VIRTUAL_ENV/lib/python*/site-packages/*.dist-info/METADATA
    no1xsyzy
        4
    no1xsyzy  
       2021-03-31 23:05:57 +08:00
    $> 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  
       2021-04-01 14:55:25 +08:00 via Android
    有个库可以查出当前环境所有 pip 安装的软件的协议。名字忘了,可以找找。
    linlin6
        6
    linlin6  
    OP
       2021-04-01 22:04:08 +08:00
    @wevsty
    @ClericPy
    @sunhk25 谢谢各位老哥
    linlin6
        7
    linlin6  
    OP
       2021-04-01 22:05:04 +08:00
    @no1xsyzy 这是遍历出所有的 METADATA 文件吗😂😂😂
    no1xsyzy
        8
    no1xsyzy  
       2021-04-02 09:24:32 +08:00
    @linlin6 对的,但没有去校验 *.dist-info/LICENSE
    理论上需要 LICENSE 文件配套才能算真的符合。
    在线版可能在发生变动的情况下也跟你本地的不一致,如果你打包的话 LICENSE 文件才是实际对版权法生效的那个。

    Metadata 里会有个问题,License 项没法区分 BSD-2-clause 和 BSD-3-clause,都是 BSD license,在 Classifier 项里才会有 BSD 和 BSD-like 的区别…… 具体也没细看。
    sunhk25
        9
    sunhk25  
       2021-04-02 10:55:31 +08:00   ❤️ 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  
       2021-04-02 10:58:46 +08:00
    linlin6
        11
    linlin6  
    OP
       2021-04-02 16:46:50 +08:00
    @no1xsyzy 谢谢老哥

    @sunhk25 谢谢老哥,能跑成功
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:41 · PVG 04:41 · LAX 12:41 · JFK 15:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.