= 2021-06-25 = == Python: pip-autoremove == - 有時候 python 環境搞得有點亂,雖然已經有用 virtenv 了。 - pip uninstall 時並不會考慮相依套件,這時候得靠 pip-autoremove 來達成 - https://github.com/invl/pip-autoremove === 清洗前 === - `pipdeptree -l --graph-output dot | pbcopy` 的結果 {{{ #!graphviz digraph { "youtube-dl" [label="youtube-dl\n2021.5.16"] xmlschema [label="xmlschema\n1.4.2"] xmlschema -> elementpath [label=">=2.1.2,<3.0.0"] xmljson [label="xmljson\n0.2.1"] xlrd [label="xlrd\n2.0.1"] wheel [label="wheel\n0.35.1"] webweb [label="webweb\n0.0.37"] webweb -> numpy [label=">=1.16.3"] "webdriver-manager" [label="webdriver-manager\n3.2.2"] "webdriver-manager" -> configparser [label=any] "webdriver-manager" -> requests [label=any] "webdriver-manager" -> crayons [label=any] wcwidth [label="wcwidth\n0.1.8"] urllib3 [label="urllib3\n1.25.8"] tweepy [label="tweepy\n3.8.0"] tweepy -> pysocks [label=">=1.5.7"] tweepy -> six [label=">=1.10.0"] tweepy -> "requests-oauthlib" [label=">=0.7.0"] tweepy -> requests [label=">=2.11.1"] traitlets [label="traitlets\n5.0.5"] traitlets -> "ipython-genutils" [label=any] toml [label="toml\n0.10.2"] "text-unidecode" [label="text-unidecode\n1.3"] sshuttle [label="sshuttle\n1.0.5"] sshuttle -> psutil [label=any] sqlalchemy [label="SQLAlchemy\n1.4.5"] sqlalchemy -> greenlet [label="!=0.4.17"] soupsieve [label="soupsieve\n2.0.1"] snoop [label="snoop\n0.3.0"] snoop -> six [label=any] snoop -> "cheap-repr" [label=">=0.4.0"] snoop -> executing [label=any] snoop -> asttokens [label=any] snoop -> pygments [label=any] six [label="six\n1.14.0"] sgmllib3k [label="sgmllib3k\n1.0.0"] setuptools [label="setuptools\n50.3.2"] selenium [label="selenium\n3.141.0"] selenium -> urllib3 [label=any] s3transfer [label="s3transfer\n0.4.2"] s3transfer -> botocore [label=">=1.12.36,<2.0a.0"] rterm [label="rterm\n1.3"] rterm -> pysocks [label="==1.7.1"] rterm -> future [label="==0.18.2"] rterm -> six [label="==1.14.0"] rterm -> feedparser [label="==5.2.1"] rterm -> chardet [label="==3.0.4"] rterm -> certifi [label="==2019.11.28"] rterm -> idna [label="==2.9"] rterm -> requests [label="==2.23.0"] rterm -> urllib3 [label="==1.25.8"] rterm -> oauthlib [label="==3.1.0"] rterm -> "requests-oauthlib" [label="==1.3.0"] rterm -> asciimatics [label="==1.11.0"] rterm -> tweepy [label="==3.8.0"] rterm -> wcwidth [label="==0.1.8"] rterm -> pillow [label="==7.0.0"] rterm -> pyfiglet [label="==0.8.post1"] rsa [label="rsa\n4.5"] rsa -> pyasn1 [label=">=0.1.3"] requests [label="requests\n2.23.0"] requests -> idna [label=">=2.5,<3"] requests -> urllib3 [label=">=1.21.1,<1.26,!=1.25.1,!=1.25.0"] requests -> certifi [label=">=2017.4.17"] requests -> chardet [label=">=3.0.2,<4"] "requests-oauthlib" [label="requests-oauthlib\n1.3.0"] "requests-oauthlib" -> requests [label=">=2.0.0"] "requests-oauthlib" -> oauthlib [label=">=3.0.0"] pyyaml [label="PyYAML\n5.3.1"] pyx12 [label="pyx12\n2.3.3"] pytz [label="pytz\n2021.1"] pytimeparse [label="pytimeparse\n1.1.8"] "python-slugify" [label="python-slugify\n4.0.1"] "python-slugify" -> "text-unidecode" [label=">=1.3"] "python-dateutil" [label="python-dateutil\n2.8.1"] "python-dateutil" -> six [label=">=1.5"] pytest [label="pytest\n6.2.1"] pytest -> toml [label=any] pytest -> iniconfig [label=any] pytest -> attrs [label=">=19.2.0"] pytest -> pluggy [label=">=0.12,<1.0.0a1"] pytest -> packaging [label=any] pytest -> py [label=">=1.8.2"] "pytest-metadata" [label="pytest-metadata\n1.11.0"] "pytest-metadata" -> pytest [label=">=2.9.0"] "pytest-html" [label="pytest-html\n3.1.1"] "pytest-html" -> "pytest-metadata" [label=any] "pytest-html" -> pytest [label=">=5.0,!=6.0.0"] pysocks [label="PySocks\n1.7.1"] pyparsing [label="pyparsing\n2.4.7"] pygments [label="Pygments\n2.7.2"] pyfiglet [label="pyfiglet\n0.8.post1"] pyasn1 [label="pyasn1\n0.4.8"] py [label="py\n1.10.0"] ptyprocess [label="ptyprocess\n0.6.0"] psutil [label="psutil\n5.8.0"] "prompt-toolkit" [label="prompt-toolkit\n3.0.8"] "prompt-toolkit" -> wcwidth [label=any] pluggy [label="pluggy\n0.13.1"] pipdeptree [label="pipdeptree\n2.0.0"] pipdeptree -> pip [label=">=6.0.0"] pip [label="pip\n21.1.2"] pillow [label="Pillow\n7.0.0"] pickleshare [label="pickleshare\n0.7.5"] pexpect [label="pexpect\n4.8.0"] pexpect -> ptyprocess [label=">=0.5"] parso [label="parso\n0.7.1"] parsedatetime [label="parsedatetime\n2.6"] pandas [label="pandas\n1.1.4"] pandas -> pytz [label=">=2017.2"] pandas -> numpy [label=">=1.15.4"] pandas -> "python-dateutil" [label=">=2.7.3"] packaging [label="packaging\n20.9"] packaging -> pyparsing [label=">=2.0.2"] openpyxl [label="openpyxl\n3.0.7"] openpyxl -> "et-xmlfile" [label=any] oauthlib [label="oauthlib\n3.1.0"] numpy [label="numpy\n1.19.4"] lxml [label="lxml\n4.6.2"] leather [label="leather\n0.3.3"] leather -> six [label=">=1.6.1"] jmespath [label="jmespath\n0.10.0"] jedi [label="jedi\n0.17.2"] jedi -> parso [label=">=0.7.0,<0.8.0"] isodate [label="isodate\n0.6.0"] isodate -> six [label=any] ipython [label="ipython\n7.19.0"] ipython -> appnope [label=any] ipython -> traitlets [label=">=4.2"] ipython -> pexpect [label=">4.3"] ipython -> jedi [label=">=0.10"] ipython -> pickleshare [label=any] ipython -> decorator [label=any] ipython -> backcall [label=any] ipython -> setuptools [label=">=18.5"] ipython -> pygments [label=any] ipython -> "prompt-toolkit" [label=">=2.0.0,<3.1.0,!=3.0.1,!=3.0.0"] "ipython-genutils" [label="ipython-genutils\n0.2.0"] iniconfig [label="iniconfig\n1.1.1"] idna [label="idna\n2.9"] greenlet [label="greenlet\n1.0.0"] graphviz [label="graphviz\n0.16"] generateds [label="generateDS\n2.38.6"] generateds -> six [label=any] generateds -> requests [label=">=2.21.0"] generateds -> lxml [label=any] future [label="future\n0.18.2"] feedparser [label="feedparser\n5.2.1"] faker [label="Faker\n6.4.1"] faker -> "python-dateutil" [label=">=2.4"] faker -> "text-unidecode" [label="==1.3"] executing [label="executing\n0.6.0"] "et-xmlfile" [label="et-xmlfile\n1.0.1"] elementpath [label="elementpath\n2.2.2"] docutils [label="docutils\n0.15.2"] decorator [label="decorator\n4.4.2"] dbfread [label="dbfread\n2.0.7"] csvkit [label="csvkit\n1.0.5"] csvkit -> "agate-excel" [label=">=0.2.2"] csvkit -> agate [label=">=1.6.1"] csvkit -> six [label=">=1.6.1"] csvkit -> "agate-dbf" [label=">=0.2.0"] csvkit -> "agate-sql" [label=">=0.5.3"] crayons [label="crayons\n0.4.0"] crayons -> colorama [label=any] configparser [label="configparser\n5.0.1"] configobj [label="configobj\n5.0.6"] configobj -> six [label=any] colorama [label="colorama\n0.4.3"] "cheap-repr" [label="cheap-repr\n0.4.5"] chardet [label="chardet\n3.0.4"] certifi [label="certifi\n2019.11.28"] bs4 [label="bs4\n0.0.1"] bs4 -> beautifulsoup4 [label=any] botocore [label="botocore\n1.20.73"] botocore -> urllib3 [label=">=1.25.4,<1.27"] botocore -> "python-dateutil" [label=">=2.1,<3.0.0"] botocore -> jmespath [label=">=0.7.1,<1.0.0"] boto3 [label="boto3\n1.17.72"] boto3 -> botocore [label=">=1.20.72,<1.21.0"] boto3 -> jmespath [label=">=0.7.1,<1.0.0"] boto3 -> s3transfer [label=">=0.4.0,<0.5.0"] boto [label="boto\n2.49.0"] beautifulsoup4 [label="beautifulsoup4\n4.9.3"] beautifulsoup4 -> soupsieve [label=">1.2"] backcall [label="backcall\n0.2.0"] babel [label="Babel\n2.9.0"] babel -> pytz [label=">=2015.7"] awscli [label="awscli\n1.19.73"] awscli -> docutils [label=">=0.10,<0.16"] awscli -> botocore [label="==1.20.73"] awscli -> s3transfer [label=">=0.4.0,<0.5.0"] awscli -> pyyaml [label=">=3.10,<5.5"] awscli -> colorama [label=">=0.2.5,<0.4.4"] awscli -> rsa [label=">=3.1.2,<4.8"] attrs [label="attrs\n21.2.0"] asttokens [label="asttokens\n2.0.5"] asttokens -> six [label=any] asciimatics [label="asciimatics\n1.11.0"] asciimatics -> pillow [label=">=2.7.0"] asciimatics -> pyfiglet [label=">=0.7.2"] asciimatics -> future [label=any] asciimatics -> wcwidth [label=any] appnope [label="appnope\n0.1.0"] agate [label="agate\n1.6.1"] agate -> leather [label=">=0.3.2"] agate -> isodate [label=">=0.5.4"] agate -> "python-slugify" [label=">=1.2.1"] agate -> babel [label=">=2.0"] agate -> parsedatetime [label=">=2.1"] agate -> pytimeparse [label=">=1.1.5"] agate -> six [label=">=1.9.0"] "agate-sql" [label="agate-sql\n0.5.6"] "agate-sql" -> sqlalchemy [label=">=1.0.8"] "agate-sql" -> agate [label=">=1.5.0"] "agate-excel" [label="agate-excel\n0.2.3"] "agate-excel" -> xlrd [label=">=0.9.4"] "agate-excel" -> openpyxl [label=">=2.3.0"] "agate-excel" -> agate [label=">=1.5.0"] "agate-dbf" [label="agate-dbf\n0.2.2"] "agate-dbf" -> dbfread [label=">=2.0.5"] "agate-dbf" -> agate [label=">=1.5.0"] } }}} === 清洗後 === {{{ #!graphviz digraph { "youtube-dl" [label="youtube-dl\n2021.5.16"] xmlschema [label="xmlschema\n1.4.2"] xmlschema -> elementpath [label=">=2.1.2,<3.0.0"] xmljson [label="xmljson\n0.2.1"] wheel [label="wheel\n0.35.1"] webweb [label="webweb\n0.0.37"] webweb -> numpy [label=">=1.16.3"] "webdriver-manager" [label="webdriver-manager\n3.2.2"] "webdriver-manager" -> requests [label=any] "webdriver-manager" -> crayons [label=any] "webdriver-manager" -> configparser [label=any] urllib3 [label="urllib3\n1.25.8"] toml [label="toml\n0.10.2"] "text-unidecode" [label="text-unidecode\n1.3"] sshuttle [label="sshuttle\n1.0.5"] sshuttle -> psutil [label=any] soupsieve [label="soupsieve\n2.0.1"] snoop [label="snoop\n0.3.0"] snoop -> asttokens [label=any] snoop -> executing [label=any] snoop -> pygments [label=any] snoop -> six [label=any] snoop -> "cheap-repr" [label=">=0.4.0"] six [label="six\n1.14.0"] sgmllib3k [label="sgmllib3k\n1.0.0"] setuptools [label="setuptools\n50.3.2"] selenium [label="selenium\n3.141.0"] selenium -> urllib3 [label=any] s3transfer [label="s3transfer\n0.4.2"] s3transfer -> botocore [label=">=1.12.36,<2.0a.0"] rsa [label="rsa\n4.5"] rsa -> pyasn1 [label=">=0.1.3"] requests [label="requests\n2.23.0"] requests -> urllib3 [label=">=1.21.1,<1.26,!=1.25.1,!=1.25.0"] requests -> idna [label=">=2.5,<3"] requests -> chardet [label=">=3.0.2,<4"] requests -> certifi [label=">=2017.4.17"] pyyaml [label="PyYAML\n5.3.1"] pyx12 [label="pyx12\n2.3.3"] pytz [label="pytz\n2021.1"] "python-dateutil" [label="python-dateutil\n2.8.1"] "python-dateutil" -> six [label=">=1.5"] pytest [label="pytest\n6.2.1"] pytest -> pluggy [label=">=0.12,<1.0.0a1"] pytest -> toml [label=any] pytest -> iniconfig [label=any] pytest -> packaging [label=any] pytest -> attrs [label=">=19.2.0"] pytest -> py [label=">=1.8.2"] "pytest-metadata" [label="pytest-metadata\n1.11.0"] "pytest-metadata" -> pytest [label=">=2.9.0"] "pytest-html" [label="pytest-html\n3.1.1"] "pytest-html" -> "pytest-metadata" [label=any] "pytest-html" -> pytest [label=">=5.0,!=6.0.0"] pyparsing [label="pyparsing\n2.4.7"] pygments [label="Pygments\n2.7.2"] pyasn1 [label="pyasn1\n0.4.8"] py [label="py\n1.10.0"] psutil [label="psutil\n5.8.0"] pluggy [label="pluggy\n0.13.1"] pipdeptree [label="pipdeptree\n2.0.0"] pipdeptree -> pip [label=">=6.0.0"] pip [label="pip\n21.1.2"] "pip-autoremove" [label="pip-autoremove\n0.9.1"] pandas [label="pandas\n1.1.4"] pandas -> "python-dateutil" [label=">=2.7.3"] pandas -> numpy [label=">=1.15.4"] pandas -> pytz [label=">=2017.2"] packaging [label="packaging\n20.9"] packaging -> pyparsing [label=">=2.0.2"] numpy [label="numpy\n1.19.4"] lxml [label="lxml\n4.6.2"] jmespath [label="jmespath\n0.10.0"] iniconfig [label="iniconfig\n1.1.1"] idna [label="idna\n2.9"] graphviz [label="graphviz\n0.16"] generateds [label="generateDS\n2.38.6"] generateds -> lxml [label=any] generateds -> requests [label=">=2.21.0"] generateds -> six [label=any] faker [label="Faker\n6.4.1"] faker -> "text-unidecode" [label="==1.3"] faker -> "python-dateutil" [label=">=2.4"] executing [label="executing\n0.6.0"] elementpath [label="elementpath\n2.2.2"] docutils [label="docutils\n0.15.2"] crayons [label="crayons\n0.4.0"] crayons -> colorama [label=any] configparser [label="configparser\n5.0.1"] configobj [label="configobj\n5.0.6"] configobj -> six [label=any] colorama [label="colorama\n0.4.3"] "cheap-repr" [label="cheap-repr\n0.4.5"] chardet [label="chardet\n3.0.4"] certifi [label="certifi\n2019.11.28"] bs4 [label="bs4\n0.0.1"] bs4 -> beautifulsoup4 [label=any] botocore [label="botocore\n1.20.73"] botocore -> jmespath [label=">=0.7.1,<1.0.0"] botocore -> urllib3 [label=">=1.25.4,<1.27"] botocore -> "python-dateutil" [label=">=2.1,<3.0.0"] beautifulsoup4 [label="beautifulsoup4\n4.9.3"] beautifulsoup4 -> soupsieve [label=">1.2"] awscli [label="awscli\n1.19.73"] awscli -> pyyaml [label=">=3.10,<5.5"] awscli -> docutils [label=">=0.10,<0.16"] awscli -> botocore [label="==1.20.73"] awscli -> colorama [label=">=0.2.5,<0.4.4"] awscli -> rsa [label=">=3.1.2,<4.8"] awscli -> s3transfer [label=">=0.4.0,<0.5.0"] attrs [label="attrs\n21.2.0"] asttokens [label="asttokens\n2.0.5"] asttokens -> six [label=any] } }}}