{"id":423445,"date":"2021-04-03T20:08:19","date_gmt":"2021-04-03T12:08:19","guid":{"rendered":"http:\/\/4563.org\/?p=423445"},"modified":"2021-04-03T20:08:19","modified_gmt":"2021-04-03T12:08:19","slug":"%e5%85%b3%e4%ba%8e-python-%e7%9a%84%e5%ba%93%e5%bc%80%e6%ba%90%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=423445","title":{"rendered":"\u5173\u4e8e Python \u7684\u5e93\u5f00\u6e90\u95ee\u9898"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  \u5173\u4e8e Python \u7684\u5e93\u5f00\u6e90\u95ee\u9898               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : linlin6 <\/span>  <span><i><\/i> 0<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\">                        \u8bf7\u6559\u4e0b\u5404\u4f4d\u8001\u54e5\uff0c\u6709\u67e5\u8be2 Python \u7684\u7b2c\u4e09\u65b9\u5e93\u7528\u4ec0\u4e48\u5f00\u6e90\u534f\u8bae\u7684\u7f51\u7ad9\u5417\uff0c\u6211\u73b0\u5728\u5b89\u88c5\u90fd\u76f4\u63a5 pip install ***\u5b89\u88c5\u4e86\uff0c\u7136\u540e\u7f51\u4e0a\u627e\u7684\u8bdd\u8fd9\u65b9\u9762\u8d44\u6599\u51e0\u4e4e\u6ca1\u6709\uff0c\u662f\u8981 fq \u627e\u5417\u3002<br \/>\u4e3b\u8981\u662f\u901a\u8fc7\u4e00\u4e9b\u7b2c\u4e09\u65b9\u5e93\u5f00\u53d1\u4e86\u51e0\u4e2a\u8f6f\u4ef6\uff0c\u7136\u540e\u6709\u4eba\u8be2\u95ee\u51fa\u552e\uff0c\u76ee\u524d\u4e0d\u6e05\u695a\u8fd9\u4e9b\u5e93\u662f\u7528\u54ea\u79cd\u5f00\u6e90\u534f\u8bae\u7684\u3002      <\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>11<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"5625687\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : wevsty <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             pip \u5b89\u88c5\u7684 lib \u5728 pypi \u4e0a\u53ef\u4ee5\u76f4\u63a5\u627e\u5230\u6388\u6743\u4fe1\u606f\uff1a<br \/>\u6bd4\u5982\uff1a<br \/>https:\/\/pypi.org\/project\/numpy-stl\/<\/p>\n<p>\u5982\u679c pypi \u4e0a\u6ca1\u6709\u5199\uff0c\u5c31\u9700\u8981\u770b\u9879\u76ee\u672c\u8eab\u7684\u7f51\u7ad9\u6216\u8005\u7248\u672c\u5e93\u4e86\u3002                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625688\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : ClericPy <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u591a\u6570\u60c5\u51b5 Github \u4e0a\u90fd\u76f4\u63a5\u641c\u7684\u5230&#8230; \u6b63\u89c4\u70b9\u7684\u5e93\u5728 pypi \u5b98\u7f51\u4e5f\u8be5\u586b\u4e86\u7684                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625689\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : no1xsyzy <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             $&gt; grep &#8216;^License: &#8216; $VIRTUAL_ENV\/lib\/python*\/site-packages\/*.dist-info\/METADATA                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625690\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : no1xsyzy <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             $&gt; awk &#8216;BEGINFILE{PRINTED=0} \/^License: \/{print FILENAME, &#8220;-&#8220;, $0; PRINTED=1} ENDFILE{if(PRINTED==0)print FILENAME, &#8220;- NO LICENSE!!!&#8221;}&#8217; $VIRTUAL_ENV\/lib\/python*\/site-packages\/*.dist-info\/METADATA<\/p>\n<p>\u6b38\uff0c\u6211\u5199\u8fd9\u5e72\u561b\uff08\u592a\u8be1\u4e86                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625691\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : sunhk25 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u6709\u4e2a\u5e93\u53ef\u4ee5\u67e5\u51fa\u5f53\u524d\u73af\u5883\u6240\u6709 pip \u5b89\u88c5\u7684\u8f6f\u4ef6\u7684\u534f\u8bae\u3002\u540d\u5b57\u5fd8\u4e86\uff0c\u53ef\u4ee5\u627e\u627e\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625692\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : linlin6 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @wevsty <br \/>@ClericPy <br \/>@sunhk25 \u8c22\u8c22\u5404\u4f4d\u8001\u54e5                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625693\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : linlin6 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @no1xsyzy \u8fd9\u662f\u904d\u5386\u51fa\u6240\u6709\u7684 METADATA \u6587\u4ef6\u5417                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625694\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : no1xsyzy <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @linlin6 \u5bf9\u7684\uff0c\u4f46\u6ca1\u6709\u53bb\u6821\u9a8c *.dist-info\/LICENSE<br \/>\u7406\u8bba\u4e0a\u9700\u8981 LICENSE \u6587\u4ef6\u914d\u5957\u624d\u80fd\u7b97\u771f\u7684\u7b26\u5408\u3002<br \/>\u5728\u7ebf\u7248\u53ef\u80fd\u5728\u53d1\u751f\u53d8\u52a8\u7684\u60c5\u51b5\u4e0b\u4e5f\u8ddf\u4f60\u672c\u5730\u7684\u4e0d\u4e00\u81f4\uff0c\u5982\u679c\u4f60\u6253\u5305\u7684\u8bdd LICENSE \u6587\u4ef6\u624d\u662f\u5b9e\u9645\u5bf9\u7248\u6743\u6cd5\u751f\u6548\u7684\u90a3\u4e2a\u3002<\/p>\n<p>Metadata \u91cc\u4f1a\u6709\u4e2a\u95ee\u9898\uff0cLicense \u9879\u6ca1\u6cd5\u533a\u5206 BSD-2-clause \u548c BSD-3-clause\uff0c\u90fd\u662f BSD license\uff0c\u5728 Classifier \u9879\u91cc\u624d\u4f1a\u6709 BSD \u548c BSD-like \u7684\u533a\u522b\u2026\u2026 \u5177\u4f53\u4e5f\u6ca1\u7ec6\u770b\u3002                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625695\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : sunhk25 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             &#8220;`python<br \/>import pkg_resources<\/p>\n<p>def get_pkg_license(pkg):<br \/> try:<br \/> lines = pkg.get_metadata_lines(&#8216;METADATA&#8217;)<br \/> except:<br \/> lines = pkg.get_metadata_lines(&#8216;PKG-INFO&#8217;)<\/p>\n<p> license = &#8216;UNKNOWN&#8217;<br \/> labels = [&#8216;License: &#8216;, &#8216;Classifier: License :: OSI Approved :: &#8216;]<br \/> for label in labels:<br \/> for line in lines:<br \/> if line.startswith(label):<br \/> license = line[len(label):]<br \/> break<br \/> if license != &#8216;UNKNOWN&#8217;:<br \/> return license<\/p>\n<p> return &#8216;(Licence not found)&#8217;<\/p>\n<p>def get_pkg_home_page(pkg):<br \/> try:<br \/> lines = pkg.get_metadata_lines(&#8216;METADATA&#8217;)<br \/> except:<br \/> lines = pkg.get_metadata_lines(&#8216;PKG-INFO&#8217;)<br \/> label = &#8216;Home-page: &#8216;<br \/> for line in lines:<br \/> if line.startswith(label):<br \/> url = line[len(label):]<br \/> break<br \/> if url == &#8216;UNKNOWN&#8217;:<br \/> url = &#8216;https:\/\/pypi.python.org\/pypi\/&#8217;+pkg.key<br \/> return url<\/p>\n<p>def create_packages_and_licenses_text():<br \/> text = &#8221;<br \/> for pkg in sorted(pkg_resources.working_set, key=lambda x: str(x).lower()):<br \/> text += &#8216;t&#8217;.join([pkg.key,pkg.version,get_pkg_license(pkg),get_pkg_home_page(pkg)]) + &#8216;n&#8217;<br \/> return text<\/p>\n<p>if __name__ == &#8220;__main__&#8221;:<br \/> text = create_packages_and_licenses_text()<br \/> print(text)<\/p>\n<p> filename = &#8216;packages_and_licenses.txt&#8217;<br \/> with open(filename, &#8216;w&#8217;, encoding=&#8217;Shift-JIS&#8217;) as f:<br \/> f.write(text)<br \/>&#8220;`                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625696\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : sunhk25 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @sunhk25 markdown \u4e0d\u7075\u4e86\uff0c\u81ea\u5df1\u53bb\u770b\u5427 http:\/\/futago-life.com\/wife-support\/tech\/python-lib-license.html                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5625697\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : linlin6 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @no1xsyzy \u8c22\u8c22\u8001\u54e5<\/p>\n<p>@sunhk25 \u8c22\u8c22\u8001\u54e5\uff0c\u80fd\u8dd1\u6210\u529f                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>\u5173\u4e8e Python \u7684\u5e93\u5f00\u6e90\u95ee\u9898 &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/423445"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=423445"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/423445\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=423445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=423445"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=423445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}