Skip to content

Instantly share code, notes, and snippets.

@michaelaye
Created December 14, 2019 00:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michaelaye/db52a83ca0dc342855c3d570bbc476a9 to your computer and use it in GitHub Desktop.
Save michaelaye/db52a83ca0dc342855c3d570bbc476a9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from conda.cli.python_api import Commands, run_command"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"class CondaList:\n",
" \"\"\"Manage Conda list output.\n",
" \n",
" Attributes\n",
" ----------\n",
" env : string\n",
" Name of the conda env for which the list command was run.\n",
" colnames : list\n",
" List of column names in the parsed dataframe.\n",
" In 2019-12, this was ['Name', 'Version', 'Build', 'Channel']\n",
" df : pd.DataFrame\n",
" Dataframe with the installed package data for the current environment\n",
" pip_items : pd.DataFrame\n",
" self.df filtered for only packages installed via pip\n",
" \"\"\"\n",
" def __init__(self):\n",
" self.results = run_command(Commands.LIST)[0].split('\\n')\n",
" self.parse_results()\n",
" \n",
" @property\n",
" def env(self):\n",
" return self.results[0].split()[-1].split('/')[-1][:-1]\n",
" \n",
" @property\n",
" def colnames(self):\n",
" return self.results[2].strip('#').strip().split()\n",
" \n",
" def parse_results(self):\n",
" data = self.results[3:]\n",
" self.df = pd.DataFrame([line.split() for line in data], columns=self.colnames)\n",
" \n",
" @property\n",
" def pip_items(self):\n",
" return self.df.query(\"Channel=='pypi'\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"condalist = CondaList()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'py37'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"condalist.env"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Name', 'Version', 'Build', 'Channel']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"condalist.colnames"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Version</th>\n",
" <th>Build</th>\n",
" <th>Channel</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>advbumpversion</td>\n",
" <td>1.2.0</td>\n",
" <td>py_0</td>\n",
" <td>conda-forge</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>aiohttp</td>\n",
" <td>3.6.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>alabaster</td>\n",
" <td>0.7.12</td>\n",
" <td>py_0</td>\n",
" <td>conda-forge</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>altair</td>\n",
" <td>4.0.0</td>\n",
" <td>py_0</td>\n",
" <td>conda-forge</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>apipkg</td>\n",
" <td>1.5</td>\n",
" <td>py_0</td>\n",
" <td>conda-forge</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name Version Build Channel\n",
"0 advbumpversion 1.2.0 py_0 conda-forge\n",
"1 aiohttp 3.6.2 pypi_0 pypi\n",
"2 alabaster 0.7.12 py_0 conda-forge\n",
"3 altair 4.0.0 py_0 conda-forge\n",
"4 apipkg 1.5 py_0 conda-forge"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"condalist.df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Version</th>\n",
" <th>Build</th>\n",
" <th>Channel</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>aiohttp</td>\n",
" <td>3.6.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>async-timeout</td>\n",
" <td>3.0.1</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>dask-labextension</td>\n",
" <td>1.0.3</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>dulwich</td>\n",
" <td>0.19.14</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>importlib-resources</td>\n",
" <td>1.0.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>jupyter-server-proxy</td>\n",
" <td>1.2.0</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>126</th>\n",
" <td>jupyterlab-github</td>\n",
" <td>1.0.0</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>179</th>\n",
" <td>multidict</td>\n",
" <td>4.7.1</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183</th>\n",
" <td>nb-black</td>\n",
" <td>1.0.7</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>188</th>\n",
" <td>nbresuse</td>\n",
" <td>0.3.3</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>218</th>\n",
" <td>pbr</td>\n",
" <td>5.4.4</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>220</th>\n",
" <td>pds4-tools</td>\n",
" <td>1.1</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>227</th>\n",
" <td>pip-api</td>\n",
" <td>0.0.13</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>262</th>\n",
" <td>pyqt5</td>\n",
" <td>5.13.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>263</th>\n",
" <td>pyqt5-sip</td>\n",
" <td>12.7.0</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>264</th>\n",
" <td>pyqtwebengine</td>\n",
" <td>5.13.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>pysis</td>\n",
" <td>0.6.0</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>296</th>\n",
" <td>reno</td>\n",
" <td>2.11.3</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>313</th>\n",
" <td>simpervisor</td>\n",
" <td>0.3</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" <tr>\n",
" <th>363</th>\n",
" <td>yarl</td>\n",
" <td>1.4.2</td>\n",
" <td>pypi_0</td>\n",
" <td>pypi</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name Version Build Channel\n",
"1 aiohttp 3.6.2 pypi_0 pypi\n",
"10 async-timeout 3.0.1 pypi_0 pypi\n",
"52 dask-labextension 1.0.3 pypi_0 pypi\n",
"61 dulwich 0.19.14 pypi_0 pypi\n",
"100 importlib-resources 1.0.2 pypi_0 pypi\n",
"118 jupyter-server-proxy 1.2.0 pypi_0 pypi\n",
"126 jupyterlab-github 1.0.0 pypi_0 pypi\n",
"179 multidict 4.7.1 pypi_0 pypi\n",
"183 nb-black 1.0.7 pypi_0 pypi\n",
"188 nbresuse 0.3.3 pypi_0 pypi\n",
"218 pbr 5.4.4 pypi_0 pypi\n",
"220 pds4-tools 1.1 pypi_0 pypi\n",
"227 pip-api 0.0.13 pypi_0 pypi\n",
"262 pyqt5 5.13.2 pypi_0 pypi\n",
"263 pyqt5-sip 12.7.0 pypi_0 pypi\n",
"264 pyqtwebengine 5.13.2 pypi_0 pypi\n",
"267 pysis 0.6.0 pypi_0 pypi\n",
"296 reno 2.11.3 pypi_0 pypi\n",
"313 simpervisor 0.3 pypi_0 pypi\n",
"363 yarl 1.4.2 pypi_0 pypi"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"condalist.pip_items"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now I can use the `sh` package to update my pip packages only:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import sh"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"pip_cmd = sh.Command('pip').bake('install').bake('-U')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Updating aiohttp\n",
"Updating async-timeout\n",
"Updating dask-labextension\n",
"Updating dulwich\n",
"Updating importlib-resources\n",
"Updating jupyter-server-proxy\n",
"Updating jupyterlab-github\n",
"Updating multidict\n",
"Updating nb-black\n",
"Updating nbresuse\n",
"Updating pbr\n",
"Updating pds4-tools\n",
"Updating pip-api\n",
"Updating pyqt5\n",
"Updating pyqt5-sip\n",
"Updating pyqtwebengine\n",
"Updating pysis\n",
"Updating reno\n",
"Updating simpervisor\n",
"Updating yarl\n"
]
}
],
"source": [
"for item in condalist.pip_items.Name:\n",
" print(\"Updating\", item)\n",
" _ = pip_cmd(item)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:py37] *",
"language": "python",
"name": "conda-env-py37-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment