1
wevsty 2021-03-31 22:28:43 +08:00
pip 安装的 lib 在 pypi 上可以直接找到授权信息:
比如: https://pypi.org/project/numpy-stl/ 如果 pypi 上没有写,就需要看项目本身的网站或者版本库了。 |
2
ClericPy 2021-03-31 22:33:45 +08:00
多数情况 Github 上都直接搜的到... 正规点的库在 pypi 官网也该填了的
|
3
no1xsyzy 2021-03-31 22:52:54 +08:00
$> grep '^License: ' $VIRTUAL_ENV/lib/python*/site-packages/*.dist-info/METADATA
|
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
欸,我写这干嘛(太诡了 |
5
sunhk25 2021-04-01 14:55:25 +08:00 via Android
有个库可以查出当前环境所有 pip 安装的软件的协议。名字忘了,可以找找。
|
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 的区别…… 具体也没细看。 |
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) ``` |
10
sunhk25 2021-04-02 10:58:46 +08:00
@sunhk25 markdown 不灵了,自己去看吧 http://futago-life.com/wife-support/tech/python-lib-license.html
|